You are viewing a potentially older version of this package. View all versions.
korCaptain-LagWatch-0.3.21 icon

LagWatch

Server lag monitor for admins: per-player ping/FPS/object load with traffic-light status, one-click notices, optional diagnostics.

Date uploaded 11 hours ago
Version 0.3.21
Download link korCaptain-LagWatch-0.3.21.zip
Downloads 13
Dependency string korCaptain-LagWatch-0.3.21

This mod requires the following mods to function

denikson-BepInExPack_Valheim-5.4.2202 icon
denikson-BepInExPack_Valheim

BepInEx pack for Valheim. Preconfigured and includes unstripped Unity DLLs.

Preferred version: 5.4.2202

README

LagWatch - Valheim Server Lag Monitor

Ko-fi Discord

한국어 설명 보기 | English Description


#Language support: 한국어, English (notices sent to players are shown in each player's own game language)


🇰🇷 한국어 (Korean)

개요

LagWatch는 한 명의 접속 환경이나 PC 때문에 서버 전체가 랙이 걸릴 때, 누가 왜 그런지 관리자가 한눈에 확인할 수 있게 해주는 서버 관리 모드입니다. 접속자별 핑, FPS, 소유 오브젝트, 송신 대기, 트래픽을 녹색 / 주황 / 빨강 신호등으로 보여주고, 버튼 한 번으로 해당 유저에게 "게임을 종료하고 조치해 주세요" 안내를 보낼 수 있습니다.


📦 필수 모드 (Dependencies)
모드 버전 필수 여부
BepInExPack_Valheim 5.4.2202+ 필수
ConfigurationManager 최신 권장 (F1 GUI 설정용)

중요: 전용 서버와 모든 클라이언트 양쪽에 설치하세요. 모드가 없는 유저도 패널에는 표시되지만(핑, 오브젝트, 트래픽) FPS / 모드 정보가 없고 안내 메시지를 받을 수 없습니다. 관리자는 서버 adminlist.txt에 등록된 유저입니다.


✨ 주요 기능

관리자 랙 패널

  • 기본 단축키 F10 (컨피그 [Client] PanelHotkey에서 변경), 관리자만 열 수 있습니다.
  • 접속자 한 명이 한 줄: 핑 / FPS / 소유 오브젝트 / 송신 대기 / 트래픽 / 설치 모드 수 / 상태
  • 소유 오브젝트는 그 유저가 서버로부터 시뮬레이션을 맡은 오브젝트 수입니다. 정적인 플레이어 건축물·상자·무덤은 제외하므로 큰 기지에 서 있어도 수치가 부풀지 않습니다(나무, 몬스터, 아이템 등은 포함).
  • 나쁜 상태의 유저가 맨 위에 오도록 자동 정렬됩니다.
  • 서버가 변화가 있을 때 보내주는 방식이라 패널을 열어 두어도 매 프레임 조회하지 않습니다.
  • 행을 클릭하면 아래에 상세 정보(핑 평균/최대, FPS 평균/최저, 상위 소유 오브젝트, 설치 모드 목록, 아이템 출처)가 표시됩니다.

신호등 상태

색만으로 구분하지 않도록 신호등 색 + 글자 라벨을 함께 표시합니다. 가장 나쁜 지표가 종합 상태가 됩니다.

지표 주의 (주황) 기본값 위험 (빨강) 기본값 측정 위치
핑 (평균) 150 ms 이상 300 ms 이상 서버
소유 오브젝트 3000개 이상 8000개 이상 서버
송신 대기 50 KB 이상 200 KB 이상 서버
트래픽 (송수신 합) 150 KB/s 이상 400 KB/s 이상 서버
FPS (평균) 30 이하 15 이하 클라이언트 보고

기본값은 아직 서버 환경에 맞게 조정되지 않은 시작값입니다. [Thresholds]에서 서버에 맞게 바꿔 주세요.

서버 상태 줄

패널 맨 위에서 서버 자체의 상태를 좋음(녹색) / 보통(노랑) / 힘듦(빨강) 신호등으로 보여줍니다.

칸 설명 상태 판정 기본값 (보통 / 힘듦)
서버 상태 CPU와 프레임 시간 중 나쁜 쪽 -
내 핑 이 관리자 PC에서 서버까지의 핑 -
프레임 평균/최대 서버 프레임 시간(ms)과 끊김 횟수 평균 50 / 100 ms
CPU 서버 프로세스 CPU. 100 = 코어 1개 전부 사용 85 / 130 %
메모리 서버 프로세스 메모리 -
접속자 / 전체 오브젝트 접속자 수와 월드 전체 오브젝트(ZDO) 수 -
트래픽 송/수 전체 접속자 합계 -
가동 시간 서버가 켜진 시간 -
송신한도 (KB/s) 플레이어 한 명에게 보낼 수 있는 상한 대비, 가장 바쁜 플레이어의 사용률 70 / 90 %
  • 패널을 연 관리자가 있을 때만 측정하므로, 아무도 패널을 열지 않으면 서버 부담이 없습니다.
  • 서버와 서버 자신 사이의 핑은 의미가 없어서, 패널을 보는 관리자 PC에서 서버까지의 핑을 보여줍니다.
  • 전용 서버가 아니라 플레이어 PC에서 게임을 호스트하는 경우에는 호스트 본인의 PC도 접속자 목록에 표시됩니다.

