技术开发 频道

关于Apache的性能优化

3. 检查

    至于是否还想加其他的模块你就看着办吧,一般来说这就够了。

    需要提一下的是,现在apache在2.2种引入了一种新的MPM来提高性能,叫做event。可惜还在实验状态,未能稳定。event是worker的变种,和线程类似,也是多线程模型,不同的是,它将做数据处理的线程和等待连接的线程分开,以此试图解决KeepAlive大了也不是,小了也不是的性能调整问题。

    event是使用一个比较小的线程来等待所有的socket,包括等候连接的socket和那些KeepAlive的连接。一旦这些socket有任何发送HTTP请求了,这个等候的线程,就会这个socket交给真正做数据处理的线程进行处理,那个线程处理完成后,会将这个socket交还给这个守候线程。

    这样,即使有大量的KeepAlive连接,也不用担心性能损耗,因为只有一个简单的线程来负责维护这些KeepAlive的连接,而那些真正做任务处理的线程则在一个HTTP响应处理完成后就退回到可用线程池或者被释放了,因此很省资源。这个思路很好,现在还在实验,如果试验成功,估计会成为2.4或者2.6的稳定MPM。

3.1 httpd -l

    通过这条命令可以检查mpm是prefork还是worker。很不幸默认是prefork,FC5显示如下:
Compiled in modules: core.c prefork.c http_core.c mod_so.c
3.2 apachectl -l

    通过这条指令可以检查cache模块的加载情况,很不幸,默认是啥都没有。

4. KeepAlive

    我看到KeepAlive默认设置为On,KeepAliveTimeout默认是5秒。这个设置的含义时说,对于HTTP/1.1的客户端来说,将会尽量的保持客户的HTTP连接,通过一个连接传送多份HTTP请求<->响应。这样对于客户端来说,可以提高50%左右的响应时间,而对于服务端来说则降低了更多个连接的开销。不过这个依赖于客户端是否想保持连接。我知道IE默认是保持连接的,当你打开100个图片的网站时,IE好像只开2个连接,通过这两个连接传送数据,而不是开100个连接。KeepAliveTimeout时说这次连接结束后开始计时,如果5秒内没有重新发送HTTP请求,就断掉连接。这个值可以稍微大一点,但是不可太大,否则会出现同时等候过多的连接,导致过多限制资源,而使服务器性能下降。可以调调看。
0
相关文章