webman使用的是最新版,一个星期之前安装部署的,系统是centos 7.5 宝塔环境 php start.php start -d 方式运行
最近这3天有一个奇怪,就是每天早晨都访问不了,然后连接服务器发现两个php进程都是100%,这个时候只要运行php start.php status就会得到一个结果,如下
Workerman version:4.1.14 PHP version:7.4.33
start time:2024-01-13 04:50:43 run 4 days 5 hours
load average: 2.1, 2.12, 1.95 event-loop:\Workerman\Events\Select
2 workers 3 processes
worker_name exit_status exit_count
webman 0 30
webman 65280 2
monitor 0 0
----------------------------------------------PROCESS STATUS---------------------------------------------------
pid memory listening worker_name connections send_fail timers total_request qps status
2090 4.26M none monitor 0 0 3 0 0 [idle]
10379 N/A http://127.0.0.1:8002 webman N/A N/A N/A N/A N/A [busy]
10380 N/A http://127.0.0.1:8002 webman N/A N/A N/A N/A N/A [busy]
----------------------------------------------PROCESS STATUS---------------------------------------------------
Summary 4M - - 0 0 3 0 0 [Summary]
接着第二次
a:3:{i:4465;a:2:{s:4:"name";s:6:"webman";s:6:"listen";s:21:"http://127.0.0.1:8002";}i:4466;a:2:{s:4:"name";s:6:"webman";s:6:"listen";s:21:"http://127.0.0.1:8002";}i:2090;a:2:{s:4:"name";s:7:"monitor";s:6:"listen";s:4:"none";}}
----------------------------------------------GLOBAL STATUS----------------------------------------------------
Workerman version:4.1.14 PHP version:7.4.33
start time:2024-01-13 04:50:43 run 4 days 5 hours
load average: 1.67, 2.03, 1.93 event-loop:\Workerman\Events\Select
2 workers 3 processes
worker_name exit_status exit_count
webman 0 30
webman 65280 4
monitor 0 0
----------------------------------------------PROCESS STATUS---------------------------------------------------
pid memory listening worker_name connections send_fail timers total_request qps status
2090 4.26M none monitor 0 0 3 0
4465 5.78M http://127.0.0.1:8002 webman 8 0 2 67
4466 5.79M http://127.0.0.1:8002 webman 8 0 2 66
然后紧接着php的cpu使用率立马下降到了1%的正常水平,因为是家庭内网用的.所以不存在大流量多连接.
然后也没有任何错误提示出现.也无法进行下一步分析了.然后这一天哪怕是使用压测工具,最高的时候也就能用到56%的cpu.
我查看stdout.log 有如下错误,但是不知道什么时候出现的
Fatal error: Uncaught ErrorException: file_put_contents(/www/wwwroot/llwd.hh/runtime/logs/workerman.log): failed to open stream: Too many open files in /www/wwwroot/llwd.hh/vendor/workerman/workerman/Worker.php:2232
Stack trace:
#0 [internal function]: support\App::{closure}()
#1 /www/wwwroot/llwd.hh/vendor/workerman/workerman/Worker.php(2232): file_put_contents()
#2 /www/wwwroot/llwd.hh/vendor/workerman/workerman/Worker.php(2200): Workerman\Worker::log()
#3 [internal function]: Workerman\Worker::checkErrors()
#4 {main}
thrown in /www/wwwroot/llwd.hh/vendor/workerman/workerman/Worker.php on line 2232
我应该如何做呢
报错 Too many open files 需要优化下linux内核。
https://www.workerman.net/doc/workerman/appendices/kernel-optimization.html
现在已经提高打开文件数为102400了,明天看看怎么样.比较奇怪的是 内网的网站,连接的设备只有几个.不知道为什么还能够出现Too many open files,同一个服务器上的thinkphp用nginx的又正常.
大佬,情况还是和昨天一样,lianggphp进程都是100%的.只要不运行php start.php status就不会降下来
总算是获取到了 . 如下内容
epoll_wait(4, [{EPOLLIN, {u32=5, u64=5}}], 256, 45698) = 1 请帮忙看下是怎么回事
估计还是 Too many open files ,优化内核后要重启webman。
还有检查业务是否有打开文件或者网络请求的,是不是句柄被保存起来了没释放。
如果还搞不定,发一个能重现你这个问题的demo的业务代码。你要保证能重现再发出来。