为什么这个过程不会在 SIGTERM 之后消亡

spu*_*der 6 kill

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

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

service logstash_server stop
timeout: run: logstash_server: (pid 11797) 839061s, want down, got TERM
Run Code Online (Sandbox Code Playgroud)

我试过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
Run Code Online (Sandbox Code Playgroud)

在我发出之前还有什么我可以做的kill -9吗?

更新

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

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

der*_*ert 5

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

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

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

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