FreeTstar

loving Freedom + + loving Linux

  • 首页
  • Archive
  • 关于
  • 杂七杂八
  • 留言板
Twitter Sina RSS

浅谈ubuntu10.04 server Apache2.0 性能优化

发布于 2010年07月4日 由 freetstar
13 条评论发表评论

近来VPS的Apache耗MEM耗得可怕,于是想到优化下Apache2

Apace2.0 中最影响性能优化的最核心特性是:MPM(Multi-Processing Modules)

要想让Apache的性能最佳,第一步要做的,就是要选择合适的MPM

下面简单介绍Apache2的3个MPM

event模式

比较适合那些需要有大量持续链接(KeepAlive traffic)的情况.KeepAlive的好处是,可以在同一个TCP链接中响应多次请求;这种方式,可以使一个包含大量图片的HTML文档加速50%.在配置文件中设置KeepAlive为On,即可启用KeepAlive

prefork模式(默认)

这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器,它兼容Apache 1.3。它适合于没有线程安全库,需要避免线程兼容性问题的系统。它的特点:虽然不是很快,但是很稳定.它能够隔离每个请求,所以,如果某个请求出现故障,不会影响其他的请求.prefork由一个主进程在那里负责,事先派生出一些子进程,这样一旦有访问需求,客户机就不必再等待服务器产生子进程所花的时间.这个MPM具有很强的自我调节能力,只需要很少的配置指令调整。最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以致需要使用的内存超出物理内存的大小。

StartServers 5

//apache服务启动时就启动5个进程

MinSpareServers 5

//开启后需要备用的最小进程数

MaxSpareServers 10

//服务开启后需要备用的最大进程数

MaxClients 150

//允许用户的最大并发数

MaxRequestsPerChild 0

//子进程可以处理的最大访问数,0表示可以处理无穷多个 

worker模式

使网络服务器支持混合的多线程多进程。.速度比prefork快得多.由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM。但是,它也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性.和prefork类似的是,他也是由一个单独的控制进程来负责子进程的建立,并事先派生出一些子进程在那里等候,这样客户可以不必等待服务器建立对应的子进程,而马上就可以得到响应和处理.这种worker的MPM工作方式将是未来Apache2的发展趋势.他的两个重要参数是:ThreadsPerChild和MAxClients.前者控制每个子进程运行建立的进程数,后者用来控制允许建立的总线程数.

Worker 由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients 设置了同时连入的clients最大总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。MinSpareThreads和 MaxSpareThreads的最大缺省值分别是75和250。这两个参数对Apache的性能影响并不大,可以按照实际情况相应调节。 ThreadsPerChild是worker MPM中与性能相关最密切的指令。ThreadsPerChild的最大缺省值是64,如果负载较大,64也是不够的。这时要显式使用 ThreadLimit指令,它的最大缺省值是20000。Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild 值决定的,应该大于等于MaxClients。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时也需要显式声明ServerLimit(最大值是20000)。需要注意的是,如果显式声明了ServerLimit,那么它乘以 ThreadsPerChild的值必须大于等于MaxClients,而且MaxClients必须是ThreadsPerChild的整数倍,否则 Apache将会自动调节到一个相应值。



StartServers 2

//服务器启动时创建的子进程的数量

MaxClients 150

//允许同时伺服的最大接入请求数量,是serverlimint和ThreadsPerChild的乘积

MinSpareThreads 25

//允许空闲线程的最小数量

MaxSpareThreads 75

//允许空闲线程的最大数量

ThreadsPerChild 25

//每个子进程建立的线程数量

MaxRequestsPerChild /

/设置每个子进程在生存期间允许伺服的最大请求数量,若为0,表示子进程永远不会结束

 


这3种模式做何选择呢?

对我来说,只是一个blog站点而已,不会有太多的访问量,并且希望能够优化系统资源的使用,把apache吃了的mem多要回来点,于是我选择worker的MPM.worker模式消耗资源相对较少,具体优点可以参考以下文章

http://httpd.apache.org/docs/2.0/misc/perf-tuning.html#compiletime

 

