我正在我全新的服务器 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”,即使我有 10 个并发用户,我也只能看到 5 个进程。负载测试显示连接已排队,因为在测试期间响应时间从 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
明智地选择您的 Web 服务器以处理更多并发连接。
<强>2。数据库和打开文件
检查您的 MySQL 数据库是否能够处理来自 WebServer PHP 的最大并发连接数。
设置max_connections到更高的数量。
set global max_connections := 800;
同时检查您操作系统的 open_files_limit。在 Linux 上,您的进程默认限制为 1024 个文件。这是非常低的,因为每个线程、连接,当然还有文件——在 Linux 中构成一个文件句柄。因此,将 open_files_limit 设置为某个较大的数字(例如 10000)以清除您与操作系统的许多连接。
关于Mysql显示不超过5个并发连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35508031/