php-fpm 記憶體過高,CPU佔有率過高帶來的最佳化和調整
如果不是昨天我的論壇遭受到了NTP DDos攻擊,我也不會遇到這個問題.
首先,這些問題都是和php-fpm 的配置有關,如果你使用的是軍哥的LNMP,那麼這個配置檔案位於
/usr/local/php/etc/php-fpm.conf
首先先解決記憶體過高的問題,這個是由於php-fpm佔用了記憶體以後並沒有及時釋放造成的,但是我們可以透過配置檔案強制他釋放記憶體,可以在配置檔案裡面加上
pm.max_requests = 500
500這個值適用於大部分的伺服器配置,但是如果你的記憶體過大或者過小,可以適當增大或者減小這個值,取決於你的記憶體的實際使用率.
既然說到了php-fpm 的配置,那麼就得好好的說下php-fpm 的 process management
php-fpm 的process management 有兩種工作方式,一種是static, 一種是dynamic, 對於小的cloud 或者vps 一般用static,但是其實大部分時間我們都在使用dynamic
pm = dynamic pm.max_children = 160 pm.start_servers = 20 pm.min_spare_servers = 20 pm.max_spare_servers = 40
和process management 有直接關係的是這四個引數, pm.max_children 在pm=static 的時候有用,在pm = dynamic 的時候, 剩下三個引數才開始起作用
這裡問題的關鍵在於,如何設定pm.max_children 的值
對於不同的php application,每個php-fpm instance 佔用的記憶體也不一樣,需要具體application 具體分析,但是這裡我們可以去個average , 30M
假設你的伺服器有8G的記憶體,其中的6GB 可以劃給php-fpm, 那麼
pm.max_children = 6000MB / 30MB =200
也就是說在這種情況下,200這個值是比較合適的. 這裡需要注意的是,賦予max_children 一個很高的值,並不代表會帶來高效能,也許會拖垮整個伺服器
剩下的三個引數,按照實際情況,設定的差不多就行了
你可以用如下的命令來實際檢視一下single php-fpm usage:
ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'
另外別忘了開啟php-fpm 的 slowlog,這樣方便你以後檢視日誌來進行debug
slowlog = /usr/local/php/var/log/slow.log
對於CPU 佔有率過高的問題,這個其實並不是php-fpm 的問題,而是你寫的php 程式碼的問題,這個時候可以透過設定pm.status_path 開檢視到底是哪個php application 佔用的cpu 資源
詳細可以參見這篇文章:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69992808/viewspace-2757286/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 電腦記憶體佔用過高怎麼辦 電腦記憶體佔用過高解決方法記憶體
- Java中的CPU佔用高和記憶體佔用高的問題排查Java記憶體
- oracle RDBMS Kernel Executable 佔用記憶體過高Oracle記憶體
- win10電腦記憶體過高怎麼辦 win10記憶體佔用過高的方法Win10記憶體
- java專案cpu或記憶體過高,排查問題思路Java記憶體
- mysql中CPU或記憶體利用率過高問題MySql記憶體
- win10記憶體佔用過高程式沒多少怎麼辦 win10記憶體佔用過高的方法Win10記憶體
- java應用CPU佔用率過高排查Java
- 記憶體使用過高點檢checklist記憶體
- 解讀surging 的記憶體過高的原因記憶體
- 解碼Redis最易被忽視的CPU和記憶體佔用高問題Redis記憶體
- 記一次用Android Studio的Profiler排查安卓記憶體佔用過高Android安卓記憶體
- win10記憶體佔用過高但是實際沒有多少程式怎麼辦Win10記憶體
- win10 audiodg狂佔記憶體怎麼辦_win10 audiodg佔用記憶體過高的解決方法Win10記憶體
- win10工作管理員記憶體佔用過高怎麼解決Win10記憶體
- MacOs中docker.Hyperkit佔用記憶體過高無法停止問題MacDocker記憶體
- 如何在生產環境排查 Rust 記憶體佔用過高問題Rust記憶體
- 【.Net Core】分析.net core在linux下記憶體佔用過高問題Linux記憶體
- mysql佔用CPU過高的解決辦法(新增索引)MySql索引
- win10如何降低chrome記憶體佔用_win10電腦chrome記憶體佔用過高怎麼辦Win10Chrome記憶體
- win10開機記憶體佔用60%怎麼辦 解決開機執行記憶體佔用率過高的方法Win10記憶體
- 伺服器CPU佔用過高和哪些因素有關呢伺服器
- 淺析香港伺服器記憶體過高的原因伺服器記憶體
- 桌面視窗管理器佔用記憶體過高怎麼辦 電腦莫名其妙記憶體佔用很高記憶體
- win11服務和控制器應用佔用CPU過高
- CPU利用率過高的原因
- Windbg分析高記憶體佔用問題記憶體
- weblogic 記憶體調整Web記憶體
- win10記憶體佔用率過高怎麼辦 win10開機記憶體佔用百分之九十Win10記憶體
- 網站主機CPU或記憶體使用率過高導致網站無法訪問網站記憶體
- 利用Windbg分析高記憶體佔用問題記憶體
- 面試問題---JAVA程式CPU佔用過高怎麼定位面試Java
- win10 2004系統cpu佔用高怎麼辦_win10 2004系統佔用cpu過高解決教程Win10
- mysql佔用記憶體高的一種解決方法MySql記憶體
- Shell----監控CPU/記憶體/負載高時的程式記憶體負載
- 生產中遇到 cpu 過高排查
- win10記憶體佔用高怎麼解決_win10系統記憶體佔用高解決步驟Win10記憶體
- win10 microsoft edge佔用記憶體高怎麼辦_win10 microsoft edge佔用記憶體高處理方法Win10ROS記憶體