서버 전송 한도 늘리기 (선택, 서버 전용)

  • 서버는 플레이어 한 명에게 한 번에 보낼 수 있는 오브젝트 동기화 데이터에 상한이 있습니다(기본 약 200KB/s). 오브젝트가 많은 곳에서 이 상한에 걸리면 송신 대기가 쌓이고 랙이 생깁니다.
  • 서버 컨피그 [Bandwidth] SendLimitKBs로 이 상한을 정합니다. 기본값은 1024(1MB/s) 이고, 0으로 하면 게임 기본 동작 그대로입니다. 실행 중에도 바로 적용됩니다. 이미 컨피그 파일이 있는 서버는 저장된 기존 값(0)이 유지되므로 직접 바꿔야 합니다.
  • 서버 회선의 업로드가 충분할 때만 올리세요. 서버 상태 줄의 송신한도 사용률이 90%를 넘으면 서버 로그에 올려 보라는 안내가 나옵니다.
  • 게임 업데이트로 해당 부분 구조가 바뀌면 값을 바꾸지 않고 경고만 남기며, 모드의 나머지 기능은 그대로 동작합니다.

패킷 압축 (선택, 서버·클라이언트)

  • 컨피그 [Compression] Enabled = true로 켜면(기본 꺼짐, 재시작 필요) 오브젝트 동기화 같은 큰 패킷을 gzip으로 압축해 보냅니다. MinBytes보다 작거나 압축해도 이득이 없는 패킷은 그대로 보냅니다.
  • 서버와 클라이언트 양쪽이 LagWatch를 켰다고 서로 확인한 연결에서만 압축합니다. 모드가 없는 유저, 압축을 끈 유저에게는 항상 원본 그대로 보내므로 접속은 막히지 않습니다.
  • 패널의 트래픽 수치는 압축된 크기 기준이라 켜면 낮아집니다.

다른 네트워크 모드와의 호환성

  • Better Networking (DIT.BetterNetworking10): LagWatch의 압축과 전송 한도가 같은 역할을 하므로 같이 쓰지 마세요. LagWatch를 쓸 때는 Better Networking을 제거하는 것을 권장합니다.
  • VBNetTweaks (VitByr.VBNetTweaks): 같이 쓰는 구성을 지원합니다. VBNetTweaks는 이동 보간, 배 동기화, 지도 마커, Steam 소켓 설정을 맡고, LagWatch는 모니터링·알림·압축을 맡습니다. 둘 다 서버의 ZDO 전송 한도(10KB 상수)를 건드리는데, LagWatch가 항상 먼저 적용되도록 순서를 고정해 두었습니다. 같이 설치하면 전송 한도는 LagWatch의 [Bandwidth] SendLimitKBs만 적용되고 VBNetTweaks의 ZDOQueueLimit/ZDOQueueLimit_S는 무시됩니다. 한도는 SendLimitKBs로 정하세요(기본값 1024, 0은 게임 기본 한도).
  • 위 호환성은 모드 파일과 설정을 읽어 정리한 것이며, 모든 조합을 실제 서버에서 검증한 것은 아닙니다.

LagWatch의 장점

  • 관측과 조치를 한 곳에서: 누가 왜 랙을 만드는지 신호등으로 보고, 안내 메시지·서버 클리어·메모리 정리까지 패널에서 처리합니다.
  • 안전장치: 압축은 기본 꺼짐이고, 패치 대상 구조가 바뀌면 값을 바꾸지 않고 경고만 남깁니다. 전송 한도는 0으로 두면 게임 기본 동작입니다.
  • 서버만 설치해도 동작하는 부분이 많음: 전송 한도는 서버만으로 적용되고, 모드가 없는 유저도 패널에 표시됩니다.
  • 전용 서버에서도 측정: Steam 통계가 없는 전용 서버에서도 RPC 왕복 시간과 게임의 송수신 바이트 카운터로 핑과 트래픽을 보여줍니다.

다른 월드/서버 아이템 확인 (관리자 전용)

  • 이 서버에서 제작하거나 바닥에서 주운 아이템에 서버 월드 고유 표식이 찍히고, 관리자 패널 상세에 다른 월드 표식이 찍힌 아이템 수(이름 포함) 와 표식이 없는 미확인 아이템 수가 표시됩니다. 개수가 바뀌면 서버 로그에도 한 줄 남습니다.
  • 발헤임 아이템에는 출처 월드 기록이 없어 표식 방식으로만 구분할 수 있습니다. 모드를 깔기 전부터 가진 아이템과 상자의 월드 기본 전리품은 표식이 없어 미확인으로 셉니다. 위험 신호는 "다른 월드 아이템"입니다.
  • 클라이언트 보고값이므로 참고용이며, 모드가 없는 유저는 확인 불가로 표시됩니다. 자동 경고나 제재는 없습니다.

서버 클리어 (관리자 전용)