安装worker模式的MPM

必要知识 1

查看Apache当前的MPM模式

/usr/bin/apache2 -V

找到语句 "-D APACHE_MPM_DIR="server/mpm/prefork" ,由此可见使用的是prefork模式的MPM

必要知识 2

单纯地通过apt-get install apache2-mpm-worker来安装worker模式是可不行的,会删除php5,重新安装php5时会将prefork模式装回

 

<一> 通过以下方式安装的LAMP包

sudo apt-get install apache2 libapache2-mod-php5 php5-mysql mysql-server

此方式是安装的MPM模式是prefork

卸载此MPM方法

sudo apt-get autoremove apache2-mpm-prefork –purge

因为依赖关系,libapache2-mod-php5也会被卸载掉

下面开始Worker安装

第一步:安装apache2-mpm-worker和apache的fastcgi模块libapache-mod-fcid

sudo apt-get install apache2-mpm-worker libapache2-mod-fcgid

第二步:激活 Fastcgi模块

sudo a2enmod fcgid

第三步:安装php5

sudo apt-get install php5-cgi php5-cli

第四步:将下列设置增加到/etc/apache2/httpd.conf或者增加到/etc/apache2/conf.d下的某一个文件中,可以为/etc/apache2/conf.d/00-myconf ("00-" 将保证自己在 /etc/apache2/conf.d 文件夹中是第一个被读取, 这是必须)

cd /etc/apache/conf.d

vi 00-myconf 将下列内容添加并保存退出

AddHandler fcgid-script .php

FCGIWrapper /usr/lib/cgi-bin/php5 .php

Options +ExecCGI

# If you have Aliases provide php support for them (Here we provide php support for scripts in /usr/share's subdirectories)

Alias /aptitude /usr/share/doc/aptitude/html/en

Alias /apt /usr/share/doc/apt-doc

AddHandler fcgid-script .php

FCGIWrapper /usr/lib/cgi-bin/php5 .php

Options ExecCGI FollowSymlinks Indexes

5 . 对于/etc/apache2/sites-available下的虚拟主机配置文件,增加ExecCGI 在<Directoy /path-to-site> 块 (添加到你的块中).

     cat /etc/apache2/sites-availabe/default

其中有这样的一段话

AllowOverride All

Order Allow,Deny

allow from all

添加Options +ExecCGI, 添加后如下

Options +ExecCGI

AllowOverride All

Order Allow,Deny

allow from all

6 激活你的站点
sudo a2ensite default
7 重启apache服务
sudo /etc/init.d/apache2 restart
<二>用这种方式安装的Apache2
sudo apt-get install apache2
此模式默认安装的worker模式的mpm,所需要做的工作大部分同上,具体不再做阐述了,
 
 
实际总结:采用worker模式后,apache吃mem的现象得到了很大的缓解.系统总mem使用降到了300m左右

 

参考资料:

Hiweed的<Ubuntu Server 最佳方案>

http://www.6curl.com/post/21/

http://67054.blog.51cto.com/57054/70439/

http://www.netroby.com/article-823.html

http://ubuntuforums.org/showthread.php?t=1038416

分类:服务器 | 标签:ubuntu 10.04 server apache2
Enjoy Your Blog
ubuntu full circle 38期放出

