Nginx进程不产生core文件问题
最近工作中遇到Nginx进程异常重启却没有产生core文件问题,经过排除发现问题所在,下面是这个问题的两个原因。
开启生成core文件功能
linux系统下默认是不产生core文件的,需要在进程崩溃时产生core文件要确保开启了此功能,使用命令 ulimit -c 查看,如果显示 0 就是没有开启,使用命令 ulimit -c unlimited 开启即可。
写入权限
生成core文件是需要数据写入的,因此进程要对存放 core 文件的目录拥有写入权限。
一般情况下,master 进程的属主是 root,而 worker 进程的属主是 nobody,如下所示:
[root@nginx-test ~]# ps -ef | grep nginx root 74941 1 0 Sep10 ? 00:00:00 nginx: master process sbin/nginx nobody 74943 74941 0 Sep10 ? 00:10:35 nginx: worker process nobody 74944 74941 0 Sep10 ? 00:10:03 nginx: worker process nobody 74945 74941 0 Sep10 ? 00:11:28 nginx: worker process nobody 74946 74941 0 Sep10 ? 00:10:40 nginx: worker process nobody 74947 74941 0 Sep10 ? 00:12:36 nginx: worker process nobody 74948 74941 0 Sep10 ? 00:35:50 nginx: worker process nobody 74949 74941 0 Sep10 ? 00:17:29 nginx: worker process nobody 74950 74941 0 Sep10 ? 00:15:01 nginx: worker process
默认情况下,nginx进程的core文件位置就是nginx服务的部署目录,而这个目录的属主和属组都不会是nobody的,因此core是无法写入的。
我遇到的就是这第二种情况,修改方案如下:
1. 在配置文件 conf/nginx.conf 中增加两行配置:
worker_rlimit_core 500m; //core文件大小限制
working_directory core_files; //core文件目录
2. 在nginx部署目录下创建一个core文件存放目录(core_files),修改其属主和属组为nobody,确保有w权限即可,如下:
drwxr-xr-x. 2 nobody nobody 4.0K Sep 24 21:18 core_files