在测试页面并发压力的时候,并发到80以后,响应速度急剧下降,CPU占用率急剧上升。经分析,是Apache并发数和Mysql并发数匹配问题。
Mysql并发瓶颈
Mysql
的连接数到达150
以上的时候,服务器4
核cpu
占有率会急增,性能会急剧下降。Apache
并发80
的情况下,mysql
连接数基本上到了配置的满额200
(max-connections=200
)。
Apache与mysql的并发关系
Apache
最大并发数配置是600
,大于mysql
最大并发数200
,每个apache
请求要对应一个mysql
连接,而Apache
的并发能力要远大于mysql
服务器的并发能力。高并发情况下,mysql
的查询还没有返回结果,但下一次的apache
请求已经到了,堆积效果就是mysql
都是满额并发运行,可能导致连接mysql
错误:“too many connections
…”。
Apache做Mysql的连接池
从上面分析可以看出, mysql_pconnect
连接Mysql
,但没有控制和管理mysql
连接数,可能导致Mysql
服务器忙死。只要有连接池,就可以解决问题。
利用apache
做mysql
的连接池,即控制apache
的并发数。apache
配置最大并发数(如20
)小于mysql
最大连接数。当并发过大的时候,就自动利用apache
的队列来达到连接池的目的。虽然牺牲了apache
性能,但保证了业务的稳定性和安全性,也不会导致Mysql
服务器忙死。
apache
最大并发数配置的一个缺陷是:无法配置虚拟主机的并发数,只能配置全局并发数。
Mysql并发瓶颈