为什么这个进程在 SIGTERM 之后不会死掉

为什么这个进程在 SIGTERM 之后不会死掉

我有一个似乎挂起的进程。

当我尝试重新启动该进程时,出现超时。

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

更新

与开发商开票。问题大约每周持续一次。

https://github.com/elastic/logstash/issues/2992

答案1

有一些工具可以诊断此类问题:

  1. lsof。列出打开的文件,您可以查看某个文件是否位于挂起的网络共享上。或者等待 TCP 连接。 ETC。
  2. strace。查看它挂在什么系统调用中,或者它是否实际上在做某事。
  3. 守护进程具有的任何调试日志选项。通常,您必须在它崩溃之前(通常在启动时)打开这些选项。
  4. 软件调试工具(如拉胡尔提到的线程转储、、、gdbjdb任何其他可能相关的工具)。您现在正在进行软件调试,但最终可能需要找出原因。

lsof基本上是strace要仔细检查您的系统/配置是否有问题。除此之外,您确实需要软件开发人员的帮助。

编辑:根据您的更新,您很可能需要报告错误或请求作者的帮助。除非你身边有开发人员,否则你可以看看。

答案2

无法杀死的进程(即使使用 SIGKILL,甚至被 root 杀死)很可能处于进程状态 D(“不可中断睡眠”)。如果这种情况没有明显原因持续存在,那么您的程序很可能在某些 I/O 驱动程序中触发了错误。除了重新启动之外,您几乎无能为力。

答案3

这可能会有所帮助 -http://man7.org/linux/man-pages/man2/futex.2.html

同意这可能是一个错误,可能应该交给开发人员

相关内容