《LNMP内存或CPU过高的优化问题》
场景一:正康服务器php服务无法访问,Nginx报502/403错误
原因分析
top指令查看系统各进程使用情况
zkkj168 ~ # top
top - 16:09:32 up 63 days, 4:03, 1 user, load average: 1.14, 1.24, 1.20
Tasks: 98 total, 4 running, 94 sleeping, 0 stopped, 0 zombie
%Cpu(s): 39.0 us, 17.1 sy, 0.0 ni, 43.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 4048148 total, 3880700 used, 167448 free, 246556 buffers
KiB Swap: 0 total, 0 used, 0 free. 2440796 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2781 www-data 20 0 346384 32324 14716 R 60.2 0.8 8:52.89 php5-fpm
6072 www-data 20 0 341844 27156 14088 S 29.4 0.7 6:02.94 php5-fpm
13455 mysql 20 0 1541752 200240 4748 S 13.5 4.9 3054:00 mysqld
10920 root 20 0 206876 9620 4884 R 0.4 0.2 155:00.87 AliYunDun
1 root 20 0 33448 2688 1400 S 0.0 0.1 0:03.07 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.80 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:39.56 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:+
7 root 20 0 0 0 0 S 0.0 0.0 35:45.76 rcu_sched
8 root 20 0 0 0 0 S 0.0 0.0 30:12.54 rcuos/0
9 root 20 0 0 0 0 R 0.0 0.0 34:00.92 rcuos/1
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/1
13 root rt 0 0 0 0 S 0.0 0.0 0:16.86 migration/0
14 root rt 0 0 0 0 S 0.0 0.0 0:20.18 watchdog/0
15 root rt 0 0 0 0 S 0.0 0.0 0:16.76 watchdog/1
- php5-fpm CPU过高
- mysql 内存过高
- 重启Nginx,错误仍然存在
- service nginx restart
- 重启php5-fpm,服务器正常
- service php5-fpm restart
解决方案
经排查发现是php5-fpm进程CPU占用过高导致php服务无法访问。 同时mysqld服务内存占用过高,导致智能硬件服务端进程server无法正常运行。 1. php-fpm进程数不够用
netstat -napo |grep "php5-fpm" | wc -l
## 正康服务器出现502错误时,显示40/75/135个子进程
## 重新启动后,进程数5
查看一下当前fastcgi进程个数,如果个数接近conf里配置的上限,就需要调高进程数。
但也不能无休止调高,可以根据服务器内存情况,可以把php5-fpm子进程数调到100或以上,在4G内存的服务器上200就可以。
第一次性能优化后效果及测试
负载过高的业务分离后,连续稳定运行72小时 - 数据库链接数资源,从以前600,到现在一直保持在10以内 - server服务端,100台设备同时在线,内存一直稳定在30M左右 - php5-fpm,CPU占用率不再长期持续80%
zkkj168 Models # top
top - 13:16:52 up 70 days, 1:10, 2 users, load average: 0.03, 0.05, 0.12
Tasks: 97 total, 2 running, 95 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.7 us, 0.2 sy, 0.0 ni, 98.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 4048148 total, 3753880 used, 294268 free, 209400 buffers
KiB Swap: 0 total, 0 used, 0 free. 2003548 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
14991 www-data 20 0 480404 30988 4548 S 0.0 0.8 9:02.27 server
18936 www-data 20 0 338844 24976 15320 S 0.7 0.6 0:04.27 php5-fpm
18891 www-data 20 0 338800 24752 15264 S 1.0 0.6 0:05.07 php5-fpm
18904 www-data 20 0 338304 23120 14008 S 1.3 0.6 0:05.01 php5-fpm
393 syslog 20 0 256228 22776 896 S 0.0 0.6 0:12.84 rsyslogd
18581 root 20 0 333980 16600 11892 S 0.0 0.4 0:00.05 php5-fpm
30356 root 20 0 63400 11868 1568 S 0.0 0.3 13:37.17 supervisord
29979 root 20 0 883932 10104 4116 S 0.3 0.2 22:46.09 AliHids
10920 root 20 0 206876 9076 4340 S 0.0 0.2 175:58.47 AliYunDun
17324 root 20 0 23396 4712 1880 S 0.0 0.1 0:00.66 bash
17281 root 20 0 23324 4508 1756 S 0.0 0.1 0:00.06 bash
17306 root 20 0 103772 4196 3224 S 0.0 0.1 0:00.28 sshd
815 root 20 0 61368 3060 2384 S 0.0 0.1 0:05.82 sshd
2472 www-data 20 0 86668 2996 1096 S 0.0 0.1 0:16.94 nginx
2469 www-data 20 0 86800 2992 1100 S 0.0 0.1 0:17.75 nginx
2470 www-data 20 0 86668 2992 1076 S 0.0 0.1 0:18.96 nginx
2471 www-data 20 0 86668 2992 1104 S 0.0 0.1 0:16.76 nginx
正康前端测试 - 清空缓存直接访问admin.zkkj168.com - 进程数 1 正常 - fa.css 404 - 结论:此处不会影响系统资源,不会导致系统错误
登录进入后台
- 进程数 1 正常
- fa.css 404
- count 200 http://api.zkkj168.com:81/sos/count
- 结论:此处不会影响系统资源,不会导致系统错误
注销登录(开启1个错误轮寻页面)
- 进程数 1-2
- count 500 10s一次轮寻,并没有明显占用资源
- 结论:此处不会影响系统资源,不会导致系统错误
注销登录(同时开启20个错误轮寻页面)
- 进程数 1-2
- 结论:此处不会影响系统资源,不会导致系统错误
进入各菜单,测试是否由于程序错误导致资源占用过高
- 进程数 1
- 仪表盘
- 总部后台系统所有栏目
- 客服后台系统所有栏目
社区/机构后台系统所有栏目
进程数 2
实时定位系统-实时定位-老人设备历史记录(数据最庞大的查询)
结论:后台系统正常,不会导致系统错误
0.负载过高的业务分离
独立使用RDS服务运行Mysql - 利于数据库备份、容灾处理 - 缓解主服务器内存压力(减少约1.5G内存占用)
优化server进程中数据库连接池 - 减少过多闲置链接(600降低到100以内) - 限制最大链接(设置为200)
1.临时方案
重启php5-fpm即可
service restart php5-fpm
2.永久方案
建议1:写监控程序,当进程php5-fpm占用CPU超过90%,执行重启php5-fpm
建议2:排查php.ini检查是具体哪个插件导致的CPU占用过高,从根本进行优化
建议3:实现LNMP基础服务双机备份及双活部署
作者:ryanemax
微信关注:ryanemax (刘雨飏)
本文出处:https://romantic-hoover-f991f1.netlify.com/faq/lnmp/502.LNMP%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/
授权协议:
CC BY-SA 4.0