VPS本身內(nèi)存就有限如果配置不好肯定背不起什么網(wǎng)站了,在這里小編來為各位介紹linux中512M VPS內(nèi)存優(yōu)化步驟詳解,希望文章對各位有用.
512M的VPS優(yōu)化apache內(nèi)存
查看目前占用內(nèi)存:Ps aux|grep httpd
基本一個占用50M左右:ps aux|grep httpd | wc –l
一共13個,減去grep httpd 那行 12個,說明占用大約600M,超過了服務(wù)器512M內(nèi)存,相比之下nginx主進程占用50M,帶著php-fpm跑,一個fpm占用2M,開啟10個fpm進程,一共70M的內(nèi)存就足夠了.
標(biāo)準(zhǔn)Linux Apache配置在Apache的配置文件在/etc/httpd/conf/httpd.conf,但是lampp的不在httpd.conf里,而是在extra/http-default.conf里面,兩處地方分別對應(yīng)兩個模塊prefork模塊和worker模塊(Apache默認(rèn)啟用的是prefork模塊),根據(jù)自己的服務(wù)器啟用的模塊分別修改對應(yīng)的參數(shù),可以用命令httpd -l查看apache所使用的模塊.
各參數(shù)含義解釋如下:
• StartServers //指定服務(wù)器啟動時建立的子進程數(shù)量,prefork默認(rèn)為5。如果你的內(nèi)存占用過大,可適當(dāng)減小此值。
• MinSpareServers //指定空閑子進程的最小數(shù)量,默認(rèn)為5。如果當(dāng)前空閑子進程數(shù)少于MinSpareServers ,那么Apache將以最大每秒一個的速度產(chǎn)生新的子進程。
• MaxSpareServers //設(shè)置空閑子進程的最大數(shù)量,默認(rèn)為10。如果當(dāng)前有超過MaxSpareServers數(shù)量的空閑子進程,那么父進程將殺死多余的子進程。如果你將該指令的值設(shè)置為比MinSpareServers小,Apache將會自動將其修改成”MinSpareServers+1″。
• MaxClients //限定同一時間客戶端最大接入請求的數(shù)量(單個進程并發(fā)線程數(shù)),默認(rèn)為256。任何超過MaxClients限制的請求都將進入等候隊列,一旦一個鏈接被釋放,隊列中的請求將得到服務(wù)。要增大這個值,你必須同時增大ServerLimit 。
• ServerLimit //默認(rèn)的MaxClient最大是256個線程,如果想設(shè)置更大的值,就的加上ServerLimit這個參數(shù)。20000是ServerLimit這個參數(shù)的最大值。注意,要想此參數(shù)生效:必須放在MaxClients指令的前面。
• MaxRequestsPerChild //每個子進程在其生存期內(nèi)允許伺服的最大請求數(shù)量,默認(rèn)為10000.到達MaxRequestsPerChild的限制后,子進程將會結(jié)束。如果MaxRequestsPerChild為”0″,子進程將永遠不會結(jié)束。建議將此值設(shè)為非零值,可以防止內(nèi)存泄漏以及當(dāng)服務(wù)器負(fù)載減輕的時候減少活動進程的數(shù)量,如果內(nèi)存占用過大,可以減少此值。
worker模塊中多了幾個參數(shù),解釋如下:
• ThreadLimit //每個子進程可配置的線程數(shù)上限。這個指令設(shè)置了每個子進程可配置的線程數(shù)ThreadsPerChild上限。任何在重啟期間對這個指令的改變都將被忽略,但對ThreadsPerChild的修改卻會生效。默認(rèn)值是”64″.
• MinSpareThreads //最小空閑線程數(shù),默認(rèn)值是”75″。這個MPM將基于整個服務(wù)器監(jiān)視空閑線程數(shù)。如果服務(wù)器中總的空閑線程數(shù)太少,子進程將產(chǎn)生新的空閑線程。
• MaxSpareThreads //設(shè)置最大空閑線程數(shù)。默認(rèn)值是”250″。這個MPM將基于整個服務(wù)器監(jiān)視空閑線程數(shù)。如果服務(wù)器中總的空閑線程數(shù)太多,子進程將殺死多余的空閑線程。MaxSpareThreads的取值范圍是有限制的。Apache將按照如下限制自動修正你設(shè)置的值:worker要求其大于等于MinSpareThreads加上ThreadsPerChild的和。
• ThreadsPerChild //每個子進程建立的常駐的執(zhí)行線程數(shù)。默認(rèn)值是25。子進程在啟動時建立這些線程后就不再建立新的線程了。
修改保存之后,要想使配置生效,需先執(zhí)行service httpd stop 然后service httpd start 直接service httpd restart無法使修改過的配置生效!
覺得有必要解釋一下preforx模塊的StartServers、MinSpareServers、MaxSpareServers這幾個參數(shù)的相互關(guān)系,這樣當(dāng)你們的主機內(nèi)存不足的時候,可以根據(jù)你們的實際情況來相應(yīng)的修改這些值!
當(dāng)Apache啟動時,Apache會啟動StartServers個空閑進程同時準(zhǔn)備接收處理請求,當(dāng)多個請求到來時,StarServers進程會越來越少,當(dāng)空閑進程減少到MinSpareServers個時,Apache為了能夠繼續(xù)有充裕的進程處理請求,它會再啟動StartsServers個進程備用,直到剩下的空閑進程數(shù)量到達MaxSpareServers為止,這樣就大大減少了請求隊列等待的可能,使得服務(wù)效率提高,這也是為什么叫做Pre-fork的原因;
- <IfModule mpm_prefork_module>
- StartServers 2
- MinSpareServers 2
- MaxSpareServers 4
- MaxClients 150
- MaxRequestsPerChild 20
- </IfModule> //Vevb.com
這樣最后一共啟動4個進程,apache一共占用內(nèi)存200M(還是比nginx大好多),對于小網(wǎng)站這么玩,還湊合,流量大了,還是去買個大點內(nèi)存的VPS吧,或者用nginx能好一些.
優(yōu)化數(shù)據(jù)庫mysql,數(shù)據(jù)庫內(nèi)存比較好查看.
Ps aux|grep mysql
直接顯示 占用了300M,實際最大的消耗還是卡在mysql上,php如果有l(wèi)ike查詢,512M的內(nèi)存基本扛不住,而且速度很慢,所以盡可能控制mysql執(zhí)行時間到最短.
新聞熱點
疑難解答
圖片精選