合理设置apache的连接数及进程工作方式
生活随笔
收集整理的這篇文章主要介紹了
合理设置apache的连接数及进程工作方式
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
網(wǎng)站在線人數(shù)增多,訪問時很慢。初步認為是服務(wù)器資源不足了,但經(jīng)反復(fù)測試,一旦連接上,不斷點擊同一個頁面上不同的鏈接,都能迅速打開,這種現(xiàn)象就是說明apache最大連接數(shù)已經(jīng)滿了,新的訪客只能排隊等待有空閑的鏈接,而如果一旦連接上,在keeyalive 的存活時間內(nèi)(KeepAliveTimeout,默認5秒)都不用重新打開連接,因此解決的方法就是加大apache的最大連接數(shù)。
1.在哪里設(shè)置
服務(wù)器的為FreeBSD 6.2 ,apache 2.24,使用默認配置(FreeBSD 默認不加載自定義MPM配置),默認最大連接數(shù)是250
在/usr/local/etc/apache22/httpd.conf中加載MPM配置(去掉前面的注釋):
# Server-pool management (MPM specific)
Include etc/apache22/extra/httpd-mpm.conf
可見的MPM配置在/usr/local/etc/apache22/extra/httpd-mpm.conf,但里面根據(jù)httpd的工作模式分了很多塊,哪一部才是當(dāng)前httpd的工作模式呢?可通過執(zhí)行 apachectl -l 來查看:
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
看到prefork,因此可見當(dāng)前httpd應(yīng)該是工作在prefork模式,prefork模式的默認配置是:
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
2.要加到多少
連接數(shù)理論上當(dāng)然是支持越大越好,但要在服務(wù)器的能力范圍內(nèi),這跟服務(wù)器的CPU、內(nèi)存、帶寬等都有關(guān)系。
查看當(dāng)前的連接數(shù)可以用:
ps aux | grep httpd | wc -l
或:
pgrep httpd|wc -l
計算httpd占用內(nèi)存的平均數(shù):
ps aux|grep -v grep|awk '/httpd/{sum+=$6;n++};END{print sum/n}'
由于基本都是靜態(tài)頁面,CPU消耗很低,每進程占用內(nèi)存也不算多,大約200K。服務(wù)器內(nèi)存有2G,除去常規(guī)啟動的服務(wù)大約需要500M(保守估計),還剩1.5G可用,那么理論上可以支持1.5*1024*1024*1024/200000 = 8053.06368
約8K個進程,支持2W人同時訪問應(yīng)該是沒有問題的(能保證其中8K的人訪問很快,其他的可能需要等待1、2秒才能連上,而一旦連上就會很流暢)控制最大連接數(shù)的MaxClients ,因此可以嘗試配置為:
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 5500
MaxClients 5000
MaxRequestsPerChild 100
注意,MaxClients默認最大為250,若要超過這個值就要顯式設(shè)置ServerLimit,且ServerLimit要放在MaxClients之前,值要不小于MaxClients,不然重啟httpd時會有提示。
重 啟httpd后,通過反復(fù)執(zhí)行pgrep httpd|wc -l 來觀察連接數(shù),可以看到連接數(shù)在達到MaxClients的設(shè)值后不再增加,但此時訪問網(wǎng)站也很流暢,那就不用貪心再設(shè)置更高的值了,不然以后如果網(wǎng)站訪問突增不小心就會耗光服務(wù)器內(nèi)存,可根據(jù)以后訪問壓力趨勢及內(nèi)存的占用變化再逐漸調(diào)整,直到找到一個最優(yōu)的設(shè)置值。
(MaxRequestsPerChild不能設(shè)置為0,可能會因內(nèi)存泄露導(dǎo)致服務(wù)器崩潰)
更佳最大值計算的公式:
apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memory_per_process ) * 2
apache_max_process = apache_max_process_with_good_perfermance * 1.5
附:
實時檢測HTTPD連接數(shù):
watch -n 1 -d "pgrep httpd|wc -l"
持久連接
一 個客戶機連接到 Web 服務(wù)器時,允許客戶機通過同一個 TCP 連接發(fā)出多個請求,這減少了與多個連接相關(guān)的延遲。在一個 Web 頁面引用了多幅圖片時,這就很有用:客戶機可以通過一個連接先請求頁面,再請求所有圖片。其缺點在于服務(wù)器上的 worker 進程必須等待客戶機要關(guān)閉的會話,之后才能轉(zhuǎn)到下一個請求。
Apache 使您能夠配置如何處理持久連接(稱為 keepalives),httpd.conf 全局級的 KeepAlive 5 允許服務(wù)器在連接強制關(guān)閉之前處理一個連接上的 5 個請求。將此值設(shè)置為 0 將禁用持久連接。同樣位于全局級上的 KeepAliveTimeout 確定在會話關(guān)閉之前,Apache 將等待另外一個連接多久。
持久連接的處理并非 “一刀切” 式的配置。對于某些 Web 站點,禁用 keepalives 更合適(KeepAlive 0);而對于其他一些站點,啟用它會帶來巨大的收益。惟一的解決之道就是嘗試使用這兩種配置,自己觀察哪種更合適。但若啟用了 keepalives,使用較小的超時時間較為明智,例如 2,即 KeepAliveTimeout 2。這能確保希望發(fā)出另外一個請求的客戶機有充足的時間,還能確保 worker 進程不會一直空閑,等待可能永遠不會出現(xiàn)的下一個請求。
壓縮
Web 服務(wù)器能夠在將輸出發(fā)回給客戶機之前壓縮它。這將使通過 Internet 發(fā)送的頁面更小,代價是 Web 服務(wù)器上的 CPU 周期。對于那些負擔(dān)得起 CPU 開銷的服務(wù)器來說,這是提高頁面下載速度的好辦法 —— 頁面壓縮后大小變?yōu)樵瓉淼娜种贿@種事情并不罕見。
圖片通常已經(jīng)是壓縮過的,因此壓縮應(yīng)僅限于文本輸出。Apache 通過 mod_deflate 提供壓縮。盡管 mod_deflate 可輕松啟用,但它涉及到太多的復(fù)雜性,很多手冊都解釋了這些復(fù)雜的內(nèi)容。本文不會介紹壓縮的配置,但提供了相應(yīng)文檔的鏈接。
調(diào)優(yōu)PHP
PHP 是運行應(yīng)用程序代碼的引擎。應(yīng)該僅安裝計劃使用的那些模塊,并配置您的 Web 服務(wù)器,使之僅為腳本文件(通常是以 .php 結(jié)尾的那些文件)使用 PHP,而非所有靜態(tài)文件。
操作碼緩存
請 求一個 PHP 腳本時,PHP 會讀取該腳本,并將其編譯為 Zend 操作碼,這是要執(zhí)行的代碼的一種二進制表示形式。隨后,此操作碼由 PHP 執(zhí)行并丟棄。操作碼緩存將保存這個編譯后的操作碼,并在下一次調(diào)用該頁面時重用它。這會節(jié)省很多時間。有多種緩存可用,我比較常用的是 eAccelerator。
要安裝 eAccelerator,您的計算機上需要有 PHP 開發(fā)庫。由于不同的 Linux 發(fā)布版存放文件的位置不同,所以最好直接從 eAccelerator 的 Web 站點獲得安裝說明(參見 參考資料部分獲得鏈接)。您的發(fā)布版也有可能已經(jīng)包含了一個操作碼緩存,只需安裝即可。
無論如何在系統(tǒng)上安裝 eAccelerator,都有一些配置選項需要注意。配置文件通常是 /etc/php.d/eaccelerator.ini。eaccelerator.shm_size 定義共享高速緩存的大小,編譯后的腳本就存儲在這里。該值的單位是兆字節(jié)(MB)。根據(jù)您的應(yīng)用程序確定恰當(dāng)?shù)拇笮 Accelerator 提供了一個腳本來顯示緩存的狀態(tài),其中包含內(nèi)存占用,64MB 是個不錯的選擇(eaccelerator.shm_size="64")。如果您選擇的值未被接受,那么必須修改內(nèi)核的最大共享內(nèi)存的大小。向 /etc/sysctl.conf 添加 kernel.shmmax=67108864,運行 sysctl -p 來使設(shè)置生效。kernel.shmmax 值的單位是字節(jié)。
如果共享內(nèi)存的分配超出極限,eAccelerator 必須將舊腳本從內(nèi)存中清除。默認情況下,這是被禁用的;eaccelerator.shm_ttl = "60" 指定:當(dāng) eAccelerator 用完共享內(nèi)存時,60 秒內(nèi)未被訪問的所有腳本都將被清除。
另一種流行的 eAccelerator 替代工具是 Alternative PHP Cache(APC)。Zend 的廠商也提供了一種商業(yè)操作碼緩存,包括一個進一步提高效率的優(yōu)化器。
php.ini
PHP 的配置是在 php.ini 中完成的。四個重要的設(shè)置控制 PHP 可使用多少系統(tǒng)資源,如表 1 所列。
表 1. php.ini 中與資源相關(guān)的設(shè)置設(shè)置 描述 建議值
max_execution_time 一個腳本可使用多少 CPU 秒 30
max_input_time 一個腳本等待輸入數(shù)據(jù)的時間有多長(秒) 60
memory_limit 在被取消之前,一個腳本可使用多少內(nèi)存(字節(jié)) 32M
output_buffering 數(shù)據(jù)發(fā)送給客戶機之前,有多少數(shù)據(jù)(字節(jié))需要緩存 4096
1.在哪里設(shè)置
服務(wù)器的為FreeBSD 6.2 ,apache 2.24,使用默認配置(FreeBSD 默認不加載自定義MPM配置),默認最大連接數(shù)是250
在/usr/local/etc/apache22/httpd.conf中加載MPM配置(去掉前面的注釋):
# Server-pool management (MPM specific)
Include etc/apache22/extra/httpd-mpm.conf
可見的MPM配置在/usr/local/etc/apache22/extra/httpd-mpm.conf,但里面根據(jù)httpd的工作模式分了很多塊,哪一部才是當(dāng)前httpd的工作模式呢?可通過執(zhí)行 apachectl -l 來查看:
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
看到prefork,因此可見當(dāng)前httpd應(yīng)該是工作在prefork模式,prefork模式的默認配置是:
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
2.要加到多少
連接數(shù)理論上當(dāng)然是支持越大越好,但要在服務(wù)器的能力范圍內(nèi),這跟服務(wù)器的CPU、內(nèi)存、帶寬等都有關(guān)系。
查看當(dāng)前的連接數(shù)可以用:
ps aux | grep httpd | wc -l
或:
pgrep httpd|wc -l
計算httpd占用內(nèi)存的平均數(shù):
ps aux|grep -v grep|awk '/httpd/{sum+=$6;n++};END{print sum/n}'
由于基本都是靜態(tài)頁面,CPU消耗很低,每進程占用內(nèi)存也不算多,大約200K。服務(wù)器內(nèi)存有2G,除去常規(guī)啟動的服務(wù)大約需要500M(保守估計),還剩1.5G可用,那么理論上可以支持1.5*1024*1024*1024/200000 = 8053.06368
約8K個進程,支持2W人同時訪問應(yīng)該是沒有問題的(能保證其中8K的人訪問很快,其他的可能需要等待1、2秒才能連上,而一旦連上就會很流暢)控制最大連接數(shù)的MaxClients ,因此可以嘗試配置為:
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 5500
MaxClients 5000
MaxRequestsPerChild 100
注意,MaxClients默認最大為250,若要超過這個值就要顯式設(shè)置ServerLimit,且ServerLimit要放在MaxClients之前,值要不小于MaxClients,不然重啟httpd時會有提示。
重 啟httpd后,通過反復(fù)執(zhí)行pgrep httpd|wc -l 來觀察連接數(shù),可以看到連接數(shù)在達到MaxClients的設(shè)值后不再增加,但此時訪問網(wǎng)站也很流暢,那就不用貪心再設(shè)置更高的值了,不然以后如果網(wǎng)站訪問突增不小心就會耗光服務(wù)器內(nèi)存,可根據(jù)以后訪問壓力趨勢及內(nèi)存的占用變化再逐漸調(diào)整,直到找到一個最優(yōu)的設(shè)置值。
(MaxRequestsPerChild不能設(shè)置為0,可能會因內(nèi)存泄露導(dǎo)致服務(wù)器崩潰)
更佳最大值計算的公式:
apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memory_per_process ) * 2
apache_max_process = apache_max_process_with_good_perfermance * 1.5
附:
實時檢測HTTPD連接數(shù):
watch -n 1 -d "pgrep httpd|wc -l"
持久連接
一 個客戶機連接到 Web 服務(wù)器時,允許客戶機通過同一個 TCP 連接發(fā)出多個請求,這減少了與多個連接相關(guān)的延遲。在一個 Web 頁面引用了多幅圖片時,這就很有用:客戶機可以通過一個連接先請求頁面,再請求所有圖片。其缺點在于服務(wù)器上的 worker 進程必須等待客戶機要關(guān)閉的會話,之后才能轉(zhuǎn)到下一個請求。
Apache 使您能夠配置如何處理持久連接(稱為 keepalives),httpd.conf 全局級的 KeepAlive 5 允許服務(wù)器在連接強制關(guān)閉之前處理一個連接上的 5 個請求。將此值設(shè)置為 0 將禁用持久連接。同樣位于全局級上的 KeepAliveTimeout 確定在會話關(guān)閉之前,Apache 將等待另外一個連接多久。
持久連接的處理并非 “一刀切” 式的配置。對于某些 Web 站點,禁用 keepalives 更合適(KeepAlive 0);而對于其他一些站點,啟用它會帶來巨大的收益。惟一的解決之道就是嘗試使用這兩種配置,自己觀察哪種更合適。但若啟用了 keepalives,使用較小的超時時間較為明智,例如 2,即 KeepAliveTimeout 2。這能確保希望發(fā)出另外一個請求的客戶機有充足的時間,還能確保 worker 進程不會一直空閑,等待可能永遠不會出現(xiàn)的下一個請求。
壓縮
Web 服務(wù)器能夠在將輸出發(fā)回給客戶機之前壓縮它。這將使通過 Internet 發(fā)送的頁面更小,代價是 Web 服務(wù)器上的 CPU 周期。對于那些負擔(dān)得起 CPU 開銷的服務(wù)器來說,這是提高頁面下載速度的好辦法 —— 頁面壓縮后大小變?yōu)樵瓉淼娜种贿@種事情并不罕見。
圖片通常已經(jīng)是壓縮過的,因此壓縮應(yīng)僅限于文本輸出。Apache 通過 mod_deflate 提供壓縮。盡管 mod_deflate 可輕松啟用,但它涉及到太多的復(fù)雜性,很多手冊都解釋了這些復(fù)雜的內(nèi)容。本文不會介紹壓縮的配置,但提供了相應(yīng)文檔的鏈接。
調(diào)優(yōu)PHP
PHP 是運行應(yīng)用程序代碼的引擎。應(yīng)該僅安裝計劃使用的那些模塊,并配置您的 Web 服務(wù)器,使之僅為腳本文件(通常是以 .php 結(jié)尾的那些文件)使用 PHP,而非所有靜態(tài)文件。
操作碼緩存
請 求一個 PHP 腳本時,PHP 會讀取該腳本,并將其編譯為 Zend 操作碼,這是要執(zhí)行的代碼的一種二進制表示形式。隨后,此操作碼由 PHP 執(zhí)行并丟棄。操作碼緩存將保存這個編譯后的操作碼,并在下一次調(diào)用該頁面時重用它。這會節(jié)省很多時間。有多種緩存可用,我比較常用的是 eAccelerator。
要安裝 eAccelerator,您的計算機上需要有 PHP 開發(fā)庫。由于不同的 Linux 發(fā)布版存放文件的位置不同,所以最好直接從 eAccelerator 的 Web 站點獲得安裝說明(參見 參考資料部分獲得鏈接)。您的發(fā)布版也有可能已經(jīng)包含了一個操作碼緩存,只需安裝即可。
無論如何在系統(tǒng)上安裝 eAccelerator,都有一些配置選項需要注意。配置文件通常是 /etc/php.d/eaccelerator.ini。eaccelerator.shm_size 定義共享高速緩存的大小,編譯后的腳本就存儲在這里。該值的單位是兆字節(jié)(MB)。根據(jù)您的應(yīng)用程序確定恰當(dāng)?shù)拇笮 Accelerator 提供了一個腳本來顯示緩存的狀態(tài),其中包含內(nèi)存占用,64MB 是個不錯的選擇(eaccelerator.shm_size="64")。如果您選擇的值未被接受,那么必須修改內(nèi)核的最大共享內(nèi)存的大小。向 /etc/sysctl.conf 添加 kernel.shmmax=67108864,運行 sysctl -p 來使設(shè)置生效。kernel.shmmax 值的單位是字節(jié)。
如果共享內(nèi)存的分配超出極限,eAccelerator 必須將舊腳本從內(nèi)存中清除。默認情況下,這是被禁用的;eaccelerator.shm_ttl = "60" 指定:當(dāng) eAccelerator 用完共享內(nèi)存時,60 秒內(nèi)未被訪問的所有腳本都將被清除。
另一種流行的 eAccelerator 替代工具是 Alternative PHP Cache(APC)。Zend 的廠商也提供了一種商業(yè)操作碼緩存,包括一個進一步提高效率的優(yōu)化器。
php.ini
PHP 的配置是在 php.ini 中完成的。四個重要的設(shè)置控制 PHP 可使用多少系統(tǒng)資源,如表 1 所列。
表 1. php.ini 中與資源相關(guān)的設(shè)置設(shè)置 描述 建議值
max_execution_time 一個腳本可使用多少 CPU 秒 30
max_input_time 一個腳本等待輸入數(shù)據(jù)的時間有多長(秒) 60
memory_limit 在被取消之前,一個腳本可使用多少內(nèi)存(字節(jié)) 32M
output_buffering 數(shù)據(jù)發(fā)送給客戶機之前,有多少數(shù)據(jù)(字節(jié))需要緩存 4096
轉(zhuǎn)載于:https://www.cnblogs.com/moqiang02/p/4061420.html
總結(jié)
以上是生活随笔為你收集整理的合理设置apache的连接数及进程工作方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: slice与substring与subs
- 下一篇: UVALive 6508 Permuta