这个配置实例是我自己摸索出来的。
服务器的生产环境是 apache+mpm
worker+fastcgi。利用cpanel主机的/scripts/easyapache脚本可以很方便地安装必要的组件。但是默认安装好的配置并
不能很好的运用于生产环境,根据网站的负载不同,你可能需要手动修改一些关键的配置文件,这也正是我做的。
MPM模块的引进是apache2.0版本开始最重大的改进之一,MPM常见的模式是prefork和worker,很奇怪,在cpanel服务器的
web控制端,默认配置prefork模式,因此,如果你要使用MPM
worker,需要手动修改http.conf,一个典型的prefork配置是这样的:
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
prefork模式可以提高apache的并发能力,对于大内存的服务器来说是apache和cpanel官方推荐的方法,实际我用了worker模式,它对内存的使用更加经济,删掉类似上面的prefork模式,以worker模式取而代之:
ServerLimit 16
ThreadLimit 64
StartServers 2
MaxClients 1024
MinSpareThreads 64
MaxSpareThreads 128
ThreadsPerChild 64
MaxRequestsPerChild 1300
ThreadStackSize 327680
TimeOut 60
下一步是对fastcgi的配置。fastcgi是php的一种运行模式,它最大的优点就是大大提高了php脚本的执行效率,但它的配置也是最复杂
的,事实上,你应该根据网站的实际流量和服务器的现有资源,控制fastcgi的进程数,尤其要注意及时杀死空闲僵死的fastcgi进程,以收回内存。
cpanel服务器的配置文件是/etc/httpd/conf/php.conf,我的配置如下:
# Fastcgi configuration for PHP5
LoadModulefcgid_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 * * * * psaux | 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