當我的博客數據庫服務常常忽然掛斷,形成沒法訪問時咱們能作什麼?本篇主題就是記錄博主針對這一現象時發現問題,分析問題,最後解決問題的過程。php
歡迎訪問個人我的博客mysql
最近,發現我的博客的Linux服務器,數據庫服務常常掛掉,致使須要重啓,才能正常訪問,極其噁心,因而決心開始解決問題,解放個人時間和精力(我可不想常常出問題,而後人工重啓,費力費時)。linux
發現問題之後,首先使用free -m
指令查看當前服務器執行情況:sql
能夠看到個人服務器內存是2G的,可是目前可用內存只剩下70M,內存使用率高達92%,頗有多是內存使用率太高致使數據庫服務掛斷。shell
繼續看詳細狀況,使用top
指令:數據庫
而後再看指令輸出結果中詳細列出的進程狀況,重點關注第10列內存使用佔比:bash
發現CPU使用率不算高,也排除了CPU的問題,另外能夠看到數據庫服務佔用15.2%的內存,內存使用太高時將會擠掉數據庫進程(佔用內存最高的進程),致使服務掛斷,因此咱們須要查看詳細內存使用狀況,是哪些進程耗費了這麼多的內存呢?服務器
使用指令:php-fpm
ps auxw|head -1;ps auxw|sort -rn -k4|head -40複製代碼
查看消耗內存最多的前40個進程:spa
查看第四列內存使用佔比,發現除了mysql數據庫服務以外,php-fpm服務池開啓了太多子進程,佔用超過大半內存,問題找到了,咱們開始解決問題:設置控制php-fpm進程池進程數量。
經過各類搜索手段,發現能夠經過配置pm.max_children
屬性,控制php-fpm子進程數量,首先,打開php-fpm配置文件,執行指令:
vi /etc/php-fpm.d/www.conf複製代碼
找到pm.max_children
字段,發現其值過大:
如圖,pm.max_children
值爲50,每個進程佔用1%-2.5%的內存,加起來就耗費大半內存了,因此咱們須要將其值調小,博主這裏將其設置爲25,同時,檢查如下兩個屬性:
pm.max_spare_servers
: 該值表示保證空閒進程數最大值,若是空閒進程大於此值,此進行清理pm.min_spare_servers
: 保證空閒進程數最小值,若是空閒進程小於此值,則建立新的子進程;這兩個值均不能不能大於pm.max_children
值,一般設置pm.max_spare_servers
值爲pm.max_children
值的60%-80%。
最後,重啓php-fpm
systemctl restart php-fpm複製代碼
再次查看內存使用狀況, 使用內存下降不少:
以後通過屢次觀察內存使用狀況,發現這次改進後,服務器內存資源消耗獲得很大緩解。