Loading...

    AD: 猛买网,精彩团购 | Jobsdigg | 很棒的男装店 | 网站地图

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。

8 Responses to “LAMP最小优化”


  1. 1唐僧

    应该是swappiness啊,呵呵。

    linux有两种办法解决内存不够的问题,一是“清除内存中的磁盘缓存(disk cache)”二是“把挂起的程序移动到虚拟内存里(swap out操作)”,这两种方法都没有办法预测结果,内核一般是根据最近的内存操作来猜测采取哪种方式。
    对于vps来说,设置swappiness为0相当于尽可能采用前一种办法获得可用内存。(一般针对笔记本的发行版会设置比较小的swappiness来降低磁盘io操作)

    另外InnoDB一般适用于“读少写多”的场景(涉及到一个auto comment的参数),MyISAM引擎更适合“读多写少”。对于以web服务为主的vps来说,禁用InnoDB确实是很必要的。

  2. @唐僧
    赞啊!
    多谢回复

  3. swap最好是不要关闭,把swappiness设置成0就可以了。如果没记错的话,新的内核支持动态自动调节swappiness的值。反正gentoo很早以前就有这个patch。

  4. @s7v7nislands
    我也是观察了有段时间,看swap一直没被使用,才关掉的

  5. 一般为了安全起见是不建议完全关闭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内核开始成为默认值的;-)

  6. @Terry
    多谢告知 :)

  7. 顶磊哥,不错的文章。

  8. 没整这么多,我只是将LAMP换成LNMP了,效率高了好多。

Leave a Reply