问题缘由
线上一个网站在运行一段时间后,页面打开速度变慢随之出现502 bad gateway
的错误。
问题分析
由502 bad gateway
的错误,我们知道就是nginx链接后端的php,而php程序没有及时返回,造成了超时。
那么造成php超时的原因也有多种,比如:
- php-fpm资源消耗光
- 调用外部资源超时,比如外部的web service、数据库等等
- ….
出现问题,我们先登录服务器查看相关日志。
结合我们的业务,首先想到了mysql数据库,先查看了一下mysql数据库的状态,通过show full processlist命令发现有大量的链接处于sleep状态。
sleep
状态的意思就是说,某个客户端一直占着这个链接,但是什么事也不干,或者是客户端压根儿就已经断开了,而服务端却不知道。
我们知道,mysql的连接数是有限制的,比如默认是151个,那么当大量的链接处于sleep状态时,php程序就无法同mysql建立链接,就会发生超时现象。