我正在我的全新服务器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正在运行
这可能是问题吗?
非常感谢
答案 0 :(得分:2)
允许并发连接有两个方面:
<强> 1。网络服务器
检查Web服务器允许的并发连接数。
见
明智地选择您的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
解决了这个问题。