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。网络服务器
检查您的网络服务器允许的并发连接数。
见
- The Secret To 10 Million Concurrent Connections -The Kernel Is The Problem, Not The Solution
- How many socket connections can a web server handle?
- How do you increase the max number of concurrent connections in Apache?
- 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
解决了问题。
我正在我的全新服务器上执行一些负载测试 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。网络服务器
检查您的网络服务器允许的并发连接数。
见
- The Secret To 10 Million Concurrent Connections -The Kernel Is The Problem, Not The Solution
- How many socket connections can a web server handle?
- How do you increase the max number of concurrent connections in Apache?
- 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
解决了问题。