You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel应用并发连接超200时遭拒绝,节流配置无效求助

Laravel应用并发连接超200被拒的排查方案

你的问题并非Laravel节流配置导致,而是底层Web服务器、PHP-FPM、系统资源或数据库连接池的并发限制引发的,按以下步骤逐一排查:

1. 检查Web服务器(Nginx/Apache)的并发参数

Nginx配置调整

编辑Nginx主配置文件(通常为/etc/nginx/nginx.conf),确保参数满足高并发需求:

http {
    # 自动匹配CPU核心数设置进程数
    worker_processes auto;
    # 提升进程可打开的最大文件句柄数
    worker_rlimit_nofile 65535;

    events {
        # 每个worker进程的最大连接数,需大于目标并发数
        worker_connections 65535;
        # 启用epoll优化Linux高并发性能
        use epoll;
        # 让worker进程一次性接收所有新连接
        multi_accept on;
    }

    server {
        # 增大监听队列长度,避免连接被直接拒绝
        listen 80 backlog=1024;
        # ...其他站点配置
    }
}

修改后重启Nginx:sudo systemctl restart nginx

Apache配置调整

编辑Apache的mpm.conf文件(如/etc/httpd/conf.modules.d/00-mpm.conf),调整进程相关参数:

<IfModule mpm_prefork_module>
    # 最大并发请求数,需大于200
    MaxRequestWorkers 300
    # 每个子进程处理的最大请求数,防止内存泄漏
    MaxConnectionsPerChild 500
    # 初始启动的子进程数
    StartServers 20
    # 最小空闲子进程数
    MinSpareServers 10
    # 最大空闲子进程数
    MaxSpareServers 30
</IfModule>

重启Apache:sudo systemctl restart httpd

2. 调整PHP-FPM的进程限制

编辑PHP-FPM的www.conf文件(如/etc/php/8.2/fpm/pool.d/www.conf,版本号按需调整):

# 推荐用dynamic或ondemand模式,避免static模式内存占用过高
pm = dynamic
# 最大子进程数,需结合服务器内存计算(每个PHP进程约20-50M)
pm.max_children = 300
# 启动时的初始进程数
pm.start_servers = 20
# 最小空闲进程数
pm.min_spare_servers = 10
# 最大空闲进程数
pm.max_spare_servers = 30
# 每个子进程处理的最大请求数,防止内存泄漏
pm.max_requests = 500

重启PHP-FPM:sudo systemctl restart php8.2-fpm

3. 检查数据库连接池限制

数据库自身连接数

以MySQL为例,登录数据库执行命令查看当前限制:

SHOW VARIABLES LIKE 'max_connections';

若结果小于目标并发数,修改MySQL配置文件(如/etc/my.cnf或/etc/mysql/my.cnf):

[mysqld]
max_connections = 300

重启MySQL:sudo systemctl restart mysqld

Laravel数据库连接池(若使用)

如果用了Laravel Octane或第三方连接池扩展,修改config/database.php:

'mysql' => [
    // ...其他配置
    'pool' => [
        'min' => 10,
        'max' => 300,
        'idle' => 60,
    ],
],

4. 提升系统文件句柄限制

Linux默认文件句柄数(每个进程可打开的文件/连接数)可能不足,临时调整命令:

ulimit -n 65535

永久生效需编辑/etc/security/limits.conf:

* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535

重启服务器后设置生效。

5. 确认Laravel节流的缓存驱动

Laravel节流依赖缓存,file缓存在高并发下性能不足会导致节流判断异常,修改.env改用Redis或Memcached:

CACHE_DRIVER=redis

内容的提问来源于stack exchange,提问作者Vasanthan R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 09:35:16