自从apache2.0出来之后,跑线程成了一个相当理想的方式,因此直到今天早上我还是一直认为进程模式要逊色于线程模式。但是从今天的实际使用情况来看,进程模式在某些地方还是要优于线程的。
实例:
在一台Sun的U80的机器上,虽然老了一点,但是跑个apache+php应该问题不大吧:)内存2G
原来这台机器上跑得是apache1.1.12+php4.0.1很老了。一直这样跑了几年了,一直没有出什么问题。但是现在访问量加大,而当时编译的时候没有修改httpd.h,因此MaxClint最大只能支持到256,而不能满足需求了,否则访问速度奇慢无比。由于以前的思想固化认为跑线程一定性能更好,而且2.0不需要修改源码,随便设置:)。因此就重新编译了apache2.0.50+php4.3.8,由于一直使用worker的MPM方式,其他MPM,一直觉得一般,这次也照旧拉。。。:)。编译安装完成之后,配置MPM,设了3个参数:
MaxClient 1000
ThreadsPerChild 25
ServerLimit 40
这个设置我认为不是很过分吧。。。最多限制起40个进程,每个进程含有25个线程。
可是实际情况很糟,load average开始迅速串升,最高到了200多。。。该死,那我想可能参数设的太大了,我从小开始设起总行了吧:
MaxClient 300
ThreadsPerChild 30
ServerLimit 10
还是不行。load average还是会上串。。。
还试了一些参数包括很变态的把ThreadsPerChild设成1,而ServerLimit设成300,还是会上串。
把ServerLimit设成200,ThreadsPerChild还是1的情况也没有apache1.x好。
最后我只能重新编译apache和php,选择1.3.31,修改httpd.h,把最大连接支持到2560,编译完成后MaxClient设成800,ps -ef|grep -i httpd|wc -l 大概数字在500附近,load average也比较正常。没有超过10,一般稳定在5左右。
当然需要申明的是:线程模式在机器性能比较高的情况下,特别是cpu比较高的情况下确实要比进程要好。不过还有一点需要考虑的是,我这边的页面需要和oracle数据库以及java程序打交道,因此可能这样的页面使用进程比较好。这是我的一点想法,欢迎驳斥我!指出我理解有偏颇的地方!