linux 伺服器負載很高,緣由貌似是 php進程過多,而且一直保持 400多 ,有圖所示,php-cgi 進程數一直是不降的,沒有使用者訪問網站也是這麼多,每個進程大概佔用記憶體150-200M左右,16G記憶體有時候會阻塞。求大牛幫忙。,負載有時候會達到頂峰,前無古人後無來者,120 負載,cpu 跑滿。求教
回複內容:
linux 伺服器負載很高,緣由貌似是 php進程過多,而且一直保持 400多 ,有圖所示,php-cgi 進程數一直是不降的,沒有使用者訪問網站也是這麼多,每個進程大概佔用記憶體150-200M左右,16G記憶體有時候會阻塞。求大牛幫忙。,負載有時候會達到頂峰,前無古人後無來者,120 負載,cpu 跑滿。求教
可以考慮用fastcgi.
http://php.net/manual/en/install.fpm....
這麼多的進程數load值很高也是可以預見的,建議還是查下PHP執行過程中的效能瓶頸究竟在哪。
mod_php是和apache同步執行的, 如果fastcgi的話, 伺服器(一般nginx)和php之間是非同步關係, 在某些情況下可以無需那麼多php進程
打個比方, 如果一個使用者用龜速上傳一個檔案, 那麼apache和apache裡面的那個php就在等待這個使用者上傳完成, 所以系統裡面就需要更多的apache進程來應對並發
如果非同步執行, 那麼nginx在處理使用者的上傳, 一旦使用者上傳檔案完成, 傳給php處理只是一瞬間的事情.
當然有時候fastcgi也不一定能解決問題, 比如php在等待一個sql查詢, 這個查詢花了5秒, 那麼5秒之內有新使用者來訪, 這個php就不能出門歡迎, 所以必須新開一個php進程
所以查一查你的php執行要花多久, 再看一看自己的訪問量, 綜合的去找原因並想辦法解決吧
每個php進程都是很費記憶體的,建議根據伺服器配置做適當調整,修改fastcgi設定檔或php-fpm設定檔,一般100個內對於大部分情境就夠用了,再多就要考慮做任務調度或者訊息佇列處理了