我的 Centos 6.5 服务器遇到了一些随机网络超时问题。这种情况每天发生 3 到 4 次(我无法确定具体是哪分钟或哪小时)。
一旦发生,它会影响该服务器中的几乎所有应用程序,但只会持续几秒钟。示例:
1)一个应用程序向另一个应用程序发送 HTTP 请求同一服务器(但在不同的 IP 上)超时。
2)连接到邮件服务器(托管在同一网络中,但在不同的服务器上)的应用程序也会超时。
我应该怎么做才能找到这些超时的本质?
我已经检查了 /var/log/messages 中的消息等基本内容,但没有找到任何可以指出该问题原因的内容。
而且,由于它是随机发生的,很难确保当它发生时我会处于 SSH 会话中。
答案1
我同意 Iain 的观点,需要进行一些监控才能进行调试。由于症状发生在同一台服务器上的两个 IP 地址之间,因此根本原因可能与网络有关,也可能与网络无关。网络上可能发生一些异常情况,导致 NIC 出现故障。根本原因也可能在服务器中。
要查看网络是否是影响因素,请考虑在服务器上运行数据包嗅探器。由于问题是间歇性的,请使用环形缓冲区选项进行持续监控。有两种方法可以做到这一点:
a. 在服务器控制台上保持登录状态的同时运行 Wireshark。在 Capture 中找到环形缓冲区选项 ==> 选项
b. 通过 SSH 连接到服务器并使用命令行工具(例如“screen”或“tmux”)创建注销后仍持续存在的会话。然后在持续会话中,使用带有 -b 环形缓冲区标志的 Tshark。
此时,我建议不要指定捕获过滤器。相反,捕获所有数据包,因为根本原因可能是任何事情。嗅探器将创建一组包含捕获数据包的文件。诀窍是在这些捕获文件中找到感兴趣的数据包。为了协助搜索,请确保服务器时钟准确,然后尽可能精确地记录观察到症状的时间。
要分析捕获文件,Wireshark 的图形界面可能是最简单的。使用带有 -r 标志的 Tshark 并将结果通过管道传输到 grep 也可以。使用时间戳来隔离感兴趣时间附近的数据包。