5个优化apache服务器性能的技巧

5个优化apache服务器性能的技巧

下面是优化apache服务器性能的五种技巧:

(学习视频分享:编程视频)

一、始终将Apache更新到其最新版本

毫无疑问,安装最新版本的Apache可能是您需要考虑的第一件事。截至2015年11月19日,CentOS 7存储库中最新版本的Apache 为2.4.6,而Debian中的最新版本为2.4.10。
但是,最近可能会有一个改进或错误修复添加到新发布的稳定版本中,然后可以从源代码下载和安装。此处还提供了编译和安装说明- 请记住,如果选择此更新方法,则可能需要备份当前配置文件/站点/虚拟主机作为预防措施。

可以按如下方式检查当前安装的版本:

# httpd -v [基于RedHat / CentOS的系统]
# apache2 -v [基于Debian / Ubuntu的系统]

4a6af309c695a60b7d23cc10e3c4b7a.png

根据经验,除非没有其他方法,否则请坚持使用所选发行版的包管理器提供的更新方法(yum update httpd或者aptitude safe-upgrade apache2,分别用于CentOS或Debian)。

二、如果您使用的是早于2.4的内核,请考虑立即升级

为什么?内核版本2.4及更高版本默认启用sendfile内核系统调用。反过来,这有助于高性能网络文件传输(在Web服务器 - 客户端通信的上下文中需要),并通过执行同时读取和发送操作,使Apache能够更快地提供静态内容并降低CPU利用率。

可以使用以下命令查看当前安装的内核:

# uname -r

cc81b2ae7f95ae2a346725883f0049a.png

虽然这是一个不适合初学者的过程,但升级内核是一项有趣的练习,可以了解有关Linux内部的更多信息。

三、选择最适合您情况的多处理模块(MPM)

实际上,MPM通过允许您决定如何配置Web服务器以绑定到计算机上的网络端口,接受来自客户端的请求以及使用子进程(以及线程,或者)来处理此类请求,从而扩展了Apache的模块化功能。

从版本2.4开始,Apache提供三种不同的MPM供您选择,具体取决于您的需求:

该preforkMPM使用多个子进程,不必穿线。每个进程一次处理一个连接,而不为每个进程创建单独的线程。在没有详细说明的情况下,我们可以说,只有在调试使用或者应用程序需要处理非线程安全模块(如mod_php)的应用程序时,才会使用此MPM。
该workerMPM使用每个子进程,每个线程处理一次一个连接多个线程。对于高流量服务器来说,这是一个不错的选择,因为它允许使用比前一种情况更少的RAM来处理更多的并发连接。
最后,eventMPM是2.4版及更高版本的大多数Apache安装中的默认MPM。它类似于worker MPM,它还为每个子进程创建多个线程但有一个优点:它导致KeepAlive或空闲连接(当它们保持在该状态时)由单个线程处理,从而释放可以释放的内存被分配给其他线程。此MPM不适合与非线程安全模块(如mod_php)一起使用,必须使用替换此类PHP-FPM。

要检查Apache安装使用的MPM,您可以执行以下操作:

# httpd -V

下图显示此特定Web服务器正在使用prefork MPM。

47d424ef608413d6d8a6ac8b926f112.png

要更改此设置,您需要编辑:

/etc/httpd/conf.modules.d/00-mpm.conf [基于RedHat / CentOS的系统]
/etc/apache2/mods -available/ load [基于Debian / Ubuntu的系统]

其中可以是mpm_event,mpm_worker或mpm_prefork。

并取消注释加载所需模块的行,如下所示:

#LoadModule mpm_event_module modules/mod_mpm_event.so
修改为:
LoadModule mpm_event_module modules/mod_mpm_event.so

注意:要使事件MPM在Debian中工作,您可能必须从非自由存储库安装libapache2-mod-fastcgi包。

另外,对于CentOS,你需要php-fpm(以及fcgi和mod_fcgid),而在Debian中它叫做php5-fpm(和apache2-mpm-event一起)。

最后,但并非最不重要的是,重新启动Web服务器和新安装的php-fpm(或php5-fpm)服务:

在RedHat / CentOS上

# systemctl restart httpd php-fpm && systemctl enable httpd php-fpm

在Debian / Ubuntu上

# systemctl restart apache2 php5-fpm && systemctl enable apache2 php5-fpm

虽然您可以将Apache设置为使用特定的MPM,但可以按照前面所述的相同方式在每个虚拟主机的基础上覆盖该配置。

只需将相应的标签放入每个虚拟主机的配置文件中即可开始使用 - 但请确保每个虚拟主机使用一个且只有一个MPM。