패널 오른쪽 아래 서버 클리어 버튼으로 서버에 쌓인 불필요한 오브젝트를 정리합니다. 되돌릴 수 없는 작업이라 아래 순서로만 실행됩니다.

  1. 버튼을 누르면 서버가 먼저 지울 개수를 세어 미리보기로 보여줍니다: "안정적인 서버 운영을 위해 필드의 아이템 N개, 몬스터 M마리를 지웁니다."
  2. 관리자가 실행을 눌러 확인해야 지워집니다(확인은 60초 안에).
  3. 실행이 시작되면 접속 중인 모든 유저에게 같은 안내가 표시됩니다(모드가 설치된 유저).
  4. 서버가 멈추지 않도록 프레임마다 일정 개수씩 나눠서 지웁니다.
지우는 것 지우지 않는 것
바닥에 떨어진 아이템 플레이어가 지은 건축물, 상자, 무덤(TombStone)
길들이지 않은 적대 몬스터 (숲/언데드/산/바다/평원/안개땅/드베르거 등) 길들인 동물, 보스, 플레이어, 상인
시체(ragdoll)와 스스로 사라지는 임시 이펙트/잔해 일반 동물(사슴, 멧돼지 등 비적대), 물고기

바닥에 떨어진 아이템에는 플레이어가 일부러 바닥에 둔 물건도 포함됩니다. 서버 컨피그 [Maintenance] AllowServerClear = false로 이 기능을 완전히 끌 수 있습니다.

메모리 정리 (관리자 전용)

메모리 정리 버튼은 ① LagWatch가 쌓은 에러 기록 비우기 ② 사용하지 않는 에셋 해제 ③ GC(가비지 컬렉션) 실행을 하고, 정리 전후의 프로세스 메모리와 관리 힙(GC) 을 보여줍니다.

  • 서버가 1~2초 멈출 수 있어 자동 실행은 하지 않고 관리자가 직접 누를 때만 실행됩니다(쿨타임 60초).
  • 프로세스 메모리는 OS로 바로 반환되지 않아 줄지 않을 수 있습니다. 줄어드는 것은 주로 관리 힙입니다.
  • 다른 모드가 가진 캐시는 비울 수 없습니다.

안내 메시지 보내기

  • 행의 안내 보내기 버튼을 누르면 해당 유저에게 어떤 종류의 랙을 유발하는지와 게임을 종료하고 조치한 뒤 다시 접속해 달라는 요청이 전송됩니다.
  • 메시지는 받는 유저의 게임 언어(한국어 / 영어)에 맞춰 자동으로 표시됩니다.
  • 원인별 조치 안내가 함께 표시됩니다: 네트워크 불안정, 주변 오브젝트 과다, 낮은 FPS, 송신 대기, 과다 트래픽
  • 같은 유저에게 반복 전송되지 않도록 쿨타임이 적용됩니다.

자동 경고 (선택)

  • 상태가 빨강인 유저에게 안내를 자동으로 보냅니다. 기본 꺼짐이며 관리자가 패널 상단 버튼이나 컨피그([Server] AutoWarnEnabled)로 켜고 끌 수 있습니다.
  • 자동 킥/차단은 하지 않습니다.

서버 진단 기록 (선택)

  • 서버 랙의 원인을 나중에 분석할 수 있도록 서버 부하 요소와 자주 나는 에러를 파일로 기록합니다. 기본 꺼짐, 컨피그 [Diagnostics] Enabled로 켜고 끄며 서버 재시작이 필요 없습니다.
  • 기록 위치: 서버의 BepInEx/LagWatch/diag-날짜.jsonl (주기마다 한 줄)
  • 기록 항목: 서버 프레임 평균/최대 시간, 끊김 횟수, 서버 송수신 속도·송신 큐·전송 한도 사용률, GC 메모리, 씬 오브젝트 수, ZDO 총 개수와 상위 프리팹, 자주 나는 에러 상위 10개(어느 플러그인에서 났는지 포함), 접속자별 상태
  • 서버에 부하를 주지 않도록 초당 로그 처리 상한, 에러 종류 개수 상한, 하루 파일 크기 상한, 보관 일수(기본 7일)가 내장되어 있습니다. 꺼져 있으면 로그 수집 자체를 하지 않습니다.

⚙️ 설정 (Config)

설정 파일: BepInEx/config/captain.LagWatch.cfg (서버와 클라이언트 각각)

