Apache服务器性能调优

2017-03-23 00:53:34 5787

Apache服务器性能调优


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

工具



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

echo [PID]  [MEM]  [PATH] &&  ps aux | awk '{print $2, $4, $11}' | sort -k2rn | head -n 20

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)

<Location /server-status>
  SetHandler server-status
  Order Deny,Allow
  Deny from all
  Allow from localhost
</Location>

3.Apache mod_status还提供了一个名为ExtendedStatus的选项,该选项提供有关向Apache发送的每个请求的额外信息。 要启用ExtendedStatus编辑您的Apache配置文件:

/etc/apache2/apache2.conf (Debian/Ubuntu)

/etc/httpd/confd/httpd.conf (CentOS/Fedora)

ExtendedStatus On

4.重启Apache

Debian/Ubuntu:

service apache2 restart

CentOS/Fedora:

/bin/systemctl reload httpd.service

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

Debian/Ubuntu:

apt-get install lynx

Fedora/CentOS:

yum install lynx

6.查看状态页

lynx http://www.landui.com/server-status


Apache2Buddy

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

curl -L http://www.landui.com/ | 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配置如下:

<IfModule mpm_prefork_module>
    StartServers          4
    MinSpareServers       20
    MaxSpareServers      40
    MaxClients           200
    MaxRequestsPerChild  4500
</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:

ps -ylC httpd --sort:rss

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

free -m

提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: