我正在我的全新服务器Apache/PHP/Mysql (Bitnami堆栈)上执行一些负载测试。我使用的是AWS,loadBalancer后面有一个loadBalancer实例。目前,我正在使用loader.io进行测试。我正在测试一个执行此查询的非常简单的API:
select *,sleep(0.5) from debug limit 1
我添加了睡眠(0.5),因为我想看看服务器在多个并发连接中的行为,我发现了一个瓶颈:如果我运行“显示PROCESSLIST”,即使我有10个并发用户,我也只能看到5个进程。负载测试表明,连接是排队的,因为在测试期间响应时间从500毫秒增长到了几秒(取决于测试的持续时间和并发用户的数量)。
我查过了
select @@max_connections
它是151 (缺省值)。max_user_connections
是0。我应该检查哪些其他参数来增加我的DB上的并发连接的数量?
如果我使用5个并发用户运行测试,每个用户在500毫秒内得到一个响应。如果我添加了比响应时间更多的并发用户,速度就会减慢。
如果我在不访问DB的API上运行负载测试,那么即使对400个并发用户也没有问题。
使用HTOP进行监视--我看到:
任务: 34,245次;2次运行
可能就是这个问题吗?
非常感谢
发布于 2016-02-24 11:10:12
解决办法其实很简单:
我使用的Bitnami灯堆栈是使用PHP配置的,因此配置不是在apache端,而是在php/etc/common.conf
中。
pm=ondemand
pm.max_children=5
pm.start_servers=2
pm.min_spare_servers=1
pm.max_spare_servers=3
pm.max_children=5
的改进解决了这个问题。
发布于 2016-02-22 16:09:34
SHOW GLOBAL STATUS LIKE 'Max_used_connections';
将给出自mysqld启动以来连接的峰值数。
不要以root
的形式运行基准测试。保留了一个额外的连接,以便root
可以在到达max_connections
时进行连接。
与大多数基准一样,它没有衡量任何与现实生活非常相关的东西。您可能是在阻止debug
的第一行。
SELECT SLEEP(0.5);
不会碰到一个表,因此可能会填满151个连接(假设您可以足够快地启动它们)。或者你会发现你把阿帕奇的MaxClients最大化了。或者基准程序的容量。你会发现CPU使用率很低,等等。
https://dba.stackexchange.com/questions/130021
复制相似问题