系统和nginx的文件描述符和锁定内存限制导致的并发问题

1. nginx并发问题

        在配置高并发的 Nginx 服务器时,Nginx 的默认文件描述符限制和锁定内存限制可能不足以处理大量的并发连接,导致性能瓶颈和潜在的服务中断。

        具体表现就是有大量并发连接的时候(机器池大概拉到了1200台机器),有的请求直接秒断开

2. 什么原因

        Nginx 的文件描述符限制决定了每个工作进程可以打开的文件数,而锁定内存限制则决定了进程可以锁定到物理内存中的内存量。这些限制如果设置过低,会影响 Nginx 的性能和稳定性。在高并发场景下,默认设置可能不够用,需要进行调整。

3. 解决

3.1、临时查看和设置系统文件描述符限制

1、查看当前会话的文件描述符限制 使用ulimit命令查看当前会话的文件描述符限制

ulimit -n

2、设置当前会话的文件描述符限制 使用ulimit命令可以临时增加当前会话的文件描述符限制。例如,将限制设置为102400:

ulimit -n 102400

3.2、永久修改文件描述符限制和锁定内存限制

要永久修改文件描述符限制,可以编辑系统配置文件。这通常需要超级用户权限。

  1. 编辑系统级文件描述符限制

    编辑/etc/security/limits.conf文件,为特定用户或所有用户设置文件描述符限制。

    vim /etc/security/limits.conf
    *   soft nofile 1024000
    *   hard nofile 1024000
    *   soft nproc 1024000
    *   hard nproc 1024000
    *   soft memlock unlimited
    *   hard memlock unlimited

    /etc/security/limits.conf 文件用于配置 Linux 系统中用户和进程的资源限制。这些限制可以防止单个用户或进程占用过多的系统资源,从而保证系统的稳定性。

    *:表示所有用户。

    soft:表示软限制。用户可以临时超过这个限制,但一段时间后系统会尝试将资源使用恢复到这个限制之内。

    hard:表示硬限制。用户无法超过这个限制,系统会严格执行。

    nofile:表示用户能打开的最大文件数。

    nproc:表示用户能启动的最大进程数。

    memlock:表示用户能锁定在内存中的最大字节数。

  2. 检查系统范围的限制

    检查系统范围的文件描述符限制,编辑/etc/sysctl.conf文件并添加以下行:

    vim /etc/sysctl.conf
    fs.file-max = 2097152

    运行以下命令以应用更改:

    sudo sysctl -p

3.3、修改nginx文件描述符限制和锁定内存限制

  1. 编辑 Nginx 的 systemd 服务文件

    vim /usr/lib/systemd/system/nginx.service

    添加以下内容:

    [Service] 
    LimitNOFILE=100000
    # LimitMEMLOCK=unlimited
    LimitMEMLOCK=6553600
  2. 重载 systemd 配置

    sudo systemctl daemon-reload
    sudo systemctl restart nginx
    sudo systemctl status nginx

3.4、验证更改

  1. 检查 Nginx 主进程的文件描述符限制

    使用以下命令找到 Nginx 主进程的 PID:

    ps aux | grep nginx

    运行以下命令查看文件描述符限制:

    cat /proc/[PID]/limits | grep "Max open files"
    cat /proc/[PID]/limits | grep "Max locked memory"

4. 总结

        通过修改 Nginx 的文件描述符和锁定内存限制,可以有效提升服务器的性能和稳定性,确保其能够处理高并发连接数。在修改这些配置时,务必重载 systemd 配置并重启 Nginx 服务以使更改生效。此外,还需结合实际的硬件资源和操作系统配置进行调优,确保系统能够支持这些更高的限制。

  • 25
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值