導致 CPU 使用率 100% 的主要原因
當寶塔面板中 CPU 使用率 100% 的時候,我們首先需要找到問題的原因,程序性能、服務(wù)器負載能力、并發(fā)訪問、木馬病毒、被植入了挖礦程序等。主要的原因包括以下:
1. 高并發(fā)訪問
當網(wǎng)站的流量突然增加時,服務(wù)器需要處理大量的請求,這會導致CPU使用率飆升,這種情況下,我們需要優(yōu)化網(wǎng)站的性能,例如使用緩存技術(shù)、壓縮圖片等方法來減輕服務(wù)器的壓力。
2. 插件或軟件沖突
寶塔面板上有很多插件和軟件,它們之間可能存在沖突,導致CPU使用率過高,這種情況下,我們需要檢查并關(guān)閉不必要的插件和軟件。
3. 配置過低,服務(wù)器系統(tǒng)資源不足
如果服務(wù)器的硬件配置較低,例如CPU核心數(shù)較少,內(nèi)存容量較小等,那么在處理大量請求時,CPU使用率很容易達到100%,這種情況下,我們需要升級服務(wù)器的硬件配置。
4. 惡意攻擊
我們的服務(wù)器可能會遭受到DDoS攻擊或者CC攻擊,這些攻擊會導致服務(wù)器的CPU使用率飆升,這種情況下,我們需要采取相應(yīng)的安全措施,例如使用防火墻、限制IP訪問等方法來保護服務(wù)器。
原因排查
進入寶塔面板的【終端】模塊,使用輸入 top 命令查看一下服務(wù)器的實時負載情況,包括CPU和內(nèi)存等數(shù)據(jù),如下圖所示:
如果不是服務(wù)器被攻擊或植入木馬,那么主要的CPU高占用的一般就是 php-fpm 和 mysqld 這2個應(yīng)用了。因為這個應(yīng)用在網(wǎng)站運行過程中是頻繁響應(yīng)處理的請求進程。
CPU 使用率 100% 的解決方法
找到 CPU 高占用的原因,我們就要著手去做服務(wù)器環(huán)境優(yōu)化,讓服務(wù)器在一個更加合理的參數(shù)配置下流暢地運行。
1. php-fpm 占用過大的解決方法
1.1 安裝擴展
在寶塔面板的【 軟件商店 – 已安裝 】的應(yīng)用分類列表中找到當前網(wǎng)站運行使用的 PHP 版本,點擊右側(cè)對應(yīng)的【設(shè)置】 項,在彈出操作窗口中,切換到 【安裝擴展】,在擴展列表中找到 opcache (加速 PHP 代碼執(zhí)行效率)和 memcached (把數(shù)據(jù)緩存到內(nèi)存)并安裝,如下圖所示:

安裝好 opcache 和 memcached 之后,可以明顯地提升服務(wù)器運行效率,很大程度上降低服務(wù)器的負載,減少 CPU 和 內(nèi)存的占用。
此外,還可以安裝以下PHP網(wǎng)站常用擴展: fileinfo、redis、apcu、imagemagick、exif 等。
1.2 性能調(diào)整
在寶塔面板的【 軟件商店 – 已安裝 】的應(yīng)用分類列表中找到當前網(wǎng)站運行使用的 PHP 版本,點擊右側(cè)對應(yīng)的 【設(shè)置】 項,在彈出操作窗口中,切換到 【性能調(diào)整】,根據(jù)服務(wù)器配置選擇并發(fā)方案,或者自定義調(diào)整不同參數(shù),如下圖所示:

- 【最大子進程數(shù)量】越大,并發(fā)能力越強,但max_children最大不要超過5000
- 【內(nèi)存】每個PHP子進程需要20MB左右內(nèi)存,過大的max_children會導致服務(wù)器不穩(wěn)定
- 【靜態(tài)模式】始終維持設(shè)置的子進程數(shù)量,對內(nèi)存開銷較大,但并發(fā)能力較好
- 【動態(tài)模式】按設(shè)置最大空閑進程數(shù)來收回進程,內(nèi)存開銷小,建議小內(nèi)存機器使用
- 【按需模式】根據(jù)訪問需求自動創(chuàng)建進程,內(nèi)存開銷極小,但并發(fā)能力略差
- 【外網(wǎng)訪問】若需外網(wǎng)訪問,連接方式為TCP套接字,并將[連接信息-綁定IP]改為0.0.0.0
- 【外網(wǎng)訪問】配置正確的IP白名單,在防火墻/安全組放行監(jiān)聽端口,有安全風險,需謹慎
設(shè)置完成后,在上圖中切換至【服務(wù)】選項卡,點擊【重啟配置】按鈕,使得調(diào)整后的配置生效。
2. MySQL占用過大的解決方法
友情提示:為確保數(shù)據(jù)安全,進行性能調(diào)整前,請先做好數(shù)據(jù)庫備份,以防數(shù)據(jù)丟失!
在寶塔面板的【 軟件商店 – 已安裝 】的應(yīng)用分類列表中找到當前網(wǎng)站運行使用的 MySQL 版本,點擊右側(cè)對應(yīng)的 【設(shè)置】 項,在彈出操作窗口中,切換到 【性能調(diào)整】,根據(jù)服務(wù)器配置選擇并發(fā)方案,或者自定義調(diào)整不同參數(shù),如下圖所示:

根據(jù)當前服務(wù)器配置,選擇最佳的優(yōu)化方案,對其性能進行調(diào)整。
MySQL數(shù)據(jù)庫性能調(diào)整后,點擊 【重啟數(shù)據(jù)庫】按鈕,使得調(diào)整后的配置生效。
3. 升級服務(wù)器硬件配置
如果以上方法執(zhí)行后,服務(wù)器運行效果還不夠理想,那很可能就是你當前使用的服務(wù)器配置過低了,建議升級服務(wù)器配置,增加CPU核心數(shù)、擴大內(nèi)存容量等。
4. 采取必要的安全防護措施
對于網(wǎng)站安全性來說,可以通過以下方法來保護服務(wù)器免受惡意攻擊:
使用防火墻:例如使用iptables、firewalld等防火墻工具來限制非法訪問。
限制IP訪問:通過設(shè)置IP訪問限制,可以防止惡意IP對服務(wù)器進行攻擊。
使用WAF:通過使用Web應(yīng)用防火墻(WAF),可以有效防止SQL注入、XSS攻擊等常見的Web攻擊。
配置CDN:緩存加速,分布式多節(jié)點DDOS防護、CC防護、WAF防護,抵御DDoS攻擊。

經(jīng)過上以的服務(wù)器配置優(yōu)化,服務(wù)器的壓力肯定可以得到有效的緩解,此外,要做好定期檢查服務(wù)器的硬件配置,確保硬件配置能夠滿足網(wǎng)站的需求。