本文共 5338 字,大约阅读时间需要 17 分钟。
profork模式实现了一种非线程、预派生的Web服务器,用的是进程去处理请求,所以比较容易消耗内存,但是稳定性好,某个进程出现问题不会影响到其他请求。
worker模式使用多个子进程,每个子进程有多个线程、由于使用的是线程去处理请求,消耗内存小,适合高流量的请求,但是如果某个进程出现问题,那么这个进程下的线程都会出现问题,即稳定性不是很好。
event模式为了解决keep-alive保持长连接出现的一种工作模式,使用keep-alive长连接的时候,某个线程会一直被占用,即使中间没有请求,需要等到超时才会被释放,所以这个时候就出现了event的工作模式。
- prefork模式使用多个子进程,每个子进程只有一个线程,每个进程在某个确定的时间只能维持一个连接;
- worker模式使用多个子进程,每个子进程有多个线程,每个线程在某个确定的时间只能维持一个连接,适用于高流量的HTTP服务器上;
总的来说,prefork方式速度要稍高于worker,但是prefork所需要的CPU和Memory资源也稍高于worker。
以下主要介绍prefork模式和worker模式
./configure \
--prefix=/usr/local/httpd \--enable-deflate \--with-mpm=prefork \ #选用prefork模式--enable-expires \--enable-so \--enable-rewrite \--enable-charset-lite \--enable-cgi
[root@localhost ~]# httpd -l
Compiled in modules:
core.cmod_so.chttp_core.cprefork.c #代表当前为prefork模式
[root@localhost ~]# lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 31239 root 3u IPv4 31675 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31240 daemon 3u IPv4 31675 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31241 daemon 3u IPv4 31675 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31242 daemon 3u IPv4 31675 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31243 daemon 3u IPv4 31675 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31244 daemon 3u IPv4 31675 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31491 daemon 3u IPv4 31675 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31508 daemon 3u IPv4 31675 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31511 daemon 3u IPv4 31675 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31543 daemon 3u IPv4 31675 0t0 TCP localhost.localdomain:http (LISTEN)
解释如下:有1个root用户运行的主进程,10个daemon用户运行的子进程。这里使用了prefork模式,采用了预派发的方式,10个子进程就是服务器启动时预先创建的,当有用户请求时,将直接使用已经创建好的子进程进行处理,可以减少创建子进程的时间,增加响应速度,预先创建多少个子进程由prefork的参数进行设置。
vim /etc/httpd.conf
#切换到软件目录下cd /usr/local/httpd/conf/extra/#编辑配置文件vim httpd-mpm.conf
prefork参数说明:
[root@localhost extra]# lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEhttpd 31588 root 3u IPv4 40709 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31589 daemon 3u IPv4 40709 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31590 daemon 3u IPv4 40709 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31591 daemon 3u IPv4 40709 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31592 daemon 3u IPv4 40709 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31593 daemon 3u IPv4 40709 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31594 daemon 3u IPv4 40709 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31595 daemon 3u IPv4 40709 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31596 daemon 3u IPv4 40709 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31597 daemon 3u IPv4 40709 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31598 daemon 3u IPv4 40709 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31599 daemon 3u IPv4 40709 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31600 daemon 3u IPv4 40709 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31601 daemon 3u IPv4 40709 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31602 daemon 3u IPv4 40709 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31603 daemon 3u IPv4 40709 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31604 daemon 3u IPv4 40709 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31605 daemon 3u IPv4 40709 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31606 daemon 3u IPv4 40709 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31607 daemon 3u IPv4 40709 0t0 TCP localhost.localdomain:http (LISTEN)httpd 31608 daemon 3u IPv4 40709 0t0 TCP localhost.localdomain:http (LISTEN)
这样启动Apache服务器时便创建了20个进程,说明配置成功了。
./configure \
--prefix=/usr/local/httpd \--enable-deflate \--with-mpm=worker \ #worker工作模式--enable-expires \--enable-so \--enable-rewrite \--enable-charset-lite \--enable-cgi
[root@localhost httpd-2.4.2]# httpd -l
Compiled in modules:
core.cmod_so.chttp_core.cworker.c #代表当前为worker模式
vim /etc/httpd.conf
#切换到软件目录下cd /usr/local/httpd/conf/extra/#编辑配置文件vim httpd-mpm.conf
[root@localhost httpd-2.4.2]# lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 47560 root 3u IPv4 50706 0t0 TCP localhost.localdomain:http (LISTEN)httpd 47561 daemon 3u IPv4 50706 0t0 TCP localhost.localdomain:http (LISTEN)httpd 47562 daemon 3u IPv4 50706 0t0 TCP localhost.localdomain:http (LISTEN)
worker参数说明:
具体参数调优这需要对服务器进行负载压力测试后才能确保服务器稳定的基础上实现最高的性能。
常用的性能测试工具有以下几种:ab、http_load、webbench、siege。ab是Apache自带的压力测试工具,非常实用,可以模拟多线程并发请求,测试服务器的负载压力。
在性能调整优化过程中,优化前先使用ab进行压力测试,优化后再进行压力了测试,对比两次测试的结果,看优化效果是否明显,再决定是否启用优化方案。
转载于:https://blog.51cto.com/10316297/2141907