섹션 항목 기본값 설명
Server SampleIntervalSec 5 핑/트래픽 측정 주기(초)
Server ZdoScanIntervalSec 30 소유 오브젝트 전체 집계 주기(초)
Server AutoWarnEnabled false 빨강 상태 유저에게 자동 안내
Server WarnCooldownSec 120 같은 유저에게 안내 사이 최소 간격
Thresholds PingWarnMs / PingBadMs 150 / 300 핑 기준
Thresholds OwnedObjectsWarn / Bad 3000 / 8000 소유 오브젝트 기준
Thresholds FpsWarn / FpsBad 30 / 15 FPS 기준
Thresholds SendQueueWarnKB / BadKB 50 / 200 송신 대기 기준
Thresholds TrafficWarnKBs / BadKBs 150 / 400 트래픽 기준
Thresholds ServerCpuWarn / ServerCpuBad 85 / 130 서버 CPU 기준 (100 = 코어 1개)
Thresholds ServerFrameWarnMs / BadMs 50 / 100 서버 평균 프레임 시간 기준
Bandwidth SendLimitKBs 1024 서버 전용. 플레이어 한 명에게 보낼 수 있는 상한(KB/s). 0 = 게임 기본(약 200)
Maintenance AllowServerClear true 서버 클리어 기능 허용 (false면 완전히 꺼짐)
Maintenance ClearBatchPerFrame 100 서버 클리어 시 프레임당 삭제 개수
Diagnostics Enabled false 서버 진단 기록
Diagnostics ReportIntervalMin 10 기록 주기(분)
Diagnostics IncludeWarnings false 경고도 집계
Diagnostics HitchMs 100 이 시간 이상 걸린 프레임을 끊김으로 집계
Diagnostics MaxLogsPerSec 500 초당 로그 처리 상한
Diagnostics MaxDistinctErrors 300 추적하는 에러 종류 상한
Diagnostics RetainDays / MaxFileMB 7 / 5 보관 일수 / 하루 파일 크기 상한
Client PanelHotkey F10 패널 단축키
Client ReportEnabled true FPS와 모드 목록을 서버로 보고
Client ReportIntervalSec 5 보고 주기(초)
Client ItemOriginCheck true 아이템 월드 표식 찍기와 다른 월드 아이템 보유 보고

🔒 개인정보 및 한계
  • 클라이언트는 평균/최저 FPS, 설치된 모드 이름(이름+버전), 다른 월드 표식이 찍힌 아이템 개수와 이름(최대 3개) 을 서버로 보냅니다. 다른 정보는 보내지 않으며, 유저는 [Client] ReportEnabled = false로 끄거나 [Client] ItemOriginCheck = false로 아이템 확인만 끌 수 있습니다.
  • 아이템 월드 표식은 아이템 데이터의 사용자 정의 값(customData)에 저장되며 게임 플레이에는 영향이 없습니다.
  • FPS와 모드 목록은 클라이언트가 직접 보고한 값이라 조작될 수 있습니다. 참고용으로만 사용하세요.
  • 신호등은 원인 후보를 보여주는 참고 지표이며 원인을 단정하지 않습니다.
  • 패널은 마우스 조작을 위해 열 때 인벤토리를 함께 엽니다(발헤임은 인벤토리가 열려야 마우스가 동작합니다). 게임패드 조작은 아직 검증되지 않았습니다.
  • 서버와 클라이언트의 통신 규약 버전이 다르면 서로의 메시지를 무시하고 로그에 경고를 남깁니다. 통신 규약이 바뀌는 업데이트는 양쪽을 함께 업데이트하세요.

🇺🇸 English

Overview

LagWatch is a server admin mod that shows who is making the whole server lag, and why, at a glance when one player's connection or PC drags everyone down. It displays each player's ping, FPS, owned objects, send queue and traffic with a green / orange / red traffic light, and lets you send that player a "please quit the game and fix this" notice with one click.


📦 Dependencies
Mod Version Required
BepInExPack_Valheim 5.4.2202+ Required
ConfigurationManager Latest Recommended (F1 GUI settings)

Important: install on both the dedicated server and every client. Players without the mod still appear in the panel (ping, objects, traffic) but have no FPS / mod data and cannot receive notices. Admins are the players listed in the server's adminlist.txt.


✨ Features

Admin lag panel

  • Default hotkey F10 (change it in [Client] PanelHotkey). Admins only.
  • One row per player: ping / FPS / owned objects / send queue / traffic / installed mods / status
  • Owned objects is the number of objects the server has handed to that player to simulate. Static player-built pieces, containers and tombstones are excluded, so standing in a big base does not inflate the number (trees, monsters, items and so on are counted).
  • Worst players are sorted to the top.
  • The server pushes updates when data changes, so the panel does not poll every frame while open.
  • Click a row to see details below: ping avg / max, FPS avg / min, top owned objects, the installed mod list and the item origin.

Traffic-light status

Each row shows a light color plus a text label so the state is not conveyed by color alone. The worst metric decides the overall status.

Metric Caution (orange) default Critical (red) default Measured on
Ping (average) 150 ms or more 300 ms or more Server
Owned objects 3000 or more 8000 or more Server
Send queue 50 KB or more 200 KB or more Server
Traffic (in + out) 150 KB/s or more 400 KB/s or more Server
FPS (average) 30 or less 15 or less Client report

The defaults are untuned starting points. Adjust them under [Thresholds] for your server.

Server status bar

The top of the panel shows the server itself with a Good (green) / Fair (yellow) / Struggling (red) light.

Cell Meaning Default limits (Fair / Struggling)
Server The worse of CPU and frame time -
My ping Ping from this admin's PC to the server -
Frame avg/max Server frame time (ms) and hitch count avg 50 / 100 ms
CPU Server process CPU. 100 = one full core 85 / 130 %
Memory Server process memory -
Players / All objects Player count and total world objects (ZDOs) -
Traffic out/in Sum over all players -
Uptime How long the server has been running -
Send cap (KB/s) How much of the per-player send limit the busiest player is using 70 / 90 %
  • It only measures while an admin has the panel open, so it costs the server nothing when nobody is looking.
  • A ping from the server to itself is meaningless, so the bar shows the ping from the admin's own PC to the server.
  • When the game is hosted from a player's PC instead of a dedicated server, the host's own PC also appears in the player list.

