Apache2.x的MPM分析:
MPM (Multi-processing Module):相对于apache1.x的版本,性能上提升最显著的改进。
apache的编译选项中可以看到下面一些MPM的种类:
--with-mpm=MPM Choose the process model for Apache to use.
MPM={beos|worker|prefork|mpmt_os2|perchild|leader|threadpool}
常用的应该就只有3个:worker|prefork|perchild
prefork:在功能上就是使用Apache的运行方式,一个父进程,然后根据设置以及连接情况生成相应的子进程数。这种模式可靠性和健壮性都是最好的。但是在性能上,开销过大。达不到我们这些“吸血鬼”的要求了^_^。如果连接数过多的话,会导致我们无法远程登陆,一定要等到连接数下降后才能连接,这也是最让我头痛的事情。 worker:混合线程/进程的MPM。一个父进程,后面是带有线程的子进程。每个子进程的线程数是固定且相同的。这是最“平庸”的一个模式,但也是使用人最多的一种模式。因为它性能等各方面比较均衡。性能上要比prefork好一些,只是牺牲了一点点的健壮性和可靠性而已。一般推荐使用这个选项。 perchild:也是混合线程/进程的MPM。当启动perchild MPM时,它会建立指定数量的子进程,且每个子进程都具有指定数量的线程,如负载增加了,那它不会建立新的进程(子进程是固定的),只是在子进程下建立新的线程。它还有一个特点就是可以为每一个子进程配置不同的用户和组。也可以为每个虚拟主机指定一个子进程。这种模式性能是最佳的,但是可靠性和健壮性就相对是最差的。各取所需,我个人觉得这种模式也不错,如果你不用第三方的模块的话^_^。 注:其他的模式我个人没有接触,因此说不出他们的区别和特点。上面说的最佳和最差仅在这3种模式中做比较。水平有限,如有错误,欢迎一起讨论指正!!!