lamp 架构服务器性能优化建议

 

lamp 架构服务器性能优化建议
        
03/11/2004 r1版)

  出处:http://www.paulgao.com.cn,欢迎转载。

  
  服务器配置如下:redhat linux 9.0apache  1.3.29 php 4.3.4mysql 
3.23.58
,以下建议均在以上平台上跑的很好,当然也跟你的应用有关系,具体实施要根据实际效果来进行。

  1、众所周知的方法就是使用 zend optimizer(简称 zo,最新版本为 2.5.1 或者 zend 
performance suite
(简称 zps,其中包含 zo,最新版本为 3.6.0)对 php 
进行加速。相关软件可到张微波的主页来下载哦,地址为:http://www.5ilinux.com/blog/archives/000093.html

  2apache配置优化(httpd.conf
        1)
修改“timeout”的值为 30-60,如果你得程序没有执行时间需要很长的话,可以修改到 10-15
        
2)
修改“keepalive”的值为“off”,这个很有效果,也很有争议,我自己的看法是很有效果,而且并没有影响速度,大家可以自行试验;
        
3)
修改“maxrequestsperchild”的值为“2048”,这个还在试验中,一是因为怕有内存泄漏,二是因为 
apache 
进程会因为随着服务时间的延长,会变得越来越胖(我这里的实际情况是某些 apache 
进程会狂吃内存到18mb,晕啊:),不过这设置有没有效果,还在试验中;
        4)
在不使用 .htaccess 的情况下,将其“<files 
.htaccess[/img]”
部分设置为“none”方式,如果你使用 phpmyadmin 进行管理的话,可以使用 
phpmyadmin 
 cookie 权限控制方式。

  3、卸载不必要的模块,不管是静态编译还是 dso 模式,以便节省内存占用。具体模块可以参照 apache 
的手册,这里就不多说了。php 也是同样,我基本上已经把不用的模块都卸载了:)

  4、使用 mod_gzip 进行加速,很简单,就不多说了。

  5、如果你的服务器还是负载很高的话,更极端的方式就是在 httpd.conf 里面将日志停掉了,不过一般要保留 
errorlog 
才好,以便排错,而且要记得,不是把“customlog”注释掉就行了,而要使用“customlog 
/dev/null common”
这样的方式才好。

  6、如果你的 php 程序使用 session 对话的话,可以在 php.ini 
里面将“session.save_path”设置为“session.save_path = /dev/shm”,因为 
/dev/shm 
 linux 系统独有的 tmpfs 文件系统,是以内存为主要存储方式的文件系统,比 ramdisk 
要好,因为可以使用 diskswap 
作为补充,而且是系统自带,不需要另行配置,想想吧,从磁盘io操作到内存操作,速度会快多少?:)你也可以把你所需要的临时文件都写在 
/dev/shm 
下,只是别忘了,重启就没有啦,我是只存放目标文件的,呵呵。额外的说明资料请看使用虚拟内存(virtual 
memory
vm)文件系统和绑定安装http://www-900.ibm.com/developer ... 
m/l-fs3/index.shtml
)。

  7mysql 的优化(/etc/my.cnf
        1)
确认在“[mysqld]”部分加入了“skip-innodb”“skip-bdb”参数;
        
2)
确认在“[mysqld]”部分加入了“skip-name-resolve”“skip-locking”参数;
        3)
如果不需要的话,可以将二进制日志(binlog)停掉,方法是将“log-bin”注释掉;
        
4)
在内存允许的情况下,对一些参数进行重新配置,目标在于将大部分操作集中于内存中,尽量不进行磁盘操作,对于我的 mysql 
服务器我是如下修改的,基于 2g 内存情况:

        [mysqld]
        set-variable    = key_buffer=512m
        set-variable    = max_allowed_packet=4m
        set-variable    = table_cache=1024
        set-variable    = thread_cache=64
        set-variable    = join_buffer_size=32m
        set-variable    = sort_buffer=32m
        set-variable    = record_buffer=32m
        set-variable    = max_connections=512
        set-variable    = wait_timeout=120
        set-variable    = interactive_timeout=120
        set-variable    = max_connect_errors=30000
        set-variable    = long_query_time=1
        set-variable    = max_heap_table_size=256m
        set-variable    = tmp_table_size=128m
        set-variable    = thread_concurrency=8
        set-variable    = myisam_sort_buffer_size=128m

        
你可以根据“show status”命令返回的状态进行微调。我主要注意以下变量的数值,越小越好,最好为零:)
        created_tmp_disk_tables
        created_tmp_tables
        created_tmp_files
        slow_queries

  8、在启动脚本中使用“--log-slow-queries=/home/logs/mysql_slow.log”参数,以便进行 
sql 
语句的优化工作,这个其实是很很重要的工作。记得一定要在 my.cnf 中设置“set-variable = 
long_query_time=1”
才行。

  9、另外可以使用 4.0.xx 版本的 mysql4.0.xx 版本除了一些性能提升以外,还有 querycache 
方法,就是在 sql 语句查询结果没有变动之前,将其结果进行缓存,下次再进行同样的 sql 
语句查询就可以直接反回结果,当然也是以牺牲内存为前提:)

  10、额外的,对于 linux ext3 文件系统还有一个小技巧可用,就是在修改 /etc/fstab 
中的参数,比如“/dev/sdb2 /home ext3 defaults 1 2”改为“/dev/sdb2 /home 
ext3 noatime 1 2”
“noatime”的意思就是不修改 
accesstime
,对于磁盘文件读写频繁的服务器也应该可以降低一些效果。不过最好不要远程操作,不然因为修改失误,服务器不能启动了,可别怪我:)

  好了,基本上我用过的方法已经说过一遍了,有些方法是取自于一些很好的文章,由于未作保留,所以无法写出出处,只能泛泛的表示感谢了。其中有些方法也适用于 
windows 
平台,大家可以根据自己的服务器、应用情况去进行应用,大家也可一说说自己的办法,比如改用 zeus 来做 
webserver
,我也在找更多的办法来提升服务器性能,比如基于 linux kernel v2.4 
以上内核的一些性能优化方法,从 network  
swap
(因为内核升级,所以一些老版本内核的方法已经不能再使用了:)。我也会进一步更新这篇文章,让大家能够更好的进行服务器的性能提升工作~

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值