我有一个似乎挂起的进程。
当我尝试重新启动该进程时,出现超时。
service logstash_server stop
timeout: run: logstash_server: (pid 11797) 839061s, want down, got TERM
我尝试tail -f
在日志上运行 a ,不幸的是没有显示任何内容。我也尝试过kill -15
该过程,但它仍然挂起。 Top 并未将其显示为僵尸进程。
我想弄清楚“为什么”这个过程处于这种状态,因为这是过去一个月内第三次发生这种情况。
我检查了文件描述符和系统日志,但没有看到任何值得注意的东西。
文件描述符 =>http://pastebin.com/90rDHhT4
系统日志输出 => http://pastebin.com/xBaMaL9Z
lsof | grep logstash
=> 的输出http://pastebin.com/gsSdPyg5
我尝试在进程上运行 strace,它只显示 FUTEX_WAIT
strace -p 11797
Process 11797 attached
futex(0x7f6d95d8e9d0, FUTEX_WAIT, 11811, NULL
在发出 之前我还能做些什么吗kill -9
?
更新
与开发商开票。问题大约每周持续一次。
答案1
有一些工具可以诊断此类问题:
lsof
。列出打开的文件,您可以查看某个文件是否位于挂起的网络共享上。或者等待 TCP 连接。 ETC。strace
。查看它挂在什么系统调用中,或者它是否实际上在做某事。- 守护进程具有的任何调试日志选项。通常,您必须在它崩溃之前(通常在启动时)打开这些选项。
- 软件调试工具(如拉胡尔提到的线程转储、、、
gdb
或jdb
任何其他可能相关的工具)。您现在正在进行软件调试,但最终可能需要找出原因。
lsof
基本上是strace
要仔细检查您的系统/配置是否有问题。除此之外,您确实需要软件开发人员的帮助。
编辑:根据您的更新,您很可能需要报告错误或请求作者的帮助。除非你身边有开发人员,否则你可以看看。
答案2
无法杀死的进程(即使使用 SIGKILL,甚至被 root 杀死)很可能处于进程状态 D(“不可中断睡眠”)。如果这种情况没有明显原因持续存在,那么您的程序很可能在某些 I/O 驱动程序中触发了错误。除了重新启动之外,您几乎无能为力。
答案3
这可能会有所帮助 -http://man7.org/linux/man-pages/man2/futex.2.html
同意这可能是一个错误,可能应该交给开发人员