- 多次受到同事反应alta系统经常出现502错误,一直未找到原因
2.alta开发初步定为到mysql会话较多 - 修改了php-fpm (/usr/local/php/etc/php-fpm.conf)使其接收更多请求:
[global]
log_level = error
daemonize = yes
events.mechanism = epoll
rlimit_files = 50240
emergency_restart_threshold = 60
emergency_restart_interval = 60s
[fcgi]
user = webapps
group = webapps
listen = 0.0.0.0:9000
listen.backlog = 2048
pm = dynamic
pm.max_children = 200
pm.start_servers = 50
pm.min_spare_servers = 36
pm.max_spare_servers = 200
pm.max_requests = 700
request_terminate_timeout = 40s
request_slowlog_timeout = 20s
slowlog = /usr/local/php/var/log/php-slow.log
pm.status_path = /php-fpm_status
4.使用多个方式检查当前socket连接状态,比如:
netstat -an | awk '/^tcp/ {++s[$NF]} END {for(a in s) print a,s[a]} ' | sort -n -k2 -r
发现time_wait socket非常多。关闭nginx和php-fpm,等待time_wait socket被释放完。最后充气球nginx和php-fpm。
5.短时间内好了。马上看到又出现问题。观察到mysql会话还是越来越多。
6.再次访问网站,报错:
Connect Error: 1129 -- Host '172.17.0.17' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
http://admin.mobcastlead.com/admin?m=advert&p=appdata
上述错误表示mysql发现某ip连接数太多了,已经屏蔽之。
于是登录winIP,使用navicat打开命令行,输入flush hosts并执行,终于解除限制了!
我还一直在是flush-hosts呢!尴尬。。知道我又搜了下,看到如下回复:
root登陆mysql执行flush hosts 或mysqladmin执行flush hosts 或者重启MySQL服务
- 赶紧问了一下alta开发他们系统会很频繁地查询mysql吗?得到回到是只有redis查询失败才会这样。
于是又观察到redis的socket连接非常多且绝大多数是time_wait状态。
于是问他们是不是没有用redis连接池。对方开发意识到了,于是修改短连接为长连接。
稍后,问题很快得到改善。redis连接立马降低了,mysql终于稳定下来了——没有频繁的访问了。