首頁  >  文章  >  運維  >  5個優化apache伺服器效能的技巧

5個優化apache伺服器效能的技巧

王林
王林轉載
2021-01-05 10:03:115178瀏覽

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的系统]

5個優化apache伺服器效能的技巧

#根據經驗,除非沒有其他方法,否則請堅持使用所選發行版的包管理器提供的更新方法(yum update httpd或aptitude safe-upgrade apache2,分別用於CentOS或Debian)。

二、如果您使用的是早於2.4的內核,請考慮立即升級

為什麼?核心版本2.4及更高版本預設啟用sendfile核心系統呼叫。反過來,這有助於高效能網路檔案傳輸(在Web伺服器- 客戶端通訊的上下文中需要),並透過執行同時讀取和發送操作,使Apache能夠更快地提供靜態內容並降低CPU利用率。

可以使用以下指令查看目前安裝的核心:

# uname -r

5個優化apache伺服器效能的技巧

#雖然這是一個不適合初學者的過程,但升級核心是一項有趣的練習,可以了解有關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。

5個優化apache伺服器效能的技巧

要更改此設置,您需要編輯:

/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.

LoadModule mpm_event_module modules/mod_mpm_event.

注意:要讓事件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 pache2 php5-fpm

#雖然您可以將Apache設定為使用特定的MPM,但可以按照前面所述的相同方式在每個虛擬主機的基礎上覆寫該配置。

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

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

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

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

5個優化apache伺服器效能的技巧

在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:

5個優化apache伺服器效能的技巧

这是我保存到名为的文件的PHP代码checkiffileexists.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

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

5個優化apache伺服器效能的技巧

正如您所看到的,带有事件的服务器的性能在此测试的每个方面都高于其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 - 我在此处使用事件继续前面提示中概述的概

5個優化apache伺服器效能的技巧

五、了解您的应用程序

根据经验,您不应加载任何非严格需要的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伺服器效能的技巧的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除