luoxiaojun1992 / laravel-tars

Tars driver for laravel.
Apache License 2.0
28 stars 9 forks source link

程序时常报错:failed to open stream: Too many open files #21

Closed skylarzhs closed 3 years ago

skylarzhs commented 3 years ago

项目采用 laravel-tars 开发,laravel日志采用daily方式,每天生成一个日志文件,便于排错。 提供http服务的server在运行一段时间之后会报错failed to open stream: Too many open files,程序无法继续运行。 通过查看进程运行情况发现是日志文件打开数量过多导致的,日志写入后不会关闭么?

想问一下是不是我应用的方式不正确还是其他原因导致的问题,有没有什么建议的实践方式?谢谢。

显示的报错信息: `/tarsnode/data/CM.HttpServer/bin/src/bootstrap/app.php): failed to open stream: Too many open files|

0 /usr/local/app/tars/tarsnode/data/CM.HttpServer/bin/src/vendor/luoxiaojun1992/laravel-tars/src/App.php(48): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError()

1 /usr/local/app/tars/tarsnode/data/CM.HttpServer/bin/src/vendor/luoxiaojun1992/laravel-tars/src/App.php(48): include()

2 /usr/local/app/tars/tarsnode/data/CM.HttpServer/bin/src/vendor/luoxiaojun1992/laravel-tars/src/App.php(30): Lxj\Laravel\Tars\App::createApp()

3 /usr/local/app/tars/tarsnode/data/CM.HttpServer/bin/src/vendor/luoxiaojun1992/laravel-tars/src/Route/TarsRoute.php(165): Lxj\Laravel\Tars\App::getApp()

4 /usr/local/app/tars/tarsnode/data/CM.HttpServer/bin/src/vendor/luoxiaojun1992/laravel-tars/src/Route/TarsRoute.php(119): Lxj\Laravel\Tars\Route\TarsRoute->app()

5 /usr/local/app/tars/tarsnode/data/CM.HttpServer/bin/src/vendor/luoxiaojun1992/laravel-tars/src/Route/TarsRoute.php(28): Lxj\Laravel\Tars\Route\TarsRoute->clean()

6 /usr/local/app/tars/tarsnode/data/CM.HttpServer/bin/src/vendor/phptars/tars-server/src/protocol/HTTPProtocol.php(35): Lxj\Laravel\Tars\Route\TarsRoute->dispatch()

7 /usr/local/app/tars/tarsnode/data/CM.HttpServer/bin/src/vendor/phptars/tars-server/src/core/Server.php(683): Tars\protocol\HTTPProtocol->route()

8 {main}`

这个是进程信息: image

打开文件最多的进程为: image

部分日志信息截图: image

完整的日志信息: http_16485.log

luoxiaojun1992 commented 3 years ago

laravel日志是只有报错时写入,还是会一直写入?

  1. 建议可以加大系统的文件描述符限制,具体方法可以根据你们使用的系统百度搜索,或者找运维处理。
  2. 路由请求每次都会重建laravel app,会include bootstrap/app.php,建议可以打开opcache,并设置opcache.enable_cli=1opcache.validate_timestamps=0,避免重复加载解析php文件。

@skylarzhs