zoukankan      html  css  js  c++  java
  • [转载]性能测试工具 2 步解决 too many open files 的问题,让服务器支持更多连接数

    [转载]性能测试工具 2 步解决 too many open files 的问题,让服务器支持更多连接数

    大话性能 · 2018年10月09日 · 最后由 大话性能 回复于 2018年10月09日 · 最后更新自管理员 恒温 · 29458 次阅读

    问题背景

    我们在进行压测的时候,经常会遇到,当你的服务器在大并发达到一定数值时,就会报出“too many open files”的错误。

    问题解析

    这是因为,在Linux系统中任何一个对象都是一个文件,都需要占用一个文件句柄,我们在压测的时候,一个连接就是用到一个文件句柄,对于绝大部分 Linux 操作系统, 默认情况下只有1024个句柄数! 因为操作系统包含最大打开文件数(Max Open Files)限制, 分为系统全局的限制和进程级的限制。那么如何修改服务器本身的系统参数,让机器可以支撑百万的一个连接呢?

    全局限制

    首先是进行全局限制的一个修改。

    在 Linux 下执行:

    cat /proc/sys/fs/file-nr

    会打印出类似下面的一行输出:

    5100 0 101747

    第三个数字 101747 就是当前系统的全局最大打开文件数(Max Open Files), 可以看到, 只有 10 万, 所以, 在这台服务器上无法支持百万,默认情况下很多系统的这个数值更小, 为了修改这个数值, 用 root 权限修改 /etc/sysctl.conf 文件:

    fs.file-max = 1020000

    net.ipv4.ip_conntrack_max = 1020000

    net.ipv4.netfilter.ip_conntrack_max = 1020000

    进程限制

    然后是修改进程限制

    可以在服务器上先执行:ulimit -n,观察下结果

    输出:

    1024

    说明当前 Linux 系统的每一个进程只能最多打开 1024 个文件. 为了支持百万连接, 你同样需要修改这个限制.

    若是临时修改,执行下面命令即可,比较快速。

    ulimit -n 1020000

    不过, 如果你不是 root, 可能不能修改超过 1024, 会报错:

    -bash: ulimit: open files: cannot modify limit: Operation not permitted。

    若是需要永久修改,就行需要在配置文件中修改。

    编辑 /etc/security/limits.conf 文件, 加入如下行:

    vi /etc/security/limits.conf

    • hard nofile 1020000
    • soft nofile 1020000

    完成上述2处修改,你的服务器本身就可以支撑起百万的一个连接了,而不会出现“too many open files”的错误。
    更多性能测试实战技能可以关注公众号大话性能,继续学习。
    https://dwz.cn/R6s45buP

     
  • 相关阅读:
    Google Guava官方教程(中文版)
    maven POM.xml 标签详解
    Linux内存文件系统tmpfs(/dev/shm)详细介绍
    linux 如何查看目录的剩余空间大小?
    CSS position绝对定位absolute relative
    java 笔记
    js笔记
    AFNetworking监控网络状态以及下载的进度条显示
    HTTPS网络请求时plist文件的设置
    KVO监测tableView的滑动
  • 原文地址:https://www.cnblogs.com/xuanbjut/p/11652966.html
Copyright © 2011-2022 走看看