今天,客戶反饋后臺無法訪問,于是開啟了排查之路。
問題定位:
使用 df -h 命令查看,硬盤空間充足;
使用 free -m和top命令查看,發(fā)現(xiàn)16G的內(nèi)存,被占用了多達15G;
查看安全防護日志,系統(tǒng)日志,未發(fā)現(xiàn)異常。
使用ps -ef|grep java命令查看進程是否存在,發(fā)現(xiàn)已經(jīng)不存在java進程了;
問題大概就是內(nèi)存占用率過高,導致java程序被kill掉了。
問題解決:
客戶采購的機器為阿里云機器,使用lnmp一鍵安裝腳本安裝的基礎環(huán)境,可以通過 ps auxw|head -1;ps auxw|sort -rn -k4|head -50 查看占用內(nèi)存前50的進程,發(fā)現(xiàn)MySQL占用內(nèi)存過多,php-fpm雖然單個進程占用內(nèi)存不多,但是肉眼可見的均是php-fpm進程;
1、優(yōu)化mysql配置
配置文件在 /etc/my.cnf,有如下幾個配置可以關注下 innodb_buffer_pool_size、key_buffer_size、max_connections、key_buffer_size,配置文件修改后,需重啟MySQL服務
2、優(yōu)化php-fpm配置
php-fpm的配置文件在/usr/local/php/etc路徑下,
配置文件的一些解釋:
pm = dynamic
pm.max_children = 30
pm.start_servers = 15
pm.min_spare_servers = 10
pm.max_spare_servers = 20
pm = dynamic:子進程的數(shù)量在下面配置的基礎上動態(tài)設置:pm.max_children
,pm.start_servers
,pm.min_spare_servers
,pm.max_spare_servers
。
max_children:pm
?設置為?static
?時表示創(chuàng)建的子進程的數(shù)量,pm
?設置為?dynamic
?時表示最大可創(chuàng)建的子進程的數(shù)量。必須設置。
start_servers:設置啟動時創(chuàng)建的子進程數(shù)目。僅在?pm
?設置為?dynamic
?時使用。默認值:min_spare_servers + (max_spare_servers - min_spare_servers) / 2。
min_spare_servers:設置空閑服務進程的最低數(shù)目。僅在?pm
?設置為?dynamic
?時使用。必須設置。
max_spare_servers:設置空閑服務進程的最大數(shù)目。僅在?pm
?設置為?dynamic
?時使用。必須設置。
php-fpm配置修改后,也需要重啟。
重啟后使用相關壓測工具進行測試,未出現(xiàn)java進程被kill的情況。