前段时间遇到Linux应用程序网络丢包问题,应用程序接收网络报文数据丢失界面展示信息不全.以下是对该问题进行基本的简要分析与定位的过程。
在网络转发路径未发现网络传输丢包情况.通过Linux netstat查看gmond应用程序socket状态发现一个奇怪的现象,gmond Recv-Q网络报文数量持续不断增长,且多次查看状态均未出现清零的情况,初步怀疑内核socket接收存在丢包即CPU处理性能瓶颈导致应用程序无法及时接收网络报文。
netstat -lnup输出:
htop查看系统应用进程CPU占用率并未发现CPU满负荷运行情况直接排除CPU处理性能瓶颈导致应用程序无法及时接收网络报文。问题转向了gmond应用程序,如何跟踪应用程序系统调用.那就是strace!
strace命令是一个集诊断、调试、统计与一体的工具,我们可以使用strace对应用的系统调用和信号传递的跟踪结果来对应用进行分析,以达到解决问题或者是了解应用程序工作过程的目的。strace使用方法请参考网上资源.
strace -p 2747 输出,发现gmond应用程序间歇性的执行系统调用如下:
gmond应用程序在进行DNS请求解析,在Linux下常用gethostbyname函数用于域名解析,其内