LAMP最小优化
原文地址:http://www.blogkid.net/archives/2704.html
假如你在Linode入手了一个VPS,迅速地部署了Ubuntu,然后使用一大堆apt-get把LAMP服务都搭好了(这整个过程也就10分钟吧,可以更短)。此时可以算是“It works”,但还颇有一些地方需要调整。本文就在这种场景下,写一下此时可以做的最小优化,作用范围不仅限于Linode、Ubuntu,其他系统也可以参考。希望对一些朋友有帮助。
Linux
日志切分
如果没有日志切分,日志可能很快会把硬盘塞满,最后不得不手动清理。做日志切分推荐用logrotate,易于配置,一旦配置完成就会默默无闻地工作。
调整swapiness
swappiness用来控制使用系统swap的概率,ubuntu内核默认是60。建议修改为0,使系统尽可能使用物理内存而非swap。实际上,在上次Linode升级套餐后,我已经关掉了swap,系统运行得依然稳定。具体修改方法可以百度一下。
UPDATE: 经 @7id 提醒,swappiness参数更多的是降低磁盘io操作,对于内存不是特别小的情况,差别不大。详细请看下方留言。
Apache
启用压缩
启用压缩,可以减少传输的内容。对WebServer来说这几乎是必须的,但默认的Apache安装并未开启压缩。对于比较慢的连接,启用压缩会有更多好处。
调整MaxRequestsPerChild
MaxRequestsPerChild用于设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果这个参数为0,Apache进程占用的内存会只增不减。一些使用Apache的VPS经常遇到iorate很高,可以尝试调整一下这个参数(ref)。
Mysql
关掉InnoDB
如果服务器用来放blog或是论坛,多数时候MyISAM就足够用了。此时可以把InnoDB关掉。my.cnf中的注释说:”You might want to disable InnoDB to shrink the mysqld process by circa 100MB.”。实测在VPS关掉Innodb时虽然没节约了100MB,但50M还是有的,内存珍贵,能省则省吧。
只需在my.cnf加入一行 skip-innodb 就可以把InnoDB的功能关掉。
PHP
开启输出缓冲
在使用mod_php时,如果不开Output Buffering,每一个输出都会使Apache向客户端发送数据,导致效率很低。使用fastcgi时,由于WebServer本身有buffer,影响并不大。但默认的apt-get安装,使用的就是mod _php,因此建议在php.ini里把Output Buffering打开。
–
以上只是一些最初级的调整,叫做“优化”都显得有点夸大。但在初期遇到问题时,调整这些地方往往可以很快见效。
除此之外,强烈建议用nginx换掉Apache。



应该是swappiness啊,呵呵。
linux有两种办法解决内存不够的问题,一是“清除内存中的磁盘缓存(disk cache)”二是“把挂起的程序移动到虚拟内存里(swap out操作)”,这两种方法都没有办法预测结果,内核一般是根据最近的内存操作来猜测采取哪种方式。
对于vps来说,设置swappiness为0相当于尽可能采用前一种办法获得可用内存。(一般针对笔记本的发行版会设置比较小的swappiness来降低磁盘io操作)
另外InnoDB一般适用于“读少写多”的场景(涉及到一个auto comment的参数),MyISAM引擎更适合“读多写少”。对于以web服务为主的vps来说,禁用InnoDB确实是很必要的。
@唐僧
赞啊!
多谢回复
swap最好是不要关闭,把swappiness设置成0就可以了。如果没记错的话,新的内核支持动态自动调节swappiness的值。反正gentoo很早以前就有这个patch。
@s7v7nislands
我也是观察了有段时间,看swap一直没被使用,才关掉的
一般为了安全起见是不建议完全关闭swap的(可以不用swap分区,需要时可以用dd个文件格式化为swap file代替),可以手动设置swappiness的值为0,最大限度利用物理内存,来避免不必要的page in/out(针对Linux swap叫swap in/out)造成的disk I/O开销。唐僧师傅已经说的够清楚了;-)
swappiness值是60和Linux发行版本无关,和内核有版本有关。是从2.6或者晚期2.4.2x内核开始成为默认值的;-)
@Terry
多谢告知
顶磊哥,不错的文章。
没整这么多,我只是将LAMP换成LNMP了,效率高了好多。