Apache服务器性能调优

有运维或运维开发方面的需求,可以联系博主QQ 452336092或Email:admin#centos.bz(收费)

文章目录
[隐藏]

Apache配置对您的服务器的性能有重大影响。 提高服务器性能的最简单方法是关闭不需要的模块。 本指南涵盖Apache模块,关闭哪些模块以及其他Apache性能调整选项。

工具


有多种工具可以帮助确定是否需要更改资源设置,包括top命令和负载测试程序Siege。 使用以下命令查看使用统计信息

  1. echo [PID]  [MEM]  [PATH] &&  ps aux | awk '{print $2, $4, $11}' | sort -k2rn | head -n 20
  2. ps -eo pcpu,pid,user,args | sort -k 1 -r | head -20

更详细用于帮助了解Apache资源使用情况的工具包括Apache mod_status和Apache2Buddy。

Apache mod_status


Apache mod_status通过生成详细的状态页面来显示与入站服务器连接相关的信息。示例如下:
1.打开您的网站的配置文件。 此文件位于Debian / Ubuntu系统上的/etc/apache2/sites-available/example.com.conf或CentOS / Fedora系统上的/etc/httpd/conf.d/vhost.conf。
2.将以下内容添加到块中:
/etc/apache2/sites-available/example.com.conf (Debian/Ubuntu)
/etc/httpd/conf.d/vhost.conf (CentOS/Fedora)

  1. <Location /server-status>
  2.   SetHandler server-status
  3.   Order Deny,Allow
  4.   Deny from all
  5.   Allow from localhost
  6. </Location>

3.Apache mod_status还提供了一个名为ExtendedStatus的选项,该选项提供有关向Apache发送的每个请求的额外信息。 要启用ExtendedStatus编辑您的Apache配置文件:
/etc/apache2/apache2.conf (Debian/Ubuntu)
/etc/httpd/confd/httpd.conf (CentOS/Fedora)

  1. ExtendedStatus On

4.重启Apache
Debian/Ubuntu:

  1. service apache2 restart

CentOS/Fedora:

  1. /bin/systemctl reload httpd.service

5.要查看生成的文件,请下载Lynx:
Debian/Ubuntu:

  1. apt-get install lynx

Fedora/CentOS:

  1. yum install lynx

6.查看状态页

  1. lynx http://localhost/server-status

Apache2Buddy


Apache2Buddy脚本与MySQLTuner类似,它检查您的Apache设置,并根据您的Apache进程内存和总体RAM提出建议。 虽然它是一个相当基本的程序,专注于MaxClients指令,不过Apache2Buddy相当有用,可以通过单个命令运行:

  1. curl -L http://apache2buddy.pl/ | perl

多处理模块


Apache提供两个多处理模块,三个(如果在Apache 2.4上),用于管理您的设置。
每个模块创建子进程,主要区别在于它们如何处理线程。

Prefork

prefork模块在启动时创建多个子进程,每个子进程只处理一个线程。 由于这些进程一次只处理一个线程,因此如果有太多的并发请求,请求速度就会受到影响。 如果发生这种情况,一些请求基本上必须等待处理。 要处理此问题,请增加生成的子进程数,但请注意,这会增加RAM使用量。 Prefork是最安全的模块,当使用不是线程安全的模块时使用。

Worker

Worker模块的子进程在每个进程中生成许多线程,每个线程都能处理请求。 这提升了服务器的并发能力,当然也能减少服务器内存使用量。 总的来说,工作模块提供了更高的性能,但是比prefork安全性更低,不能与不是线程安全的模块一起使用。

Event

Event模块仅在Apache 2.4上可用,并且基于Worker MPM。 和Worker一样,它为每个子进程创建多个线程,一个线程专用于KeepAlive连接,一旦请求发出,它就传递给子线程。 这对于多个并发连接很有用,特别是那些不是同时处于活动状态但却偶尔请求的连接。 在SSL连接的情况下,Event MPM的作用与Worker相同。

模块配置

一旦选择了MPM,您需要更改配置中的值。 这些设置位于Debian / Ubuntu上的/etc/apache2/apache2.conf文件和CentOS / Fedora上的/etc/httpd/conf/httpd.conf文件。 MPM配置如下:

  1. <IfModule mpm_prefork_module>
  2.     StartServers          4
  3.     MinSpareServers       20
  4.     MaxSpareServers      40
  5.     MaxClients           200
  6.     MaxRequestsPerChild  4500
  7. </IfModule>

对于其他MPM,分别将替换为以使用Worker和Event。
重新配置Apache服务器的下一步是更改上述设置。 要做到这一点,你需要知道每个值的作用,以及如何更好地调节它。
同样,进行配置更改的最佳方法是进行增量更改,然后监视效果。

StartServers

StartServers值指示启动时创建的子进程数,并根据负载进行动态控制。 通常没有理由更改此数字,除非您的服务器频繁重新启动,并在重新启动时接收大量请求。

MinSpareServers

设置空闲子进程的最小数量。 如果进程数少于MinSpareServer数,则会在Apache 2.2或更低版本上以每秒一个的速率创建更多进程。 使用Apache 2.4,此速率呈指数增长,从1开始到每秒生成32个子进程。 这个值的作用是,当收到一个新请求时,它可以直接使用空闲线程而不需要新生成一个; 如果已经没有可用线程了,Apache会新生成一个子进程,不过这会消耗服务器资源以及延长请求处理时间。 注意,太多的空闲进程也会对服务器产生不利影响。

MaxSpareServers

设置空闲子进程的最大数量。 如果空闲进程超出这个值,多余的将会终止。 除非您的网站非常繁忙,否则此数字不应设置过高,因为即使空闲进程也会消耗资源。

MaxClients

可同时提供的最大请求数量,请求数超过限制时后来的请求将入队列。 如果这个设置太低,队列中的连接可能会超时; 但是,如果设置过高,则会导致内存不足出现swap。 如果此值增加超过256,则还必须增加ServerLimit值。
计算最佳值的一种方法是用服务器可用内存除以每个Apache进程使用的内存量,注意要为其他进程留出一些内存空间。 使用ApacheBuddy帮助确定这些值,或下面的命令。
要确定每个Apache进程使用的RAM,请在Debian或Ubuntu系统上将apache2替换为httpd:

  1. ps -ylC httpd --sort:rss

除以1024转为Mb
获取内存使用信息:

  1. free -m

转载请保留原文链接:Linux运维日志 » Apache服务器性能调优

打赏

如果此文对你有所帮助,请随意打赏鼓励作者^_^