最后,请注意,无论您选择的发行版如何,php-fpm都依赖于FastCGI的实现,这就是为什么我之前推荐了额外的软件包安装的原因。

有关php-fpm的更多详细信息和示例以及它如何与事件MPM一起提高Apache的性能,您应该参考官方文档。

这是我在上一张图片所示的同一个框中将默认MPM从prefork更改为event后所看到的:

319a59fb7c65dd1d63610e03ed28e9b.png

在CentOS 7中,您需要确保通过防火墙启用了http和https服务,并且网络接口已正确添加到默认区域。

例如:

# firewall-cmd --zone = internal --add-interface = tun6to4
# firewall-cmd --zone = internal --add-interface = tun6to4 --permanent
# firewall-cmd --set-default-zone = internal
# firewall-cmd --add-service = http
# firewall-cmd --add-service = https
# firewall-cmd --add-service = http --permanent
# firewall-cmd --add-service = https --permanent
# firewall-cmd --reload

我提出这个问题的原因是因为我最近遇到了一个问题,即云VPS 中的默认firewalld配置设置阻止了php-fpm和Apache处理php文件。

作为一个基本的测试(我相信你可以想到更复杂或更紧张的),我将创建一个php文件,检查是否存在另外test.php两个CentOS 7服务器的同一目录中具有相同硬件特性和负载的文件但是与不同的MPM。其中一个将使用事件,另一个将使用prefork:

e47b3221c26dda3fa3e299b9c82ea55.png

这是我保存到名为的文件的PHP代码checkiffileexists.php:

<?PHP
$ filename =‘test.php’;
if(file_exists($ filename)){
echo“文件$ filename存在”;
} else {
echo“文件$ filename不存在”;
}
?>

然后我们将运行Apache基准测试工具(ab),同时发出200个请求,直到2000个请求完成:

# ab -k -c 100 -n 2000 localhost/checkiffileexists.php

让我们运行测试并比较结果。注意性能统计:

d0d45fd99cb7fee1d577cdbdd766a1c.png

正如您所看到的,带有事件的服务器的性能在此测试的每个方面都高于其prefork对应物。

四、明智地为Apache分配RAM

也许最重要的硬件项是要为每个Apache进程分配的RAM量。虽然您无法直接控制它,但您可以通过MaxRequestWorkers指令(以前在Apache 2.2中称为MaxClients)限制子进程的数量,这将限制Apache对RAM的使用。同样,您可以在每个主机或每个虚拟主机的基础上设置此值。

要做到这一点,你应该注意Apache使用的平均RAM量,然后乘以MaxRequestWorkers的数量,这就是为Apache进程分配的内存量。您从不希望Web服务器做的一件事是开始使用swap,因为这会显着降低其性能。因此,您应始终将Apache的RAM使用限制在您能够承受的范围内,并且永远不要依赖交换。

例如,以下块将同时客户端的数量限制为30。如果有更多客户端访问主机,他们可能会遇到延迟或暂时故障,可以通过刷新浏览器轻松解决。虽然这可能被认为是不合需要的,但它对于服务器来说更健康,从长远来看,对您的网站也是最好的。

您可以将此块放在内部,/etc/httpd/conf/httpd.conf或者/etc/apache2/apache2.conf取决于您使用的是CentOS还是Debian。

请注意,同样的原则适用于所有MPM - 我在此处使用事件继续前面提示中概述的概

c4f7572390cdefb5d82faef55557ce2.png

五、了解您的应用程序

根据经验,您不应加载任何非严格需要的Apache模块才能运行。这至少需要了解服务器上运行的应用程序的全部知识,特别是如果您是系统管理员并且还有另一个负责开发的团队。

您可以列出当前加载的模块:

# httpd -M [基于RedHat / CentOS的系统]
# apache2ctl -M [基于Debian / Ubuntu的系统]

要卸载/禁用CentOS中的模块,您需要注释掉以LoadModule开头的行(在主配置文件中或在/etc/httpd/conf.modules.d中的辅助文件中)。

另一方面,Debian提供了一个名为a2dismod的工具来禁用模块,其用法如下:

# a2dismod module_name

要启用它:

# a2enmod module_name

在任何一种情况下,请记住重新启动Apache以使更改生效。

总结
在本文中,我们回顾了5个技巧,这些技巧将帮助您调整Apache Web服务器并提高其性能。此外,您应该记住,没有安全性的优化和性能是没有意义的,因此您可能需要参考安装mod_pagespeed来改进Web服务器性能以及Tecmint.com中的Apache强化技巧文章。

相关推荐:apache教程

以上就是5个优化apache服务器性能的技巧的详细内容,更多请关注其它相关文章!