网上很多说nginx生成coredump的办法在RHEL7 RHEL8都无法正确的生成core 文件, 这里给一下正确的步骤
#新建一个文件夹, 并确认nginx可以读写 $ mkdir /opt/itc/fssnginx/logs/cores/ $ sudo chown root:root /opt/itc/fssnginx/logs/cores/ $ sudo chmod 1777 /opt/itc/fssnginx/logs/cores/ #设置unlimited core file dump $ ulimit -c unlimited #也可以在系统中彻底修改 $vim /etc/security/limits.conf * soft core unlimited #设置系统级别的core file $ echo "/opt/itc/fssnginx/logs/cores/core.%e.%p" | sudo tee /proc/sys/kernel/core_pattern #允许suid dumpable $ sudo sysctl -w fs.suid_dumpable=2 $ sysctl -p #重启nginx systemctl restart nginx
#编译nginx.conf,然后重启nginx 服务 working_directory /opt/itc/fssnginx/logs/cores/; worker_rlimit_core 500M;
测试,找到nginx workprocess的进程号,发送 SIGSEGV 给该work process进程
$ps aux|grep nginx $kill -11 `$work_process_pid` #检查core 文件 $ll /opt/itc/fssnginx/logs/cores/ -rw-------. 1 nobody nobody 65753088 Jun 22 17:54 core.nginx.5662 -rw-------. 1 nobody nobody 70475776 Jun 22 18:03 core.nginx.5702
释疑: 看起来跟内核变量有关
#旧版本RHEL6是这个设置:
kernel.core_pattern = core
#新版本OS 是这个: 会被通过管道发给这个可执行命令
kernel.core_pattern = |/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h %e
参考文档:
https://docs.nginx.com/nginx/admin-guide/monitoring/debugging/