我有一台 Linux 服务器,它的 NIC 总是过载,我需要根据连接数和 CPU 利用率来直观地了解这种情况发生的方式和原因。我该怎么做?
例如,为了直观地了解磁盘 iowait,我使用诸如atop
和iotop
之类的工具来告诉我进程的 PID及其 CPU 使用率;通过这些信息我可以找到哪个 PID 导致服务器过载。
问题是我在网络方面遇到了同样的问题,并且无法隔离和排除故障,因为我无法找到哪些进程链接到哪些连接(我可以使用netstat
我知道但netstat
没有告诉我 CPU 使用率)。
现在我已经说清楚了,我需要能够监控 conntrack 和 netfilter 的 CPU 使用率和/或内核时间。我该怎么做?诸如ps
、top
和等传统工具htop
无法做到这一点。有人建议我检查中断,但对我来说这似乎不太“正确”。
答案1
我发现最好的方法是观察内核时间。如果内核时间很长,我会检查/proc/interrupts
。为了进一步调试,我会使用perf
。pktstat
也可以用来可视化流量。
collectl -stnc
也不错。
答案2
您可以使用 wireshark / ethereal / tcpdump 转储所有流量,隐式转储使 PC 过载的流量。这不会为您提供 CPU 信息,但会告诉您涉及的确切端口和数据,这将直接引导您找到所涉及的进程。
与所有与问题系统的交互一样,此测量可能会影响行为,但与不太准确的测量相比,它更有可能产生更快的答案(在我看来)。如果此测量确实导致系统正常运行,而不是像您希望的那样失败,您可以使用水龙头并使用外部设备进行测量。
您还可以使用“iftop”来显示带宽占用情况,但请记住带宽 != CPU。