有没有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脚本终止。