服务器上的TCP监视:比较netstat和lsof?

我正在监视服务器上的TCP堆栈,希望一般地推断出盒子上的应用程序的问题。

我的第一个倾向是测量所有报告状态(LISTEN,ESTABLISHED,FIN_WAIT2,TIME_WAIT等)中的套接字数量并检测一些exception。

一个队友build议'lsof'将是一个更好的工具来查看TCP栈的状态。

来自serverfault人群的任何偏好或经验提示?

我更喜欢lsof,因为它的输出在所有运行的平台上都是一致的。 虽然你可以从两个程序获得相同的信息。 我认为这归结于个人偏好。

我的第一个意思是使用netstat -ptan ,它会给你所有你正​​在寻找的信息。 可能pipe道sorting和uniq。 以下应该给你一个很好的sockets状态号码。

netstat -ptan | awk '{print $6 " " $7 }' | sort | uniq -c

查看dstat并运行:

 % sudo dstat --tcp 

更好的是,如果你想分析输出,你可以用–output把它写入CSV。

我认为这更像是一种个人偏好,就像一个小小的调整(以及正确的命令选项),你可以从中得到几乎相同的信息。

但是,如果你想要监视不同状态下的连接数量,我不会用单次命令行工具来完成这个工作。 我会利用一些可以做一些趋势的东西,所以你可以随时查看。 像munin这样的东西将是非常有用的,因为它会随着时间的推移(随着显示其他可能有用的系统统计)。

如果您有关于盒子本身的良好信息以及它的performance如何(无论是在问题还是在问题不存在的情况下),故障排除应用程序总是更容易。