我的应用程序在LAMP服务器上运行时遇到了一些不好的时间。 我将解释该方案,下面我将告诉我的配置和一些AB结果。
我正在运行使用Laravel 4.2开发的应用程序。 这是一个quizz游戏,并且在某个时间我们有一组群体,每组有4个用户。 当他们到达这个阶段时,有很多ajax请求(检查正确的时间,因为JS定时器不精确我每3秒向数据库请求并将当前时间保存在数据库中),每2秒我检查一次答案在每个组的聊天室(一切都存储在MySQL数据库中)
我的服务器处理得很好,直到200,300个用户同时处理,但当它达到400时,500个用户服务器开始变得很慢,直到一切都变成噩梦,没人能再玩了。
ajax请求是简单的php文件,带有select和insert查询,没有嵌套循环,连接和其他可能会降低应用程序速度的东西。
以下是一些信息: 服务器配置: RAMNode上的-SSD VPS。 -8GB RAM - 40GB SSD - 4个vCores
服务信息: Ubuntu服务器14.4 Apache 2.4.7 PHP 5.5.9 MySQL 5.5.47 Laravel 4.2
我没有在此服务器上运行任何其他服务。 高峰时的内存使用率(600个用户同时玩组游戏):1.5GB 处理器使用率:22%。
AB结果:
root@server01:~# ab -r -n 27000 -c 900 -k -H "Accept-Encoding: gzip, deflate" http://repensegame.com.br/shout_benchmark.php
This is ApacheBench, Version 2.3 <$Revision: 1528965 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking repensegame.com.br (be patient)
Completed 2700 requests
Completed 5400 requests
Completed 8100 requests
Completed 10800 requests
Completed 13500 requests
Completed 16200 requests
Completed 18900 requests
Completed 21600 requests
Completed 24300 requests
Completed 27000 requests
Finished 27000 requests
Server Software: Apache/2.4.7
Server Hostname: repensegame.com.br
Server Port: 80
Document Path: /shout_benchmark.php
Document Length: 687 bytes
Concurrency Level: 900
Time taken for tests: 157.934 seconds
Complete requests: 27000
Failed requests: 10265
(Connect: 0, Receive: 296, Length: 9673, Exceptions: 296)
Keep-Alive requests: 0
Total transferred: 24637886 bytes
HTML transferred: 18335742 bytes
Requests per second: 170.96 [#/sec] (mean)
Time per request: 5264.454 [ms] (mean)
Time per request: 5.849 [ms] (mean, across all concurrent requests)
Transfer rate: 152.35 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 113 942.5 0 15004
Processing: 63 2302 11425.2 581 121540
Waiting: 0 1300 6014.9 579 102647
Total: 91 2415 11791.8 583 122541
Percentage of the requests served within a certain time (ms)
50% 583
66% 600
75% 611
80% 621
90% 684
95% 1554
98% 60434
99% 64164
100% 122541 (longest request)
root@server01:~# free -m
total used free shared buffers cached
Mem: 8192 1518 6673 72 0 1318
-/+ buffers/cache: 200 7991
Swap: 256 0 256
root@server01:~#
的httpd.conf:
<IfModule mpm_worker_module>
StartServers 10
MinSpareServers 8
MaxSpareServers 128
MaxClients 2048
ServerLimit 8000
</IfModule>
<Directory />
Options FollowSymLinks
AllowOverride All
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
AccessFileName .htaccess
<FilesMatch "^\.ht">
Require all denied
</FilesMatch>
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User- Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf
ExtendedStatus On
Vhost conf。:
<VirtualHost *>
DocumentRoot /var/www/html/public
ServerName repensegame.com.br
<Directory /var/www/html/public>
allow from all
Options None
Require all granted
</Directory>
<Location /server-status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from localhost
</Location>
ServerAlias *.repensegame.com.br
</VirtualHost>
我没有检测到任何慢查询。
那就是它。 抱歉,墙上的文字。
提前谢谢大家。
答案 0 :(得分:0)
MaxClients
= 2048致命。我倾向于建议20.你注意到300可能没问题。但那仅仅是基准?不是现实生活吗?
如果max_connections
小于那个,那就特别糟糕了。
在某些时候(随应用程序而变化),最好将请求排队,而不是将请求启动,只是让它争用资源,从而延迟响应时间没有提高吞吐量。
什么是SHOW STATUS LIKE 'Max_used_connections';
?什么是innodb_buffer_pool_size
? (听起来它比它应该的低。)