我正在尝试确定Linux上进程停滞的原因。这是一个电信应用程序,在相当重的负载下运行。8个T1跨度中的每一个都有一个单独的过程。偶尔,其中一个进程会变得非常不响应-在通常非常繁忙的进程的日志中记录事件之前,可能会有50秒。
可能是某些系统资源耗尽。显而易见的事情- CPU使用率-看起来还不错。
哪种linux实用程序可能最适合捕获和分析这类事情,并且尽可能不引人注目,因为这是一个高负载的系统?看起来,它需要的是过程而不是面向系统。也许是对/proc/pid/XX的持续监控?Top在这里似乎不太有用。
发布于 2008-10-21 21:34:53
如果您能够发现这种“无响应的时刻”,那么您可以使用strace在这段时间内附加到有问题的进程,并尝试找出它“休眠”的位置:
strace -f -o LOG -p <pid>更轻量级,但不太可靠的方法:
strace -e文件-f -o日志....
如果strace对你来说太重了,试着监控:
使用"vmstat 1>//
发布于 2008-10-21 20:25:38
您可以对有问题的程序执行策略,并查看它正在进行的系统调用。
发布于 2008-10-21 22:04:51
谢谢-- strace听起来很有用。在正确的时间捕捉这个过程将是乐趣的一部分。我想出了一个方案,定期将时间戳写入共享内存,然后使用另一个进程进行监控。发送SIGSTOP至少可以让我用gdb检查应用程序堆栈。我不知道在暂停的进程上的strace是否会告诉我很多信息,但我可能会打开strace,看看它会显示什么。或者打开strace并使用SIGCONT访问进程。
https://stackoverflow.com/questions/223352
复制相似问题