13 则回应给 “浅谈ubuntu10.04 server Apache2.0 性能优化”

  1. Mucid CHINA Mozilla Firefox Ubuntu Linux 说道:
    2011年03月12日 1:45 下午

    测试了Nginx+Fastcgi+php+Uwsgi+python。
    感觉不是很好。

    准备采用前端Nginx后端Apache方案。

    对了MPM非得使用CGI么。

    我觉得要用APache话,还是用Mod比较好。

    还有如果我用前端Nginx后端Apache方案的话,应该用perfork吧

    [回复]

    freetstar CHINA Google Chrome Ubuntu Linux 回复:
    三月 13th, 2011 at 10:12 上午

    mpm用php的话当然是cgi了阿,最好用ab测试下,实践出真知嘛

    [回复]

    Mucid CHINA Mozilla Firefox Ubuntu Linux 回复:
    三月 13th, 2011 at 11:33 上午

    @freetstar, cgi这玩意儿真不是好东西……

    [回复]

    freetstar CHINA Google Chrome Ubuntu Linux 回复:
    三月 13th, 2011 at 11:46 上午

    @Mucid, cgi不是现在通用的技术吗

    [回复]

    Mucid CHINA Mozilla Firefox Ubuntu Linux 回复:
    三月 13th, 2011 at 12:01 下午

    @freetstar, 通用不一定最好嘛,mod效率更高

    [回复]

    freetstar CHINA Google Chrome Ubuntu Linux 回复:
    三月 13th, 2011 at 8:52 下午

    还真没研究过。

    [回复]

  2. Heiher AUSTRALIA Internet Explorer Windows 说道:
    2010年07月18日 1:37 下午

    哈哈,我也用VPS,以后多交流交流经验吧。

    [回复]

  3. 灵亦rEd CHINA Mozilla Firefox Ubuntu Linux 说道:
    2010年07月4日 10:34 下午

    不错,有前途 8-O
    以后跟我混了 :twisted:
    每个月几百保护费就可以了

    [回复]

    freetstar CHINA Google Chrome Linux 回复:
    七月 4th, 2010 at 11:08 下午

    几百..你也太能宰人了,答题去

    [回复]

  4. 奶牛 CHINA Mozilla Firefox Windows 说道:
    2010年07月4日 8:01 下午

    哇塞,vps,这么奢侈~~~

    [回复]

    freetstar CHINA Internet Explorer Windows 回复:
    七月 4th, 2010 at 8:57 下午

    还好。。。这个VPS不是很贵

    [回复]

  5. Mucid UNITED STATES Google Chrome Windows 说道:
    2010年07月4日 1:24 下午

    哈哈好详细的配置,其实也应该可以用于centos的,我比较懒装了kloxo面板,还是方便了很多 :roll: 难道兄的VPS用的Ubuntu啊 8-O

    [回复]

    freetstar CHINA Internet Explorer Windows 回复:
    七月 4th, 2010 at 2:09 下午

    是啊,centos的那一套东西不太熟悉。刚开始也一直用的是默认的ubuntu10.04 server

    [回复]

发表评论 取消回复

电子邮件地址不会被公开。 必填项已用 * 标注

*

*


疑问 开心 悲伤 邪恶 惊叹 微笑 脸红 笑 惊讶 惊奇 迷惑 酷 憨笑 生气 阴险 转眼球 眨眼 主意 箭头 中立 哭 大笑

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*
To prove you're a person (not a spam script), type the security word shown in the picture.
Anti-spam image

点击取消回复
第 1 页,共 1 页1
  • 欢迎订阅

  • Github

  • 近期评论

    • freetstar CHINA Mozilla Firefox Linux 发表在《留言板》
    • _Fly CHINA Google Chrome Linux 发表在《使用e4rat加速你的linux启动速度(ext4文件系统专用)》
    • walfred Mozilla Firefox Windows 发表在《留言板》
    • freetstar CHINA Mozilla Firefox Windows 发表在《用landslide创建html5 slide》
  • Spread Firefox Affiliate Button
  • 我的豆瓣

  • 链接表

    • 51开源社区
    • Adam's
    • delectate's blog
    • Don's
    • fl
    • ghostunix
    • Jasey Wang
    • Jerry's Blog
    • Moolight@Ericyue
    • OSMSG
    • panda
    • Pity is the Bomp
    • PT ubuntu
    • Tao Zhu
    • ubuntuhome
    • WOW!ubuntu
    • zhangzhfang
    • 丕字的blog
    • 傻东の学习笔记
    • 奶牛的blog
    • 孤风颠影
    • 弯柚博客
    • 熊猫党军委主席
    • 靖 轩
    • 马力哥
    • 黑孩儿
  • 我的支付宝

  • 功能

    • 登录
    • 文章 RSS
    • 评论 RSS
    • WordPress.org
© FreeTstar. WordPress 强力驱动 | Nest Theme by YChong