zoukankan      html  css  js  c++  java
  • 【Linux命令】ulimit设置最大文件打开数

    一、简介

      在Linux下有时会遇到Socket/File : Can't open so many files的问题。其实Linux是有文件句柄限制的,而且Linux默认一般都是1024(阿里云主机默认是65535)。在生产环境中很容易到达这个值,因此这里就会成为系统的瓶颈。

    二、查看方法

    1)查看当前系统最大打开数详细信息ulimit -a

    [root@localhost ~]# ulimit -a
    core file size          (blocks, -c) 0
    data seg size           (kbytes, -d) unlimited
    scheduling priority             (-e) 0
    file size               (blocks, -f) unlimited
    pending signals                 (-i) 63405
    max locked memory       (kbytes, -l) 64
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 65535
    pipe size            (512 bytes, -p) 8
    POSIX message queues     (bytes, -q) 819200
    real-time priority              (-r) 0
    stack size              (kbytes, -s) 8192
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 63405
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited

    open files (-n)65535是linux操作系统对一个进程打开的文件句柄数量的限制(也包含打开的套接字数量)这里只是对用户级别的限制,还有是对系统的总限制(下面介绍)。

    2)只查看当前系统最大文件打开数ulimit -n

    [root@localhost ~]# ulimit -n
    65535

    3)查看当前进程的打开文件数和最大文件数

    比如我们 查看tomcat的打开文件数和最大文件数,先查询出tomcat的进程号,然后在通过进程号查询进程打开文件数

    [root@VM_0_10_centos ~]# ps -ef | grep tomcat | grep -v "grep" | awk '{print $2}'
    21820
    [root@VM_0_10_centos ~]# ls /proc/21820/fd | wc -l
    70
    [root@VM_0_10_centos ~]# cat /proc/21820/limits | grep open
    Max open files 100002 100002 files

    4)查看系统总限制

    [root@VM_0_10_centos ~]# cat /proc/sys/fs/file-max 
    183930

    即file-max是设置系统所有进程一共可以打开的文件数量 。同时一些程序可以通过setrlimit调用,设置每个进程的限制。如果得到大量使用完文件句柄的错误信息,是应该增加这个值。该项参数是系统级别的。

    三、修改方法

    1.临时生效

    [root@VM_0_10_centos ~]# ulimit -SHn 65535

    ulimit分为软限制和硬限制。-H代表硬限制,-S代表软限制。默认是软限制,如果运行ulimit 命令修改时没有加上-H或-S,则两个参数一起改变。

    硬限制就是实际的限制,而软限制是警告限制,它只会给出警告。

    2.永久生效

    永久生效,需要修改配置文件/etc/security/limits.conf ,在配置文件中加入如下两行

    echo "* soft nofile 65535"  >> /etc/security/limits.conf
    echo "* hard nofile 65535"  >> /etc/security/limits.conf

    * 代表所有用户

    3.修改系统总限制

    如我们设置进程打开的文件句柄数是1024 ,但是系统总线制才500,所以所有进程最多能打开文件句柄数量500。从这里我们可以看出只设置进程的打开文件句柄的数量是不行的。所以需要修改系统的总限制才可以。

    1)临时生效

    echo  6553560 > /proc/sys/fs/file-max

    2)永久生效

    修改 /etc/sysctl.conf, 加入
    fs.file-max = 6553560 重启生效

    参考网址:https://www.cnblogs.com/pangguoping/p/5791432.html

  • 相关阅读:
    MATLAB读取文件——从非常规文本文件中读取数据
    注意——CAN通信设备控制
    硬件——USB传输速度和物理接口
    STM32F4-浮点DSP库的MDK开发环境的设置
    CRC校验
    蓝牙串口使用心得
    Mysql 层级、执行顺序、执行计划分析
    讲一讲垃圾回收算法
    【转】Java中的新生代、老年代、永久代和各种GC
    工具链接
  • 原文地址:https://www.cnblogs.com/HeiDi-BoKe/p/11654622.html
Copyright © 2011-2022 走看看