要解決Apache吃內存的問題,就要先配置好Apache,在Apache的配置文件中找到以下配置
模式1
[cce_xml]
<IfModule prefork.c>
StartServers 8 #數量的服務器進程開始
MinSpareServers 5 #最小數量的服務器進程,保存備用
MaxSpareServers 20 #最大數量的服務器進程,保存備用
ServerLimit 256 #進程的線程數
MaxClients 256 #最大請求并發數,同上值相等即可
MaxRequestsPerChild 30 #最大子進程請求數
</IfModule>
模式2
[cce_xml]
<IfModule worker.c>
StartServers 2
MaxClients 500
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 30
</IfModule>
上面是Apache的兩種模式,一般都是第一種prefork,所以以第一種為例。
參數介紹:startServers是當apache開啟的時候創建的進程數,MinSpareThreads是最小的空閑進程數,MaxSpareThreads是最大的空閑進程數,apache會努力的將空閑進程保存在這兩者之間,ServerLimit是最大限制的請求并發數,用來限制MaxClients,只要不超過這個數值即可,MaxRequestPerChild是最大子進程請求數,當進程請求數達到這個數值之后就apache就會銷毀該進程。
數字及數字后面部分是重點,網上好多地方說可以設置的大一點,但是我測試過了,設置在1000+之后服務內存反而消耗的更快,所以在小內存服務器上最好設置為30-50之間,當然,如果是牛逼的服務器完全不用考慮這一點,設置為0或者1000+都可以,但是不建議設置為0,如果設置為0則代表不釋放線程內存,因為不知道apache啥時候可能出現內存泄漏,所以還是不要設置為0。
通過以上配置的調整是可以解決httpd一直消耗內存的問題的。