间歇性出现报错 Failed to open directory

kid1296

问题描述

间歇性出现报错,重启就能解决,已调整linux 内核

报错信息

ErrorException: scandir(/www/wwwroot/110.42.57.86_3111/app): Failed to open directory: Too many open files in /www/wwwroot/110.42.57.86_3111/vendor/workerman/webman-framework/src/Util.php:38
Stack trace:
#0 [internal function]: {closure}()
#1 /www/wwwroot/110.42.57.86_3111/vendor/workerman/webman-framework/src/Util.php(38): scandir()
#2 /www/wwwroot/110.42.57.86_3111/vendor/workerman/webman-framework/src/App.php(871): Webman\Util::scanDir()
#3 /www/wwwroot/110.42.57.86_3111/vendor/workerman/webman-framework/src/App.php(840): Webman\App::getController()
#4 /www/wwwroot/110.42.57.86_3111/vendor/workerman/webman-framework/src/App.php(820): Webman\App::getControllerAction()
#5 /www/wwwroot/110.42.57.86_3111/vendor/workerman/webman-framework/src/App.php(777): Webman\App::guessControllerAction()
#6 /www/wwwroot/110.42.57.86_3111/vendor/workerman/webman-framework/src/App.php(163): Webman\App::parseControllerAction()
#7 /www/wwwroot/110.42.57.86_3111/vendor/workerman/workerman/src/Connection/TcpConnection.php(741): Webman\App->onMessage()
#8 [internal function]: Workerman\Connection\TcpConnection->baseRead()
#9 /www/wwwroot/110.42.57.86_3111/vendor/workerman/workerman/src/Events/Event.php(250): EventBase->loop()
#10 /www/wwwroot/110.42.57.86_3111/vendor/workerman/workerman/src/Worker.php(1740): Workerman\Events\Event->run()
#11 /www/wwwroot/110.42.57.86_3111/vendor/workerman/workerman/src/Worker.php(1545): Workerman\Worker::forkOneWorkerForLinux()
#12 /www/wwwroot/110.42.57.86_3111/vendor/workerman/workerman/src/Worker.php(1525): Workerman\Worker::forkWorkersForLinux()
#13 /www/wwwroot/110.42.57.86_3111/vendor/workerman/workerman/src/Worker.php(593): Workerman\Worker::forkWorkers()
#14 /www/wwwroot/110.42.57.86_3111/vendor/workerman/webman-framework/src/support/App.php(147): Workerman\Worker::runAll()
#15 /www/wwwroot/110.42.57.86_3111/start.php(5): support\App::run()
#16 {main}  
[2025-12-22 06:19:09] default.ERROR: 140.240.36.153 GET 110.42.57.86:3111/admin/auth/vercode
ErrorException: scandir(/www/wwwroot/110.42.57.86_3111/app): Failed to open directory: Too many open files in /www/wwwroot/110.42.57.86_3111/vendor/workerman/webman-framework/src/Util.php:38
Stack trace:
#0 [internal function]: {closure}()
#1 /www/wwwroot/110.42.57.86_3111/vendor/workerman/webman-framework/src/Util.php(38): scandir()
#2 /www/wwwroot/110.42.57.86_3111/vendor/workerman/webman-framework/src/App.php(871): Webman\Util::scanDir()
#3 /www/wwwroot/110.42.57.86_3111/vendor/workerman/webman-framework/src/App.php(840): Webman\App::getController()
#4 /www/wwwroot/110.42.57.86_3111/vendor/workerman/webman-framework/src/App.php(820): Webman\App::getControllerAction()
#5 /www/wwwroot/110.42.57.86_3111/vendor/workerman/webman-framework/src/App.php(777): Webman\App::guessControllerAction()
#6 /www/wwwroot/110.42.57.86_3111/vendor/workerman/webman-framework/src/App.php(163): Webman\App::parseControllerAction()
#7 /www/wwwroot/110.42.57.86_3111/vendor/workerman/workerman/src/Connection/TcpConnection.php(670): Webman\App->onMessage()
#8 [internal function]: Workerman\Connection\TcpConnection->baseRead()
#9 /www/wwwroot/110.42.57.86_3111/vendor/workerman/workerman/src/Events/Event.php(250): EventBase->loop()
#10 /www/wwwroot/110.42.57.86_3111/vendor/workerman/workerman/src/Worker.php(1740): Workerman\Events\Event->run()
#11 /www/wwwroot/110.42.57.86_3111/vendor/workerman/workerman/src/Worker.php(1545): Workerman\Worker::forkOneWorkerForLinux()
#12 /www/wwwroot/110.42.57.86_3111/vendor/workerman/workerman/src/Worker.php(1525): Workerman\Worker::forkWorkersForLinux()
#13 /www/wwwroot/110.42.57.86_3111/vendor/workerman/workerman/src/Worker.php(593): Workerman\Worker::forkWorkers()
#14 /www/wwwroot/110.42.57.86_3111/vendor/workerman/webman-framework/src/support/App.php(147): Workerman\Worker::runAll()
#15 /www/wwwroot/110.42.57.86_3111/start.php(5): support\App::run()
#16 {main}  

操作系统及workerman/webman等框架组件具体版本

Debian 12
"workerman/webman-framework": "^2.1",

114 1 0
1个回答

six

linux内核没优化好,或者优化没生效。
执行 ulimit -n 看下

  • kid1296 1天前

    root@RainYun-oR1Fi1A7:~# ulimit -n
    1000001

  • six 1天前

    php start.php status
    随便找一个webman进程的pid,然后执行
    cat cat /proc/pid/limits
    内核优化看下对进程生效没

  • kid1296 1天前

    cat /proc/1267967/limits
    Limit Soft Limit Hard Limit Units
    Max cpu time unlimited unlimited seconds
    Max file size unlimited unlimited bytes
    Max data size unlimited unlimited bytes
    Max stack size 8388608 unlimited bytes
    Max core file size 0 unlimited bytes
    Max resident set unlimited unlimited bytes
    Max processes 63785 63785 processes
    Max open files 1024 524288 files
    Max locked memory 8388608 8388608 bytes
    Max address space unlimited unlimited bytes
    Max file locks unlimited unlimited locks
    Max pending signals 63785 63785 signals
    Max msgqueue size 819200 819200 bytes
    Max nice priority 0 0
    Max realtime priority 0 0
    Max realtime timeout unlimited unlimited us

  • six 1天前

    Max open files 1024 524288 files
    内核优化对于进程没生效,最大打开文件数1024
    你重启webman是 php start.php reload 重启的?

  • kid1296 1天前

    restart -d重启的

  • kid1296 1天前

    感谢哈,稍后试一下

🔝