有没有Linux内核被动记录sigkill(kill-9)关闭请求的地方?
我有一个jvm正在运行,它被任意关闭,我怀疑,根据现有的证据,它正被一个杂散的进程关闭,这个进程以某种方式发出了jvm进程关闭的命令。我有强大的日志记录,但为了证实我的怀疑,我必须把日志级别提高到压倒性的级别。
我已经通过/var/log进行了详尽的研究,似乎找不到任何地方可以捕获和记录这些sigkill事件。如果有可能,我会在哪里找到这些事件?

最佳答案

选项1:
如果您的内核有ftrace支持(很可能),请尝试brendan gregg的perf-tools工具:

wget https://raw.githubusercontent.com/brendangregg/perf-tools/master/killsnoop
chmod +x killsnoop
sudo ./killsnoop -s

killsnoop_example.txt文件中的更多用法示例。
选项2:(被动捕获)
如果您的内核没有ftrace支持,您可以使用https://github.com/nfedera/kernel-siglog中的killsnoop内核模块:
git clone https://github.com/nfedera/kernel-siglog.git

cd kernel-siglog/
make

sudo insmod siglog.ko

一旦插入kernel-siglog内核模块,将在siglog中记录最后10000个信号。
我也遇到过类似的问题,发现了使用这个内核模块的罪魁祸首。我让它在客户的服务器上插入了几个星期,当服务被终止时,我登录并执行/proc/siglog操作,发现我的服务被客户自己的buggy watchdog脚本终止。

08-03 17:43