Raise the server send limit (optional, server only)

  • The server caps how much object-sync data it sends to one player at a time (about 200KB/s by default). In object-heavy areas, hitting that cap builds up the send queue and causes lag.
  • [Bandwidth] SendLimitKBs in the server config sets this cap. The default is 1024 (1MB/s); 0 keeps the game's default behavior. Changes apply while running. A server that already has a config file keeps its stored value (0), so change it by hand.
  • Only raise it if the server's upload line can handle it. When the send cap use in the server status bar goes over 90%, the server log suggests raising it.

Packet compression (optional, server and client)

  • Set [Compression] Enabled = true (off by default, restart required) to send large packets such as object sync as gzip. Packets under MinBytes, or ones that do not shrink, are sent unchanged.
  • It only compresses on a connection where both sides have confirmed they run LagWatch with compression on. Players without the mod, or with it off, always get normal packets, so nobody is blocked from joining.
  • The panel's traffic numbers are the compressed size, so they drop when this is on.

Compatibility with other network mods

  • Better Networking (DIT.BetterNetworking10): LagWatch's compression and send limit do the same job, so do not use them together. When you use LagWatch, removing Better Networking is recommended.
  • VBNetTweaks (VitByr.VBNetTweaks): running both is supported. VBNetTweaks handles movement smoothing, ship sync, map markers and Steam socket settings; LagWatch handles monitoring, notices and compression. Both touch the server's ZDO send limit (the 10KB constant), and LagWatch is ordered to always apply first. When installed together, only LagWatch's [Bandwidth] SendLimitKBs sets the send limit; VBNetTweaks' ZDOQueueLimit / ZDOQueueLimit_S are ignored. Set it with SendLimitKBs (default 1024; 0 keeps the game's default limit).
  • This compatibility summary comes from reading the mods' files and settings; not every combination has been verified on a live server.

Why LagWatch

  • Monitoring and action in one place: see who is causing lag by traffic light, then send a notice, run Server Clear or free memory from the same panel.
  • Safeguards: compression is off by default, and if the patched code changes the mod only logs a warning instead of changing values. Setting the send limit to 0 keeps the game's default behavior.
  • Much of it works with the server alone: the send limit needs only the server, and players without the mod still show in the panel.
  • Measures on dedicated servers too: without Steam statistics it still shows ping and traffic using RPC round trips and the game's own sent/received byte counters.
  • If a game update changes that part of the game, LagWatch leaves the value alone and logs a warning; the rest of the mod keeps working.

Other-world item check (admins only)

  • Items crafted or picked up from the ground on this server are marked with the server world's unique ID. The admin panel details show how many items a player carries that are marked from another world (with names) and how many have no mark (unverified). The server log also gets one line when the count changes.
  • Valheim items carry no record of the world they came from, so a mark is the only way to tell. Items held from before the mod was installed, and a chest's default world loot, have no mark and count as unverified. The warning sign is "other-world items".
  • It is client-reported, so treat it as a hint; players without the mod show as unavailable. There is no automatic warning or penalty.

Server Clear (admins only)

The Server clear button at the bottom right of the panel removes junk objects from the server. Because it cannot be undone, it only runs in this order:

  1. Pressing the button makes the server count what would be removed and show a preview: "For stable server operation, N items and M monsters in the field will be cleared."
  2. The admin must press Run to confirm (within 60 seconds).
  3. When it starts, every online player sees the same notice (players with the mod).
  4. It deletes a fixed number of objects per frame so the server does not stall.
Removed Never removed
Items lying on the ground Player-built pieces, containers, tombstones
Untamed hostile monsters (forest / undead / mountain / sea / plains / mistlands / Dverger ...) Tamed animals, bosses, players, traders
Corpses (ragdolls) and self-expiring temporary effects / debris Non-hostile wildlife (deer, boars ...), fish

Ground items include things a player deliberately dropped on the floor. Set [Maintenance] AllowServerClear = false in the server config to disable the feature completely.

Free memory (admins only)

The Free memory button (1) clears LagWatch's error records, (2) unloads unused assets and (3) runs garbage collection, then shows process memory and the managed (GC) heap before and after.

  • It can stall the server for a second or two, so it never runs automatically; it only runs when an admin presses it (60 second cooldown).
  • Process memory is not always returned to the OS right away and may not shrink; the managed heap is what usually drops.
  • It cannot clear caches held by other mods.

Send a notice

  • Press Send notice on a row to tell that player what kind of lag they cause and ask them to quit the game, fix it and rejoin.
  • The text is shown automatically in the receiving player's own game language (Korean / English).
  • Each cause comes with a fix hint: unstable network, too many objects nearby, low FPS, send queue, heavy traffic.
  • A cooldown prevents sending to the same player repeatedly.

Auto warning (optional)

  • Automatically sends the notice to players whose status is red. Off by default; admins toggle it with the button at the top of the panel or in the config ([Server] AutoWarnEnabled).
  • It never kicks or bans anyone.

Server diagnostics (optional)

  • Records server load factors and frequent error messages to a file for later analysis. Off by default; toggle [Diagnostics] Enabled in the config, no restart needed.
  • Location: BepInEx/LagWatch/diag-YYYY-MM-DD.jsonl on the server (one line per interval)
  • Recorded: server frame avg / max time, hitch count, server send / receive rate, send queue and send-limit use, GC memory, scene object count, total ZDOs and top prefabs, the top 10 frequent errors (including which plugin logged them) and per-player status
  • Built to not load the server: a per-second log processing cap, a cap on distinct error types, a daily file size cap and retention days (default 7). When off, no log collection happens at all.

