最近看到一个面试题,问apache工作模式,天可怜见,笔者我以前是真没注意过这个,汗颜路过。
所以在网上找了很多资料,就是对我们都很习惯的,剔除那些糟粕的一个过程,整理了一下,奇怪的是我在apache官网的FAQ上没有搜索到相关的问题。
默认的rpm包安装时apache默认使用的是Prefork的模式,
prefork模式通俗点说就是一个多进程单线程模式,一个进程只含有一个线程,它的缺点就是相对work模式非常占用内存,在流量非常大的服务器上可能会使用work模式,当然笔者认为这主要根据公司实际情况来看了,如果这个公司不是很缺钱访问量中等采用这个prefork完全可以,毕竟work那种模式的第三方模块的安全性能还不够好,这个仁者见仁,智者见智。
prefork下默认maxclients为256,如果要加大(一般我觉得都是要加大的)就要加上Serverlimit的限制:
ServerLimit最大200000 。
work模式就是多进程多线程,一个进程可以包含多个线程,而每个进程下的线程是共享内存的,缺点就是一个线程崩溃的话连带这个进程下的所有线程都会崩溃掉。
在这个work里边,threadlimit 默认为64,最大20000,如果你的环境中64个thread不能满足要求的话,就必须要加大,要用threadlimit来声明了,注意MaxClients必须是ThreadsPerChild的整数倍。
贴一个我的prefork的设置和work的设置:
prefork 例:
work 例: