Mysql显示不超过5个并发连接

时间:2016-02-19 14:47:44

标签: mysql performance testing load-testing

我正在我的全新服务器Apache / PHP / Mysql(Bitnami LAMP堆栈上执行一些负载测试.Php 7.0.3 / MySQL 5.7.10)。我在一个loadBalancer后面使用AWS和1个EC2实例。 目前我正在使用loader.io或jmeter进行测试。我正在测试一个执行此查询的非常简单的API:

select *,sleep(0.5) from debug limit 1

我添加了sleep(0.5),因为我想看看服务器如何处理多个并发连接,我发现了一个瓶颈:如果我运行“SHOW PROCESSLIST”,即使我有10个并发用户,我也只能看到5个进程。负载测试显示连接已排队,因为测试期间响应时间从500毫秒增加到几秒(取决于测试持续时间和并发用户数)。

我检查了

select @@max_connections

它是151(默认值)。 max_user_connections为0。 我应该检查哪些其他参数来增加数据库上的并发连接数?

如果我用5个并发用户运行测试,每个用户都会在500毫秒内得到响应。如果我添加的并发用户数多于响应时间减慢的速度。

如果我在不访问数据库的API上运行负载测试,即使有400个并发用户也没有问题。

编辑:

使用HTOP进行监控我看到:

  

任务:34,245 thr; 2正在运行

这可能是问题吗?

非常感谢

2 个答案:

答案 0 :(得分:2)

允许并发连接有两个方面:

<强> 1。网络服务器

检查Web服务器允许的并发连接数。

  1. The Secret To 10 Million Concurrent Connections -The Kernel Is The Problem, Not The Solution
  2. How many socket connections can a web server handle?
  3. How do you increase the max number of concurrent connections in Apache?
  4. How to optimize apache web server for maximum concurrent connections or increase max clients in apache
  5. 明智地选择您的Web服务器以处理更多并发连接。

    <强> 2。数据库和打开文件

    检查您的MySQL数据库是否能够处理来自WebServer PHP的最大并发连接。

    max_connections设置为更高的金额。

    set global max_connections := 800;
    

    同时检查您的操作系统的open_files_limit。在linux上,默认情况下,您的进程限制为1024个文件。这是非常低的,因为每个线程,连接,当然还有文件 - 在linux中创建一个文件句柄。因此,将open_files_limit设置为一些慷慨的数字(比如10000)以清除与操作系统的许多连接。

答案 1 :(得分:2)

解决方案实际上非常简单:

我正在使用的Bitnami LAMP堆栈配置了PHP-FPM,因此配置不在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解决了这个问题。