问题: 如何core dump
答案: 配置方法如下
1. 配置nginx跑在非daemon和非master_process模式,配置样例
daemon off;
master_process off;
2. 配置worker_processes个数,可设置为1
worker_processes 1;
3. 启动nginx
ulimit -c unlimited;
/opt/soft/nginx/sbin/nginx -c /opt/soft/nginx/conf/nginx.conf;
4. 阅读coredump
gdb sbin/nginx -c core.$pid$
gdb>where
#貌似说最新的coredump办法,不影响在线业务
nginx配置方法
worker_rlimit_core 500M;
working_directory /path/to/cores/;
要保证nginx进程用户对working_directory可写
原来的配置都不用动,也跑在daemon模式下,有master进程
只需要增加这两行就成了
worker_rlimit_core限制生成core大小的,如果占内存多就搞大
确认需要以下方式:
#新建一个文件夹, 并确认nginx可以读写
$ mkdir /tmp/cores
$ sudo chown root:root /tmp/cores
$ sudo chmod 1777 /tmp/cores
#设置unlimited core file dump
$ ulimit -c unlimited
#设置系统级别的core file
$ echo "/tmp/cores/core.%e.%p" | sudo tee /proc/sys/kernel/core_pattern
#允许suid dumpable
$ sudo sysctl -w fs.suid_dumpable=2
$ sysctl -p
可以发送信号, 让nginx 直接生成coredump, 测试以上配置是否生效
比如kill -11 $work_process_pid