季节不曾为我赶路SorryDreams的Blog

SorryDreams和他的博客

“带着没有答案的问题,茫然,孤独,从城市的深处,支离破碎的蓝天都一样”

blog header

Apache+MPM worker+fastcgi+mysql服务器的配置实例

这个配置实例是我自己摸索出来的。

服务器的生产环境是 apache+mpm worker+fastcgi。利用cpanel主机的/scripts/easyapache脚本可以很方便地安装必要的组件。但是默认安装好的配置并不能很好的运用于生产环境,根据网站的负载不同,你可能需要手动修改一些关键的配置文件,这也正是我做的。

MPM模块的引进是apache2.0版本开始最重大的改进之一,MPM常见的模式是prefork和worker,很奇怪,在cpanel服务器的web控制端,默认配置prefork模式,因此,如果你要使用MPM worker,需要手动修改http.conf,一个典型的prefork配置是这样的:

<IfModule prefork.c>

StartServers 5

MinSpareServers 5

MaxSpareServers 10

MaxClients 150

MaxRequestsPerChild 0

</IfModule>

prefork模式可以提高apache的并发能力,对于大内存的服务器来说是apache和cpanel官方推荐的方法,实际我用了worker模式,它对内存的使用更加经济,删掉类似上面的prefork模式,以worker模式取而代之:

<IfModule mpm_worker_module>
ServerLimit 16
ThreadLimit 64
StartServers 2
MaxClients 1024
MinSpareThreads 64
MaxSpareThreads 128
ThreadsPerChild 64
MaxRequestsPerChild 1300
ThreadStackSize 327680
TimeOut 60
</IfModule>

下一步是对fastcgi的配置。fastcgi是php的一种运行模式,它最大的优点就是大大提高了php脚本的执行效率,但它的配置也是最复杂的,事实上,你应该根据网站的实际流量和服务器的现有资源,控制fastcgi的进程数,尤其要注意及时杀死空闲僵死的fastcgi进程,以收回内存。cpanel服务器的配置文件是/etc/httpd/conf/php.conf,我的配置如下:

# Fastcgi configuration for PHP5
LoadModule fcgid_module modules/mod_fcgid.so
MaxRequestsPerProcess 30
ProcessLifeTime 1200
IdleTimeout 300
DefaultMinClassProcessCount 2
DefaultMaxClassProcessCount 6
IPCConnectTimeout 30
IPCCommTimeout 300

因为服务器的生产环境是用于虚拟主机托管,因此会产出许多(超过100不稀奇)个php(运行于fastcgi模式)的进程,以上的配置的优点是能够较好的回收内存,对有较多数量网站,而大部分的流量并不高的生产环境是一种效率和稳定性之间的折中。即使做了上述的配置,实际内存的使用也往往接近3GB。

因此,你可以另外通过cronjob的方法,定时杀死php进程,回收内存,比如每小时杀死一次:

0 * * * * ps aux | grep php | egrep -v grep | awk '{print $2}' | xargs kill -9

最后,是mysql的配置,数据库的配置可以是一件非常复杂的事情,不了解的人请不要照抄我的配置:

[mysqld]
skip-networking
log-slow-queries
safe-show-database
local-infile = 0
skip-locking
skip-name-resolve

set-variable = key_buffer_size=256M
set-variable = thread_concurrency=16
set-variable = max_connections=200
set-variable = table_cache=256
set-variable = max_delayed_threads=20
set-variable = max_tmp_tables=128
set-variable = query_cache_type=1
set-variable = query_cache_size=16M
set-variable = thread_cache_size=16

本文欢迎转载。分享知识光荣,浪费智力可耻。

分享和收藏:
  • Google Bookmarks
  • 开心网
  • 校内网
  • 百度搜藏
  • 豆瓣
  • 豆瓣九点

欢迎访问季节不曾为我赶路,如果你喜欢我的文章,请订阅我的博客

随机日志

转载请注明,转载自:季节不曾为我赶路SorryDreams的Blog[http://blog.frompku.com] 本文链接: http://blog.frompku.com/2010/06/apachempm-workerfastcgimysql%e6%9c%8d%e5%8a%a1%e5%99%a8%e7%9a%84%e9%85%8d%e7%bd%ae%e5%ae%9e%e4%be%8b.html

One Comment, 留言 or 引用

  1. 内容不错,希望多写些类似的。。。顶。。

    [回复]

发表评论

(Ctrl+Enter)