您的位置:首页 > 运维架构 > Linux

一次linux web服务器优化记录

2010-01-08 11:23 274 查看
服务器是一个四核cpu、6G内存的linux主机

服务器上是以前同事装的apache2 php5 mysql5环境,放着两个没有访问量的网站和几个测试站。

前一周转过来一个上线有段时间的人才网站,采用Joomla开源CMS进行二次开发而成。

跑了几天后,网站还搞了个投票活动,有人刷票。

服务器开始出问题,主要表现在:

1、通过top查看的服务器压力40左右,cpu使用82%以上

2、服务器同时开了n(20-40)个httpd线程,其中10+个线程占用cpu 8%+,其它2-5%不等

3、网站页面打开速度缓慢,经常有mysql无法连接的提示

4、重启apache和mysql会缓解一下,尤其是mysql,mysql的cpu使用30%以上

5、跟踪apache访问,几乎所有访问都来自人才网。跟踪mysql的慢查询记录(2秒以上),每妙都会有2-5条慢查询,多数都是3-6妙,且都来自人才网。

做出以下应对:

1、减少apache不必要的log日志

apache中,提高loglevel的级别,由warn(警告)调整为crit(致命)

关闭所有网站的访问日志和错误日志

2、注释掉httpd.conf中用不到的模块

3、调整apache prefork模式的配置

ServerLimit 256

StartServers 5

MinSpareServers 5

MaxSpareServers 10

MaxClients 256

MaxRequestsPerChild 10000

其中,最重要的是 MaxRequestsPerChild ,默认设置为0,直接导致apache开了过多进程

4、mysql的配置没有调整,只是通过slow query log,判断哪些数据库查询效率底。

但因为不能动别人的库结构和php代码,只能向对方网站技术人员提交慢查询记录。建议对方尽量cache数据,确认所有的查询语句都使用了索引。

Joomla 也有过较多接触,运行效率确实不高。

mysql中几个比较重要的参数如下:

skip-locking

key_buffer = 16M

max_allowed_packet = 1M

table_cache = 64

sort_buffer_size = 512K

net_buffer_length = 8K

read_buffer_size = 256K

read_rnd_buffer_size = 512K

myisam_sort_buffer_size = 8M

set-variable=max_connections=1000

此类参数要根据环境需要做不同的调整

调整后,目前的服务器状态如下:

top - 12:36:34 up 24 days, 18:29, 1 user, load average: 0.10, 0.22, 0.20

Tasks: 135 total, 1 running, 134 sleeping, 0 stopped, 0 zombie

Cpu(s): 2.4%us, 0.2%sy, 0.0%ni, 97.3%id, 0.1%wa, 0.0%hi, 0.0%si, 0.0%st

服务器压力0.2 ,Cpu占用2-16%

httpd线程减少到2-10个, cpu占用超过8%的也明显减少
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: