問:為什麼伺服器在連續執行多天後或訪問峰值後,程式中的一個Apache.exe佔用記憶體幾百兆不減少?
答:用記事本開啟apache2\conf\httpd.conf,
我在centos5上裝了kloxo,找了半天 httpd.conf在 /etc/httpd/conf/目錄下。
查詢MaxRequestsPerChild,將MaxRequestsPerChild 0改成MaxRequestsPerChild 50即可。
影響apache效能的幾個重要引數(conf/httpd.conf中設定)
KeepAlive 是否允許持續連線
MaxKeepAliveRequests 允許的持續連線的最大數
KeepAliveTimeout 持續連線在沒有請求多少秒後切斷
StartServers 最初啟動時啟動多少個伺服器程式
MinSpareServers 空閒伺服器程式的最小數
MaxSpareServers 空閒伺服器程式的最大數
MaxClients 同時處理的請求數(最重要的引數,要少於ServerLimit)
MaxRequestsPerChild 每個子程式處理的最大請求數
它們之前的關係:
prefork控制程式在最初建立“StartServers”個子程式後,為了滿足MinSpareServers設定的需要建立一個程式,等待一秒鐘,繼續建立兩個,再等待一秒鐘,繼續建立四個……如此按指數級增加建立的程式數,最多達到每秒32個,直到滿足MinSpareServers設定的值為止。這種模式可以不必在請求到來時再產生新的程式,從而減小了系統開銷以增加效能。MaxSpareServers設定了最大的空閒程式數,如果空閒程式數大於這個值,Apache會自動kill掉一些多餘程式。這個值不要設得過大,但如果設的值比MinSpareServers小,Apache會自動把其調整為MinSpareServers+1。如果站點負載較大,可考慮同時加大MinSpareServers和 MaxSpareServers。MaxRequestsPerChild設定的是每個子程式可處理的請求數。每個子程式在處理了 “MaxRequestsPerChild”個請求後將自動銷燬。0意味著無限,即子程式永不銷燬。雖然預設設為0可以使每個子程式處理更多的請求,但如果設成非零值也有兩點重要的好處:1、可防止意外的記憶體洩漏。2、在伺服器負載下降的時侯會自動減少子程式數。
ServerLimit 2000
StartServers 10
MinSpareServers 10
MaxSpareServers 15
MaxClients 1000
MaxRequestsPerChild 2048
除錯過程中用到的指令:
# ps -ef|grep http|wc -l //檢視請求總數
# cat /proc/loadavg //檢視平均負載(loadavg),loadavg高於1,表明任務佇列出現了等待,CPU忙不過來了。超過2以上就會明顯感到效能降低了
# netstat -ant | grep :80 | wc -l //檢視TCP連線數
# top //檢視系統執行情況
====================================================================
apache的記憶體使用
apache程式在使用記憶體時,是“漸長”的。也就是說,直到這個程式死掉,使用記憶體的數量是一直增長而不會減少的。這樣的話,apache程式使用記憶體的多少,就決定於你的應用程式最大使用記憶體量了。
keepalive引數
KeepAliveTimeout 這個引數決定了,在什麼都不做之前,一個http程式能夠等待多長時間?設想一下,如果keepalive設定為on,而 keepalivetimeout設定為一個比較大的數字,apache佔用記憶體會很快的增長。這是因為,一個apache程式完成了一個任務(並達到了一定的記憶體佔用,想一下“漸進”模式),並不會馬上退出,而是等待一個keepalivetimeout時間。假設使用者的連結請求持續不斷的到來,則積累起來的無用的apache程式就會相當多,直到timeout,這些程式才會被殺死。
但是,keepalive的確對於靜態的檔案,比如影像檔案的傳送是很有效的,因此,keepalive要設定為on,(off)但是keepalvietimeout要設定的小些,比如5s 15
MaxRequestsPerChild
這個引數是說,apache程式在處理了多少個請求之後,必須退出,重新開始,以免在處理中的記憶體問題。
對於php指令碼來說,把這個引數設定的小一些是有好處的,可以避免程式使用的記憶體持續增長對apache帶來的壓力:讓這個引數定期釋放記憶體,因為php是在指令碼執行完畢後,自動釋放只用的資源(記憶體)的。
比如設定為50?如果太小的話,重新產生一個apache程式也是要消耗資源的,這是一個平衡問題。
解決Apache長時間佔用記憶體大的問題,Apache 記憶體優化方法
相關文章
- GaussDB(DWS)效能調優,解決DM區大記憶體佔用問題記憶體
- mariadb 記憶體佔用優化記憶體優化
- 告別記憶體OOM,解決MySQL記憶體增長問題記憶體OOMMySql
- ubuntu解決GPU視訊記憶體佔用問題UbuntuGPU記憶體
- mysql佔用記憶體高的一種解決方法MySql記憶體
- 雲伺服器解決MSSQL 2005 佔用記憶體過大問題伺服器SQL記憶體
- Chrome 再次最佳化記憶體佔用問題,新增記憶體釋放開關Chrome記憶體
- 電腦記憶體佔用過高怎麼辦 電腦記憶體佔用過高解決方法記憶體
- Windbg分析高記憶體佔用問題記憶體
- 解決golang 的記憶體碎片問題Golang記憶體
- 分析並優化 Android 應用記憶體佔用優化Android記憶體
- 利用Windbg分析高記憶體佔用問題記憶體
- win10 audiodg狂佔記憶體怎麼辦_win10 audiodg佔用記憶體過高的解決方法Win10記憶體
- 解決git記憶體洩露問題Git記憶體洩露
- 關於redis記憶體分析,記憶體優化Redis記憶體優化
- DOTNET記憶體佔用最佳化記憶體
- win10記憶體佔用高怎麼解決_win10系統記憶體佔用高解決步驟Win10記憶體
- Redis 記憶體優化神技,小記憶體儲存大資料Redis記憶體優化大資料
- Android效能優化篇之記憶體優化--記憶體洩漏Android優化記憶體
- win10開機記憶體佔用60%怎麼辦 解決開機執行記憶體佔用率過高的方法Win10記憶體
- Java動態編譯優化——URLClassLoader 記憶體洩漏問題解決Java編譯優化記憶體
- 1.記憶體優化(一)記憶體洩漏記憶體優化
- win10怎麼優化記憶體 win10系統記憶體優化的方法Win10優化記憶體
- python物件的記憶體佔用Python物件記憶體
- Win10記憶體佔用過多怎麼辦 win10清理記憶體佔用的方法Win10記憶體
- Android記憶體優化Android記憶體優化
- influxdb記憶體佔用剖析UX記憶體
- 資源記憶體佔用記憶體
- mongodb 對記憶體的嚴重佔用以及解決方法MongoDB記憶體
- 記憶體混亂及解決方法和死鎖問題記憶體
- win10開機記憶體佔用高怎麼解決_win10開機後記憶體佔用高的解決措施Win10記憶體
- apache2.4在windows server2012上出現記憶體溢位解決方法ApacheWindowsServer記憶體溢位
- Java中的CPU佔用高和記憶體佔用高的問題排查Java記憶體
- win10系統如何優化記憶體_win10優化記憶體佔用率怎麼操作Win10優化記憶體
- Java動態編譯優化——ZipFileIndex記憶體洩漏問題分析解決Java編譯優化Index記憶體
- Java記憶體模型是什麼,為什麼要有Java記憶體模型,Java記憶體模型解決了什麼問題?Java記憶體模型
- Java 程式佔用 VIRT 虛擬記憶體超高的問題研究Java記憶體
- SHARED POOL中KGH: NOACCESS佔用大量記憶體的問題分析記憶體
- 深度解讀昇騰CANN記憶體複用技術,降低網路記憶體佔用記憶體