今天遇到个奇怪的问题,首先是supervisor启动进程,报错了
supervisor: couldn't exec php: ENFILE supervisor: child process was not spawned
懵逼了很久以为是supervisor的问题,突然启动了一个进程监听之后发现并不是。
随着测试环境的崩溃,查看Nginx日志报错了Too many open files in system
这个错误。
查看了下文件打开数,超过了最大限制65536,查看的命令为
cat /proc/sys/fs/file-nr
由于之前没有出现过类似的错误,所以判断操作是最近导致的。
在使用laravel的背景下,查看了系统有关php进程的问题,命令为
ps -ef | grep 'php'
查看到使用laravel中的schedule调度器的时候会启动这样一条命令
sh -c (touch /var/www/test/storage/framework/schedule-3536882cb536a6693b6ca7e08e4d40a9b425f00c; '/usr/bin/php' 'artisan' task:tese_task --itemGroupId=12; rm /var/www/test/storage/framework/schedule-3536882cb536a6693b6ca7e08e4d40a9b425f00c) > '/dev/null' 2>&1 &
然后发现并没有创建storage下的framework文件夹
此脚本为laravel中的schedule,启动脚本时由于framework文件夹不存在,然后会继续开子进程,占满系统文件句柄总数。
所以导致了上述问题
解决方案,创建此文件夹