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

我正在对我的全新服务器Apache / PHP / Mysql(Bitnami LAMP stack。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运行

可能是这个问题?

非常感谢


有两个区域允许并发连接:

1.网络服务器

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

看到

  • 千万个并行连接的秘密 - 内核是问题,而不是解决方案
  • Web服务器可以处理多少个套接字连接?
  • 你如何增加Apache中的最大并发连接数?
  • 如何优化Apache Web服务器以实现最大并发连接或增加Apache中的最大客户端
  • 明智地选择您的Web服务器来处理更多的并发连接。

    2.数据库和打开文件

    检查你的MySQL DB是否能够处理来自WebServer PHP的最大并发连接。

    将max_connections设置为更高的值。

    set global max_connections := 800;
    

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


    解决方案其实很简单:

    我使用的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解决了问题。

    链接地址: http://www.djcxy.com/p/90411.html

    上一篇: Mysql show no more than 5 concurrent connection

    下一篇: WHERE clause with non primary key disadvantages