不好意思问这个问题,如果对你太肤浅的话。 考虑到下面的信息,你将如何configurationhttpd.conf?
当服务器忙时页面的加载时间达到30秒。
服务器:
四核Xeon 3220 / 8GB内存/ 2x250GB SATAII / 10TB带宽/ 1GiGE / 8 IPS(SoftLayer),CentOS 5(64位)Plesk 9.5
Linux server.x.com 2.6.18-274.17.1.el5#1 SMP Tue 1月10日17:25:58 EST 2012 x86_64 x86_64 x86_64 GNU / Linux
服务器上的站点平均每天收到大约50万次综合浏览量和200GB。 当服务器按照http://whos.amung.us/stats/忙时,在线的访问者大约有1500人。
top - 11:15:08 up 23 days, 12:21, 1 user, load average: 0.30, 1.09, 1.84 Tasks: 453 total, 1 running, 452 sleeping, 0 stopped, 0 zombie Cpu(s): 2.9%us, 2.8%sy, 0.0%ni, 90.3%id, 3.7%wa, 0.0%hi, 0.3%si, 0.0%st Mem: 8165772k total, 8065268k used, 100504k free, 348884k buffers Swap: 1052248k total, 208k used, 1052040k free, 6466136k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 15573 mysql 15 0 601m 80m 4520 S 35.1 1.0 2026:37 mysqld 19381 apache 15 0 307m 15m 3312 S 1.0 0.2 0:02.73 httpd 13230 apache 15 0 307m 15m 3296 S 0.7 0.2 0:03.74 httpd 14152 apache 15 0 307m 15m 3284 S 0.7 0.2 0:03.91 httpd 16147 apache 15 0 307m 15m 3296 S 0.7 0.2 0:03.14 httpd 16957 apache 15 0 307m 15m 3292 S 0.7 0.2 0:03.03 httpd
httpd.conf文件:
Timeout 60 KeepAlive On MaxKeepAliveRequests 300 KeepAliveTimeout 5 <IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 4000 </IfModule> <IfModule worker.c> StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule>
需要考虑的事项:
httpd
进程使用的内存量(从输出中大约300MB)和机器的内存量。 彻底检查你的httpd.conf
并删除任何不必要的模块以减less内存占用是个好主意。 一旦你完成了,你可以开始逐渐提高MaxClients
和ServerLimit
。
您还需要引入StartServers
, MinSpareServers
和MaxSpareServers
,但是在每次更改之后,再逐步执行此操作,并监视内存使用情况和网站性能一段时间。
其他要考虑的事情是在Apache面前放置一些类似Varnish的东西,或者(如费尔南多build议的)APC。
如果可能的话,尝试切换到另一个networking服务器,如Nginx或Lighttpd。 Apache是伟大的,但通常它不处理繁忙的网站。
如果你不能,没问题。 以下是一些可以帮助您的提示:
1.禁用日志
如果您的应用程序不依赖于日志文件,并且使用Google Analytics或其他服务进行统计,则可以禁用日志。 你会看到I / O的丢失,因为Apache不需要写入磁盘上的每个请求。
2.你使用PHP吗? 操作码caching是强制性的!
我更喜欢APC,因为它安装简单,稳定,将很快成为PHP的一部分。 要安装它,只需运行:
pecl install apc
他们添加以下行到您的php.ini:
extension="apc.so"
重新启动您的networking服务器,并观看负载下降。
3.更改为另一个MPM
更改为工人或事件MPM可以帮助一些原因。 这真的取决于你正在服务的文件的types。 我看到这种情况下负载下降,其他人在prefork运行或工人没有任何显着的差异。
注意:如果您更改了worker,并且将其作为DSO模块运行,则可以中断PHP。 先检查一下。