今天,客户反馈后台无法访问,于是开启了排查之路。
问题定位:
使用 df -h 命令查看,硬盘空间充足;
使用 free -m和top命令查看,发现16G的内存,被占用了多达15G;
查看安全防护日志,系统日志,未发现异常。
使用ps -ef|grep java命令查看进程是否存在,发现已经不存在java进程了;
问题大概就是内存占用率过高,导致java程序被kill掉了。
问题解决:
客户采购的机器为阿里云机器,使用lnmp一键安装脚本安装的基础环境,可以通过 ps auxw|head -1;ps auxw|sort -rn -k4|head -50 查看占用内存前50的进程,发现MySQL占用内存过多,php-fpm虽然单个进程占用内存不多,但是肉眼可见的均是php-fpm进程;
1、优化mysql配置
配置文件在 /etc/my.cnf,有如下几个配置可以关注下 innodb_buffer_pool_size、key_buffer_size、max_connections、key_buffer_size,配置文件修改后,需重启MySQL服务
2、优化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:子进程的数量在下面配置的基础上动态设置:pm.max_children
,pm.start_servers
,pm.min_spare_servers
,pm.max_spare_servers
。
max_children:pm
设置为 static
时表示创建的子进程的数量,pm
设置为 dynamic
时表示最大可创建的子进程的数量。必须设置。
start_servers:设置启动时创建的子进程数目。仅在 pm
设置为 dynamic
时使用。默认值:min_spare_servers + (max_spare_servers - min_spare_servers) / 2。
min_spare_servers:设置空闲服务进程的最低数目。仅在 pm
设置为 dynamic
时使用。必须设置。
max_spare_servers:设置空闲服务进程的最大数目。仅在 pm
设置为 dynamic
时使用。必须设置。
php-fpm配置修改后,也需要重启。
重启后使用相关压测工具进行测试,未出现java进程被kill的情况。