对于新闻报道中的一篇文章,我正在对5个不同的Web服务器(Apache2,Cherokee,Lighttpd,Monkey和Nginx)进行基准testing。
所做的testing包括测量执行时间以及不同的参数,例如每秒服务的请求数量,RAM使用的数量,CPU使用的数量,同时客户端的负载不断增加(从1到1.000,步长为10 )每个客户发送一个小的固定文件,然后是一个中等的固定文件,然后是一个小的dynamic内容(hello.php),最后是一个复杂的dynamic内容(偿还贷款的计算)1.000.000请求。
所有的Web服务器都能够承受这样的负载(高达1.000个客户端),但当testing达到450到500个同时客户端时,Apache2总是停止响应。
我的configuration是:
我的Apache2configuration如下:
/etc/apache2/apache2.conf中
LockFile ${APACHE_LOCK_DIR}/accept.lock PidFile ${APACHE_PID_FILE} Timeout 30 KeepAlive On MaxKeepAliveRequests 1000000 KeepAliveTimeout 2 ServerName "fnux.net" <IfModule mpm_prefork_module> StartServers 16 MinSpareServers 16 MaxSpareServers 16 ServerLimit 2048 MaxClients 1024 MaxRequestsPerChild 0 </IfModule> User ${APACHE_RUN_USER} Group ${APACHE_RUN_GROUP} AccessFileName .htaccess <Files ~ "^\.ht"> Order allow,deny Deny from all Satisfy all </Files> DefaultType None HostnameLookups Off ErrorLog ${APACHE_LOG_DIR}/error.log LogLevel emerg Include mods-enabled/*.load Include mods-enabled/*.conf Include httpd.conf Include ports.conf 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 Include conf.d/ Include sites-enabled/
/etc/apache2/ports.conf
NameVirtualHost *:8180 Listen 8180 <IfModule mod_ssl.c> Listen 443 </IfModule> <IfModule mod_gnutls.c> Listen 443 </IfModule>
在/ etc / apache2的/ MODS的可用
<IfModule mod_fastcgi.c> AddHandler php5-fcgi .php Action php5-fcgi /cgi-bin/php5.external <Location "/cgi-bin/php5.external"> Order Deny,Allow Deny from All Allow from env=REDIRECT_STATUS </Location> </IfModule>
在/ etc / apache2的/网站可用/默认
<VirtualHost *:8180> ServerAdmin webmaster@localhost DocumentRoot /var/www/apache2 <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log LogLevel emerg ##### CustomLog ${APACHE_LOG_DIR}/access.log combined Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> <IfModule mod_fastcgi.c> AddHandler php5-fcgi .php Action php5-fcgi /php5-fcgi Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9000 -pass-header Authorization </IfModule> </VirtualHost>
在/etc/security/limits.conf
* soft nofile 1000000 * hard nofile 1000000
所以,如果这是可能的,我将非常感谢您的build议,设置Apache2使其能够支持1.000个并发客户端。
TIA为您提供帮助。 干杯。
@Laszlo Valco:我认为你的观点是100/100,这就是为什么我来这里寻求build议,并帮助configurationApache2,使其能够承受这样的负载。
现在,我对所有其他的Web服务器都这么做了,但我承认我对Apache2的设置一无所知,完全无知。
顺便说一句,目前的Apache2configuration上面不是默认的,但我再次认同它不符合维持我的testing的需要。
那么,您是否可以善意地解释如何设置影响工作进程的数字,使得1.000subprocess可用?
我想这是在文件“/etc/apache2/apache2.conf”的“IfModule mpm_prefork_module”部分,但我不知道如何设置正确的值,因此我的硬件能力(特别是32千兆),我需要达到1.000同时连接的客户端。
您的专业知识将被真正的赞赏,以帮助我使用正确的价值观,因为即使经过长时间的search,我无法find明确的解释如何这样做。
TIA了解更多信息。
干杯。
我不太相信,使用这样的configuration完成基准testing是非常有用的。 做任何性能基准与默认(或类似的)configuration似乎有点没有意义。 如果有人对性能感兴趣,就必须通过削减每一个不是绝对必要的性能下降function来调整configuration。 那么为什么这个人会对基准testing不感兴趣,而是显示这些服务器的实际function,而是显示默认configuration被认为是有用的?
因此,如果想要做一个适当的性能基准,那么你应该build立一个真实的function需求清单,并且对如何configuration这些软件来完成function需求和执行情况进行一些研究。 例如,Apache的默认configuration是非常不友好的。
为了帮助您解决Apacheconfiguration问题:设置影响工作进程的数字,以便1000subprocess始终可用。
尝试这些设置为MPM prefork:
StartServers 1024 MinSpareServers 128 MaxSpareServers 1024 ServerLimit 2048 MaxClients 2048 MaxRequestsPerChild 0
或MPM工作者的这些:
ServerLimit 64 StartServers 32 MaxClients 2048 MinSpareThreads 128 MaxSpareThreads 1024 ThreadsPerChild 32
此外,请注意, <IfModule mpm_prefork_module>
行将排除该部分,除非您使用该MPM模块或更改该行中的模块名称。
当您使用线程worker
MPM时,它仅取决于您有多less资源(CPU和内存); 如果有的话,apache会高兴地运行1000个并发线程,比如说4GB可用。
mod_prefork已被弃用,应避免任何严重的应用程序。