故障排查
监控问题
状态卡片不见了或数值为空时:到数据源头查一遍,并把输出发给我们。
SwiftServer 的每一项指标,都由它在你的服务器上运行的命令算出来。卡片不见了或数值看着不对时, 自己跑一遍同样的命令,马上就能知道数据在源头是否存在;而这条命令的输出, 正是一份有用的问题报告需要的内容。
先排除预期内的缺失
有些东西不显示是设计如此,不是故障:
- GPU 使用率只在存在
nvidia-smi时出现;Docker 只在找到 Docker 时出现; CPU 负载在 Windows 上隐藏(Windows 没有平均负载)。 - CPU 温度在 macOS 和 Windows 上不可用,没有温度传感器的 Linux 机器上也没有。
- 磁盘 I/O 速率只有 Linux 和 Windows 有。服务器没有交换空间时,交换空间显示
N/A。 - 卡片也可能是被手动隐藏的,到设置 → 仪表板 → 状态详情布局里确认一下。
- 免费版只显示 3 台服务器的实时状态,见 Premium。
各平台分别覆盖到什么程度,见平台说明。
到数据源头查一遍
在出问题的机器上打开一个终端会话,运行出问题那张卡片对应的命令。 如果命令报错或什么都不输出,要修的是服务器这一侧(装上工具、检查权限)。 如果命令输出了正常的数据而 SwiftServer 什么都不显示,把那段输出发给我们。
Linux
| 卡片 | 运行这条命令 |
|---|---|
| CPU 利用率 | cat /proc/stat |
| CPU 负载 | cat /proc/loadavg |
| 内存利用 / 交换空间 | cat /proc/meminfo |
| 进程 | ps -eo pid,%cpu,rss,user,comm --sort=-%cpu | head -15 |
| 网络使用情况 | cat /proc/net/dev 和 ip addr |
| 存储 | df 和 cat /proc/diskstats |
| 温度 | cat /sys/class/hwmon/hwmon*/temp1_input |
| GPU 使用率 | nvidia-smi |
| 系统信息 | cat /etc/os-release |
精简的容器镜像里常常没有 ps 或 ip,装上 procps 和 iproute2,
进程和网络使用情况两张卡片就有数据了。
macOS
| 卡片 | 运行这条命令 |
|---|---|
| CPU 利用率 | top -l 1 -n 0 | grep "CPU usage" |
| CPU 负载 | sysctl -n vm.loadavg |
| 内存利用 | vm_stat 和 sysctl -n vm.swapusage |
| 进程 | ps -Aco pid,%cpu,rss,user,comm | head -15 |
| 网络使用情况 | netstat -ibn |
| 存储 | df -k -P |
| 系统信息 | sw_vers |
Windows (PowerShell)
| 卡片 | 运行这条命令 |
|---|---|
| 系统信息 | Get-CimInstance Win32_OperatingSystem | Select Caption,Version,BuildNumber |
| CPU 利用率 | Get-CimInstance Win32_Processor | Select Name,NumberOfLogicalProcessors |
| 内存利用 | Get-CimInstance Win32_OperatingSystem | Select TotalVisibleMemorySize,FreePhysicalMemory |
| 存储 | Get-CimInstance Win32_LogicalDisk -Filter 'DriveType=3' |
| 网络使用情况 | Get-NetAdapterStatistics |
| GPU 使用率 | nvidia-smi |
如果 PowerShell 本身在 SSH 上就报错,那就是线索所在,请把错误一并发来。
vnStat 历史
如果网络使用情况卡片的历史区域提示 vnStat 未安装,到
humdi.net/vnstat 安装它;跑在 Docker 容器里的 vnStat,
SwiftServer 同样能检测到。刚装好的 vnStat 需要时间收集数据,之后图表才会出现。
验证方式:vnstat --json f 12(或 docker exec -it vnstat vnstat --json f 12)。
该发什么
卡片名称、这台机器的操作系统、上面那条命令的输出,以及卡片的截图。 如果整台机器显示的是错误,请改发它的对话框里的事件日志和 SSH 诊断, 那属于连接问题。