今天谈一下,最近和同事一块看到的一个例子,说sipp运行时的某一时刻之后,总是会有408/487/retrans,通过netstat看,还总是会出现接收队列满载的情况。如下netstat的输出,137472是接收队列的缓存的数据量:
udp 131072 0 100.103.238.11:5060 0.0.0.0:* 20175/sipp.latest
说明这个sipp的进程在做什么其他的事情或者CPU忙不过来,导致网络包得不到处理。具体的问题解决的思路:一开始想到的可能是系统的CPU使用率是不是太高,导致的问题。后来发现系统的CPU使用率并不高。
如果不是CPU的问题,下一步需要使用strace查看sipp进程的工作情况,看看是不是有什么系统调用卡的时间比较长。再次复现问题,dump出来的数据如下:
strace -cp 19792
strace: Process 19792 attached
strace: [ Process PID=19792 runs in 32 bit mode. ]
^Cstrace: Process 19792 detached
System call usage summary for 32 bit mode:
% time seconds usecs/call calls errors syscall
30.16 0.216574 6 34118 gettimeofday
15.13 0.108635 36 2955 write
14.44 0.103705 11 9066 4 epoll_wait
13.83 0.099310 10 9157 sendto
7.05 0.050591 12 4017 munmap
6.17 0.044318 14 2971 stat64
5.13 0.036815