當Ubuntu中的php-fpm內存占用高時,可以通過以下步驟進行排查和解決:
首先,使用 free -m
命令查看當前服務器的內存使用情況,確認內存是否確實不足。
free -m
使用 ps aux | grep php-fpm
命令查看當前php-fpm進程的詳細信息,包括進程數、內存占用等。
ps aux | grep php-fpm
編輯php-fpm的配置文件,通常位于 /etc/php/版本/fpm/pool.d/www.conf
(其中“版本”是PHP的版本號,例如 7.4
)。
pm.max_children
:這個參數控制php-fpm可以創建的子進程的最大數量。根據服務器的內存和CPU核心數來設置一個合理的值。例如,如果服務器有8GB內存和4個CPU核心,可以將 pm.max_children
設置為 20-30
。pm.start_servers
:這個參數控制啟動時創建的子進程數量??梢栽O置為 pm.max_children
的5%-10%。pm.min_spare_servers
和 pm.max_spare_servers
:這兩個參數控制空閑子進程的數量。通??梢栽O置為 pm.max_children
的20%-40%。pm.max_requests
:這個參數控制每個子進程在處理一定數量的請求后自動重啟??梢栽O置為 500
或 1000
,以避免內存泄漏。修改配置文件后,使用以下命令重啟php-fpm服務以應用更改。
sudo systemctl restart php版本-fpm
(將“版本”替換為實際的PHP版本號)
重啟服務后,再次使用 free -m
和 ps aux | grep php-fpm
命令監控內存使用情況,確認內存占用是否已經降低。
如果使用的是靜態模式(pm.max_children
為固定值),可以考慮切換到動態模式,這樣可以根據實際需求自動調整進程數量,從而減少內存占用。
檢查PHP代碼中是否存在內存泄漏或不必要的內存消耗??梢允褂靡恍┕ぞ呷鏧debug來幫助分析內存使用情況。
如果還沒有啟用,可以考慮為PHP啟用OpCache擴展,這可以顯著提高PHP腳本的執行速度,減少內存使用。
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=64
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
通過上述步驟,可以有效降低php-fpm在Ubuntu系統中的內存占用。記得在調整配置后,持續監控服務器的性能,以確保調整是有效的。