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

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

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

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

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