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

Mysql show no more than 5 concurrent connection

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

select *,sleep(0.5) from debug limit 1

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

我查了

select @@max_connections

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

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

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

编辑:

使用 HTOP 监控我看到:

Tasks: 34, 245 thr; 2 running

会不会是这里的问题?

非常感谢

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

1。网络服务器

检查您的网络服务器允许的并发连接数。

  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

Select 你的 web 服务器明智地处理更多的并发连接。

2。数据库和打开文件

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

max_connections 设置为更高的数量。

set global max_connections := 800;

同时为您的 OS 检查 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 解决了问题。