⚙️ Config

Config file: BepInEx/config/captain.LagWatch.cfg (on the server and on each client)

Section Entry Default Description
Server SampleIntervalSec 5 Seconds between ping / traffic samples
Server ZdoScanIntervalSec 30 Seconds between full owned-object scans
Server AutoWarnEnabled false Automatically notify red players
Server WarnCooldownSec 120 Minimum seconds between notices to the same player
Thresholds PingWarnMs / PingBadMs 150 / 300 Ping limits
Thresholds OwnedObjectsWarn / Bad 3000 / 8000 Owned object limits
Thresholds FpsWarn / FpsBad 30 / 15 FPS limits
Thresholds SendQueueWarnKB / BadKB 50 / 200 Send queue limits
Thresholds TrafficWarnKBs / BadKBs 150 / 400 Traffic limits
Thresholds ServerCpuWarn / ServerCpuBad 85 / 130 Server CPU limits (100 = one core)
Thresholds ServerFrameWarnMs / BadMs 50 / 100 Average server frame time limits
Bandwidth SendLimitKBs 1024 Server only. Max KB/s the server may send to one player. 0 = game default (about 200)
Maintenance AllowServerClear true Allow Server Clear (false disables it completely)
Maintenance ClearBatchPerFrame 100 Objects deleted per frame during Server Clear
Diagnostics Enabled false Server diagnostics recording
Diagnostics ReportIntervalMin 10 Minutes between records
Diagnostics IncludeWarnings false Also count warnings
Diagnostics HitchMs 100 Frames at or above this many ms count as hitches
Diagnostics MaxLogsPerSec 500 Log events processed per second
Diagnostics MaxDistinctErrors 300 Cap on distinct error types tracked
Diagnostics RetainDays / MaxFileMB 7 / 5 Retention days / daily file size cap
Client PanelHotkey F10 Panel hotkey
Client ReportEnabled true Report FPS and mod list to the server
Client ReportIntervalSec 5 Seconds between reports
Client ItemOriginCheck true Mark items with the world ID and report other-world items you carry

🔒 Privacy and limitations
  • Clients send their average / minimum FPS, installed mod names (name + version), and the count and names (up to 3) of items marked from another world to the server. Nothing else is sent. Players can turn everything off with [Client] ReportEnabled = false, or only the item check with [Client] ItemOriginCheck = false.
  • The world mark is stored in the item's custom data (customData) and does not affect gameplay.
  • FPS and the mod list are self-reported by the client and can be faked. Use them as hints only.
  • The traffic light shows likely causes for reference; it does not prove one.
  • The panel opens the inventory with it so the mouse works (Valheim only accepts mouse input while the inventory is open). Gamepad use has not been verified.
  • If the server and client use different protocol versions they ignore each other's messages and log a warning. Update both sides together when an update changes the protocol.

🎮 My Other Mods / 함께 즐기면 더 좋은 모드

🌳 CaptainSkillTree

전문가 트리, 무기 트리, 직업 시스템으로 바이킹을 성장시키는 종합 스킬트리 모드입니다.

A comprehensive skill tree mod with expert trees, weapon trees and a class system for your Viking.

🎵 CaptainAudio

🎶 발헤임의 전투를 음악으로 더욱 생동감 있게!

🎶 Bring your Valheim battles to life with music!

👹 MonsterModifiers

몬스터에게 랜덤 속성을 부여해 난이도 균형을 맞출 수 있습니다.

Give monsters random modifiers to keep the challenge up.

🗺️ PotalMap

포탈을 지도에서 선택해 이동하고 길드원끼리 공유할 수 있습니다.

Pick portals on the map to travel, and share them with your guild.

🪦 FindTomb

사망 후 무덤 위치를 지도 핀과 방향 안내로 알려 줍니다.

Shows where your grave is with map pins and a direction guide after you die.

🏰 Captain Territorial

거점 구역의 건축·상호작용·침입을 제어하는 영토 와드 모드입니다.

A territory ward mod that controls building, interaction and intrusion inside a zone.

🛠️ NullReferenceFix

여러 모드를 함께 쓸 때 생기는 NullReferenceException과 로그 스팸을 줄여 줍니다.

Reduces NullReferenceException crashes and log spam when running many mods together.


📝 Credits / 크레딧

  • Developer / 개발자: KorCaptain
  • Framework / 프레임워크: BepInEx, Harmony

💬 Support / 지원


📜 License / 라이선스

Developer - KorCaptain


Keep your Valheim server smooth! / 쾌적한 발헤임 서버를 즐기세요!

CHANGELOG

Changelog / 변경 로그

2026-11-04 (v0.3.21)

