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