首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调试Linux进程挂起问题的实用工具?

调试Linux进程挂起问题的实用工具?
EN

Stack Overflow用户
提问于 2010-06-14 13:36:00
回答 3查看 18.5K关注 0票数 5

但是,当我执行一个大型操作时,几个小时后,守护进程将在2到3个小时内没有响应。

调试Linux进程挂起问题的实用工具?

如何获取linux进程挂起的时间点?

EN

回答 3

Stack Overflow用户

发布于 2010-06-14 13:53:32

  • strace可以显示最近的系统调用及其结果
  • lsof可以显示打开的文件
  • 系统日志可以非常有效地写入日志消息来跟踪进度。允许将问题放在较小的区域中。还可以将日志消息与其他系统的其他消息相关联,如果应用程序使用套接字使网络抖动可见,这通常会显示有趣的results
  • wireshark。
  • ps ax + top可以显示您的应用程序是否处于繁忙循环中,即一直在运行,在IO中睡眠或阻塞,消耗CPU,使用内存。

这些信息中的每一个都可能给出一点信息,这些信息共同构成了问题的图景。

在使用gdb时,在应用程序被阻塞时触发核心转储可能很有用。然后您就有了一个静态快照,您可以在空闲时使用事后调试对其进行分析。你可以通过一个脚本来触发它们。你可以快速建立一组快照,用来检验你的理论。

票数 9
EN

Stack Overflow用户

发布于 2010-06-14 13:39:03

一种选择是使用gdbattach命令,以便附加到正在运行的进程。您需要加载一个包含有问题的可执行文件符号的文件(使用file命令)

票数 1
EN

Stack Overflow用户

发布于 2013-11-09 17:09:05

有许多不同的方法可以做到:

监听UNIX域套接字的

  1. ,用于处理状态请求。然后,外部应用程序可以查询该应用程序是否仍然正常。如果它在某个超时期限内没有得到响应,那么可以假设被查询的应用程序已经死锁,或者正在使用预先选择的路径dead.
  2. Periodically访问文件。外部应用程序可以查看文件的时间戳,如果它是陈旧的,那么它可以假设应用程序是死的,或者deadlocked.
  3. You可以重复使用alarm系统调用,让信号终止进程(相应地使用sigaction )。只要你继续调用alarm (即只要你的程序在运行),它就会一直运行。一旦你不这样做,信号就会发出。

您可以在forkwaitpid终止时无缝地重新启动您的进程,如in this answer所述。它不会消耗任何重要的资源,因为操作系统将共享内存页。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3035134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档