English

  • ✅new1 : Added a server send-limit setting (Bandwidth.SendLimitKBs, default 1024 KB/s; 0 keeps the game's default) that raises how much ZDO data the server may send to each player per second.
  • ✅new2 : The server status bar now shows how much of the per-player send limit the busiest player is using, and the diagnostics record also logs the server send/receive rates, send queue and limit.
  • ✅new3 : Items crafted or picked up from the ground on this server are now marked with the world's ID, and the player detail panel shows how many items a player carries that are marked from another world (names included) plus how many are unverified; the server log notes it when the count changes.
  • ✅new4 : Added optional packet compression (off by default, [Compression]): large packets are sent as gzip only on connections where both sides confirmed they run LagWatch with compression on.
  • ✅improve1 : README now explains compatibility with Better Networking and VBNetTweaks and lists LagWatch's strengths.
  • ✅improve2 : The send-limit patch is now ordered to always apply before VBNetTweaks and Better Networking, so when installed together only LagWatch's SendLimitKBs sets the limit instead of whichever mod loads first.
  • ✅improve3 : On servers without Steam statistics the server log now notes each player's raw sent/received RPC byte counters once, to find out why the send traffic shows 0.

한국어

  • ✅new1 : 서버가 플레이어 한 명에게 초당 보낼 수 있는 ZDO 데이터량을 올리는 전송 한도 설정(Bandwidth.SendLimitKBs, 기본 1024KB/s, 0이면 게임 기본 한도)을 추가했습니다.
  • ✅new2 : 서버 상태 줄에 가장 바쁜 플레이어의 전송 한도 사용률이 표시되고, 진단 기록에도 서버 송수신 속도·송신 큐·한도가 함께 기록됩니다.
  • ✅new3 : 이 서버에서 제작하거나 바닥에서 주운 아이템에 월드 고유 표식을 찍고, 플레이어 상세 패널에 다른 월드 표식이 찍힌 아이템 수(이름 포함)와 미확인 아이템 수를 표시하며, 개수가 바뀌면 서버 로그에 남깁니다.
  • ✅new4 : 선택 기능인 패킷 압축을 추가했습니다(기본 꺼짐, [Compression]). 서버와 클라이언트 양쪽이 LagWatch의 압축을 켰다고 서로 확인한 연결에서만 큰 패킷을 gzip으로 보냅니다.
  • ✅improve1 : README에 Better Networking·VBNetTweaks와의 호환성과 LagWatch의 장점을 정리했습니다.
  • ✅improve2 : 전송 한도 패치가 항상 VBNetTweaks·Better Networking보다 먼저 적용되도록 순서를 고정해, 같이 설치해도 로드 순서와 무관하게 LagWatch의 SendLimitKBs만 한도를 정합니다.
  • ✅improve3 : Steam 통계가 없는 서버에서 송신 트래픽이 0으로 나오는 원인을 확인할 수 있도록, 접속자별 RPC 송수신 바이트 원본 카운터를 서버 로그에 한 번 남깁니다.

2026-11-03 (v0.3.14)

English

  • ✅new1 : Added an admin-only lag panel showing each player's ping, FPS, owned objects, send queue, traffic and mod count with a green / orange / red status light.
  • ✅new2 : Admins can click a button on a player's row to send a notice explaining the lag cause and asking them to quit and fix it, shown in the player's own game language (Korean / English).
  • ✅new3 : Added an optional auto-warning (off by default) that admins can toggle from the panel or the config, with a per-player cooldown.
  • ✅new4 : Clients report their FPS and installed mod list to the server (can be disabled in the client config).
  • ✅new5 : Added optional server diagnostics (off by default) that record frame time, hitches, memory, object distribution and frequent errors to a daily file with built-in load limits.
  • ✅improve1 : Redesigned the panel buttons with rounded corners, gradient, border and shadow, hover / press animation, and color-coded states (blue send, green on, red close, gray while waiting).
  • ✅improve2 : When the game is hosted from a player's PC (not a dedicated server), the host's own PC now also appears in the panel with its FPS, owned objects and mods.
  • ✅new6 : Added a server status bar at the top of the panel showing the server's CPU, memory, frame time (avg / max / hitches), total traffic, player and object counts, uptime and your own ping, with a Good (green) / Fair (yellow) / Struggling (red) light.
  • ✅new7 : Added an admin-only Server Clear button that previews and, after confirmation, removes ground items, hostile monsters and temporary debris in small batches, and tells everyone online how many items and monsters were cleared (player-built pieces, containers, tombstones and tamed animals are never touched; can be disabled in the server config).
  • ✅new8 : Added an admin-only Free Memory button that clears LagWatch's error records, unloads unused assets and runs garbage collection, then shows the memory before and after.
  • ✅improve3 : Owned-object counts now exclude player-built pieces, containers and tombstones, so a player standing in a big base is no longer flagged, and the world scan runs in small per-frame slices only while someone needs the data.
  • ✅improve4 : Clients stop sending reports after a few tries to servers that do not have LagWatch, which avoids warning spam in those servers' logs.
  • ✅fix1 : Admin status, panel subscriptions and notice cooldowns no longer carry over when you switch servers or reopen a world.
  • ✅fix2 : The server's player list no longer stays empty when the world object scan throws an error; the scan failure is logged once and player sampling continues.
  • ✅fix3 : Fixed the player list staying empty on dedicated servers where Steam network statistics are unavailable; players now appear with ping, traffic and send queue shown as 0.
  • ✅improve5 : On dedicated servers without Steam network statistics, each player's ping is now measured from the server by an RPC round trip to players who have LagWatch installed.
  • ✅improve6 : The notice sent to players is now split into several short lines instead of one long line (Korean for Korean game language, English otherwise).
  • ✅improve7 : On dedicated servers without Steam network statistics, each player's traffic is now measured from the bytes sent and received by the game's RPC layer.
  • ✅fix4 : Server memory no longer shows 0MB when the process working set is unavailable; it falls back to Unity's reserved memory.
  • ✅improve8 : High CPU alone (multi-core use) now raises the server status to Fair at most; Struggling needs slow frame times too.

한국어

  • ✅new1 : 접속자별 핑, FPS, 소유 오브젝트, 송신 대기, 트래픽, 모드 수를 녹색/주황/빨강 신호등으로 보여주는 관리자 전용 랙 패널 추가.
  • ✅new2 : 관리자가 접속자 행의 버튼을 눌러 랙 원인과 접속 종료 후 조치 요청을 해당 유저의 게임 언어(한국어/영어)로 전송.
  • ✅new3 : 관리자가 패널이나 컨피그에서 켜고 끄는 자동 경고 옵션 추가(기본 꺼짐, 유저별 쿨타임 적용).
  • ✅new4 : 클라이언트가 FPS와 설치 모드 목록을 서버로 보고(클라이언트 컨피그에서 끌 수 있음).
  • ✅new5 : 프레임 시간, 끊김, 메모리, 오브젝트 분포, 자주 나는 에러를 하루 단위 파일에 기록하는 서버 진단 옵션 추가(기본 꺼짐, 서버 부하 제한 내장).
  • ✅improve1 : 패널 버튼을 둥근 모서리·그라데이션·테두리·그림자와 호버/클릭 애니메이션으로 고급스럽게 개편하고, 용도별 색(파랑 전송, 녹색 켜짐, 적색 닫기, 대기 중 회색)으로 상태를 구분.
  • ✅improve2 : 전용 서버가 아니라 플레이어 PC에서 게임을 호스트하는 경우, 호스트 본인의 PC도 패널에 FPS·소유 오브젝트·모드와 함께 표시.
  • ✅new6 : 패널 상단에 서버 CPU, 메모리, 프레임 시간(평균/최대/끊김), 전체 트래픽, 접속자·오브젝트 수, 가동 시간, 내 핑을 보여주는 서버 상태 줄을 추가하고 좋음(녹색)/보통(노랑)/힘듦(빨강)으로 표시.
  • ✅new7 : 관리자 전용 서버 클리어 버튼 추가: 미리보기와 확인 후 바닥 아이템, 적대 몬스터, 임시 잔해를 나눠서 지우고 접속자 전원에게 지운 아이템·몬스터 수를 알림(플레이어 건축물·상자·무덤·길들인 동물은 건드리지 않으며, 서버 컨피그에서 끌 수 있음).
  • ✅new8 : 관리자 전용 메모리 정리 버튼 추가: LagWatch 에러 기록 비우기, 미사용 에셋 해제, GC 실행 후 정리 전후 메모리를 표시.
  • ✅improve3 : 소유 오브젝트 수에서 플레이어가 지은 건축물·상자·무덤을 제외해 큰 기지에 서 있는 유저가 잘못 표시되지 않게 하고, 월드 집계는 데이터가 필요할 때만 프레임마다 나눠서 수행.
  • ✅improve4 : LagWatch가 없는 서버에는 클라이언트가 몇 번 시도한 뒤 보고를 멈춰, 그 서버 로그에 경고가 쌓이는 것을 방지.
  • ✅fix1 : 서버를 바꿔 접속하거나 월드를 다시 열어도 이전의 관리자 판정, 패널 구독, 안내 쿨타임이 남지 않도록 수정.
  • ✅fix2 : 월드 오브젝트 집계에서 예외가 나도 접속자 목록이 빈 채로 멈추지 않도록 수정(집계 실패는 로그에 한 번만 기록하고 접속자 샘플링은 계속 진행).
  • ✅fix3 : Steam 네트워크 통계를 쓸 수 없는 전용 서버에서 접속자 목록이 비어 나오던 문제 수정(접속자는 표시되고 핑·트래픽·송신 대기는 0으로 표시).
  • ✅improve5 : Steam 네트워크 통계를 쓸 수 없는 전용 서버에서, LagWatch가 설치된 접속자의 핑을 서버가 RPC 왕복 시간으로 직접 측정해 표시.
  • ✅improve6 : 유저에게 보내는 안내 메시지를 한 줄로 길게 나오지 않고 여러 줄로 나눠 표시(게임 언어가 한국어면 한국어, 그 외에는 영어).
  • ✅improve7 : Steam 네트워크 통계를 쓸 수 없는 전용 서버에서, 게임 RPC 계층이 보내고 받은 바이트로 접속자별 트래픽을 측정해 표시.
  • ✅fix4 : 프로세스 작업 집합을 읽지 못할 때 서버 메모리가 0MB로 나오던 문제 수정(Unity가 확보한 메모리로 대체).
  • ✅improve8 : 멀티코어 사용으로 CPU만 높을 때는 서버 상태를 '보통'까지만 올리고, '힘듦'은 프레임 시간도 느릴 때만 표시.