Laravel 5.2 高 cpu 和长路线
Posted
技术标签:
【中文标题】Laravel 5.2 高 cpu 和长路线【英文标题】:Laravel 5.2 High cpu with long routes 【发布时间】:2016-11-25 17:04:28 【问题描述】:我已经用 php 5.5 和 apache 2.4 设置了一个 ubuntu 14.04。
我安装了新的 laravel 5.2。项目中没有数据库连接。
然后我什么时候去app/Http/routes.php并编辑成:
Route::get('/', function ()
return view('welcome');
);
Route::get('/test/direct', function ()
return view('welcome');
);
所以基本上我有 2 条路线只显示欢迎视图。
然后我运行:
ab -n 9999999 -t 300 -c 30 http://xxxxx/laravel52/public
Cpu 从未超过 6%,我得到以下结果:
Server Software: Apache/2.4.7
Server Hostname: xxxxx
Server Port: 80
Document Path: /laravel52/public
Document Length: 328 bytes
Concurrency Level: 30
Time taken for tests: 146.271 seconds
Complete requests: 50000
Failed requests: 0
Non-2xx responses: 50000
Total transferred: 28550000 bytes
html transferred: 16400000 bytes
Requests per second: 341.83 [#/sec] (mean)
Time per request: 87.763 [ms] (mean)
Time per request: 2.925 [ms] (mean, across all concurrent requests)
Transfer rate: 190.61 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 15 47 77.0 40 3157
Processing: 17 41 28.1 37 2140
Waiting: 17 40 26.9 37 2140
Total: 40 87 84.3 78 3208
Percentage of the requests served within a certain time (ms)
50% 78
66% 83
75% 86
80% 89
90% 100
95% 120
98% 162
99% 228
100% 3208 (longest request)
然后我运行:
ab -n 9999999 -t 300 -c 30 http://xxxxx/laravel52/public/test/direct
Cpu 立即上升到 100%,最后我得到以下结果:
Server Software: Apache/2.4.7
Server Hostname: xxxxx
Server Port: 80
Document Path: /laravel52/public/test/direct
Document Length: 1023 bytes
Concurrency Level: 30
Time taken for tests: 300.001 seconds
Complete requests: 11888
Failed requests: 0
Total transferred: 24585740 bytes
HTML transferred: 12161424 bytes
Requests per second: 39.63 [#/sec] (mean)
Time per request: 757.070 [ms] (mean)
Time per request: 25.236 [ms] (mean, across all concurrent requests)
Transfer rate: 80.03 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 4 12 29.4 8 1020
Processing: 75 740 790.0 609 14045
Waiting: 74 738 789.9 608 14043
Total: 88 752 789.4 622 14050
Percentage of the requests served within a certain time (ms)
50% 622
66% 835
75% 952
80% 1020
90% 1237
95% 1536
98% 2178
99% 2901
100% 14050 (longest request)
如果不是根路由,如果有很多连接,似乎 laravel 会使 cpu 尖峰。这也发生在 laravel 4.2 的全新安装中。
谁能指出为什么会发生这种情况?我真的需要解决这个问题。
我的服务器有一个 8 核 Intel(R) Core(TM) i7-4771 CPU @ 3.50GHz 和 8GB RAM。
谢谢。
【问题讨论】:
【参考方案1】:您可以缓存路由以加快路由解析,但route caching 不适用于基于闭包的路由。要使用路由缓存,您必须将任何 Closure 路由转换为使用控制器类。
要缓存您的路由,请执行 php artisan route:cache
并清除缓存 php artisan route:clear
。
您还应该考虑php artisan optimize
将公共类编译到单个文件中,从而减少每个请求中包含的数量,以及php artisan config:cache
将所有配置文件合并到单个文件中以加快加载速度。
【讨论】:
嗨@Malta,它没有解决问题。它仍然存在。使用 1 个返回欢迎视图的方法创建了一个控制器。将我必须的 2 条路线映射到“TestController@showWelcome”。跑php artisan route::cache
和php artisan optimize
。得到或多或少相同的结果。【参考方案2】:
忘记这个。这不是 Laravel 的问题。这是本机特有的问题。不久前,我将 ubuntu 12.04 升级到 14.04。在这样做的过程中,它将 apache 2.2 升级到 2.4,但保留了部分配置。问题应该存在,因为 Magento 等其他框架的行为方式相同。
【讨论】:
以上是关于Laravel 5.2 高 cpu 和长路线的主要内容,如果未能解决你的问题,请参考以下文章