今天继续给大家介绍Linux运维的相关知识,本文主要内容是Apache的Prefork模式调优实战。
一、Apache Prefork模式详解
Apache服务的运行,有三种模式,Prefork是一种常见的方式,在默认情况下,源码安装后的Apache服务就是工作于Prefork模式下。
Prefork模式实现了一个预派生进程的工作方式,在Apache启动时,就预先创建一些进程,然后等待客户端链接,这样可以减少进程的创建和销毁带来的系统开销。Prefork模式下,每个进程仅有一个子线程,在同一时间内,一个进程只能处理一个请求。因此,Prefork模式相对成熟稳定,可以兼容新老模块,也不需要担心线程安全问题。但是,也正由此导致了Prefork工作模式会占用更多的系统资源,在高并发场景下处理能力较弱。
二、Apache Prefork查看
可以通过执行命令:
/usr/local/httpd/bin/httpd -M | grep prefork
1
来查看Apache所处的工作模式。在使用Prefork模式下,Apache服务的主配置文件中Prefork模块一定会被打开,如下所示:
为了对Prefork工作模式进行优化,我们必须找到如下红线部分的内容:
在conf/extra目录下,存在一个httpd-mpm.conf文件,在该文件中会存在对Apache三种模式的详细配置,因此,我们要对Apache的Prefork模式进行调优,就必须找到该处,删除#,使得在Apache的主配置文件中,引用该httpd-mpm.conf配置文件。
三、Apache Prefork性能优化
打开httpd-default.conf配置文件,可以看到Prefork模式的配置模块,如下所示:
Prefork模式的配置有几个参数,参数及作用如下:
ServerLimit:最大的进程数
StartServers:启动Apache服务时,默认开启的进程数,Apache主进程在启动后,会以第一秒1个进程,第二秒2个进程,第三秒4个进程……的指数形势递增,直至达到默认开启的进程数,但是,最大每秒新增32个。
MinSpareServer:最小的空闲进程数,所谓空闲进程是指没有链接的进程,该值得适当设置,可以使得有突发流量时,系统可以有一定的缓冲时间,不至于因为新建进程的时间而导致无法响应客户端的请求,但是该值设置的太大又会使得系统资源造成不必要的消耗。
MaxSpareServer:最大的空闲进程数,该值得设置可以避免系统资源的过渡消耗。
MaxRequestWorkers:最大的并发进程数,当客户端的请求达到该数值后,有新的请求时,会加入到缓存队列,而不会立即处理。该值通常和ServerLimit相等。
MaxRequestsPerChild:一个进程所能够进行链接的最大数,当一个进程处理的请求总数超出该值时,该进程的父进程会杀死该进程。当该值为0时,表示一个进程能够进行链接数量不受限制。
我们修改上述值得设置如下所示:
并重启Apache服务。查看Apache服务的进程如下所示:
可以看出,Apache在启动后,一共生成了8个子进程,我们的配置生效。
四、Apache Prefork参数配置
尽管我们知道了上述参数的作用,但是在具体生产环境中,对Apache参数的配置还是需要根据业务场景来进行选择。一般而言,一个进程需要消耗的内存为1.6M左右,因此,我们就可以通过这个数据来计算配置的最大链接数。假设系统有32G的内存,留给服务器系统消耗1G,其余的内存分配给Apache,则Apache可用的内存空闲大小为15G,15G/1.6M=960个,因此,可以将系统的最大链接数设置为960。其余参数可以根据实际情况进行设置。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_40228200/article/details/122654006