解決Ubuntu LNMP中的內存泄漏可從以下方面入手:
- 更新軟件版本:將Nginx、PHP-FPM、MySQL等組件升級到最新穩定版,修復已知內存泄漏漏洞。
- 優化配置參數
- PHP-FPM:設置
pm.max_requests
(如500),定期重啟子進程;調整pm.start_servers
等參數避免進程過多。
- Nginx:合理配置
worker_processes
和worker_connections
,避免連接數過高。
- MySQL:優化
innodb_buffer_pool_size
等參數,限制內存占用。
- 代碼層面檢查
- 使用Xdebug或Valgrind檢測PHP代碼中的內存泄漏,重點關注未釋放的變量、循環引用、數據庫連接等。
- 遵循RAII原則,確保資源(如文件句柄、數據庫連接)及時釋放。
- 監控與工具輔助
- 通過
top/htop
、ps
命令實時監控進程內存占用,定位異常進程。
- 使用Valgrind、AddressSanitizer(ASan)或memleak(eBPF工具)檢測內存泄漏。
- 定期維護與預防
- 定期重啟Nginx、PHP-FPM服務釋放內存。
- 啟用OPcache減少PHP內存開銷。
- 實施壓力測試,驗證系統在高負載下的內存穩定性。
參考來源: