优化apache服务器性能的五种技巧:
一、始终将Apache更新到其最新版本
毫无疑问,安装最新版本的Apache可能是您需要考虑的第一件事。截至2015年11月19日,CentOS 7存储库中最新版本的Apache 为2.4.6,而Debian中的最新版本为2.4.10。
但是,最近可能会有一个改进或错误修复添加到新发布的稳定版本中,然后可以从源代码下载和安装。此处还提供了编译和安装说明- 请记住,如果选择此更新方法,则可能需要备份当前配置文件/站点/虚拟主机作为预防措施。
可以按如下方式检查当前安装的版本:
# httpd -v [基于RedHat / CentOS的系统] # apache2 -v [基于Debian / Ubuntu的系统]根据经验,除非没有其他方法,否则请坚持使用所选发行版的包管理器提供的更新方法(yum update httpd或者aptitude safe-upgrade apache2,分别用于CentOS或Debian)。
二、如果您使用的是早于2.4的内核,请考虑立即升级
为什么?内核版本2.4及更高版本默认启用sendfile内核系统调用。反过来,这有助于高性能网络文件传输(在Web服务器 - 客户端通信的上下文中需要),并通过执行同时读取和发送操作,使Apache能够更快地提供静态内容并降低CPU利用率。
可以使用以下命令查看当前安装的内核:
# uname -r虽然这是一个不适合初学者的过程,但升级内核是一项有趣的练习,可以了解有关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。
要更改此设置,您需要编辑:
/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后所看到的:
在CentOS 7中,您需要确保通过防火墙启用了http和https服务,并且网络接口已正确添加到默认区域。
例如:
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。