• linux设置打开文件句柄数


    介绍

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

    今天早上tomcat应用就报了上述错误:

    1.查看方法

    使用ulimit -a 或者 ulimit -n

    open files (-n) 1024 是linux操作系统对一个进程打开的文件句柄数量的限制(也包含打开的套接字数量)

    这里只是对用户级别的限制,其实还有个是对系统的总限制,查看系统总线制:

    # cat /proc/sys/fs/file-max

    man proc,可得到file-max的描述:

    /proc/sys/fs/file-max
                  This  file defines a system-wide limit on the number of open files for all processes.  (See
                  also setrlimit(2),  which  can  be  used  by  a  process  to  set  the  per-process  limit,
                  RLIMIT_NOFILE,  on  the  number  of  files it may open.)  If you get lots of error messages
                  about running out of file handles, try increasing this value:

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

    也就是说,这项参数是系统级别的。

    2.修改方法

     临时生效:

    # ulimit -SHn 10000
    其实ulimit 命令身是分软限制和硬限制,加-H就是硬限制,加-S就是软限制。默认显示的是软限制,如果运行ulimit 命令修改时没有加上-H或-S,就是两个参数一起改变。

    软限制和硬限制的区别?

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

    永久生效

    要想ulimits 的数值永久生效,必须修改配置文件/etc/security/limits.conf
    在该配置文件中添加

    * soft nofile 65535   
    
    * hard nofile 65535  
    
    

    * 表示所用的用户,或者执行以下命令:

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

    修改系统总限制

    其实上的修改都是对一个进程打开的文件句柄数量的限制,我们还需要设置系统的总限制才可以。

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

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

    上面是临时生效方法,重启机器后会失效;

    永久生效方法:

    修改 /etc/sysctl.conf, 加入

    fs.file-max = 6553560 重启生效

    查看应用进程打开的文件句柄数量方法:

    [root@pcidata-svr1 ~]# lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more

    统计单个进程打开的文件句柄数

    [root@pcidata-svr1 ~]# lsof -p 1779|wc -l

    通过PID再查看相应的进程

    [root@pcidata-svr1 ~]# ps aux|grep 1779

  • 相关阅读:
    网络爬虫学习软件篇-Python(一)下载安装(超详细教程,傻瓜式说明)
    Vue.js+BootStrap+.Net Core开发后台管理系统 初次接触学习记录(11-7)
    形参 ref 到底是做什么用的?
    SweetAlert拒绝单一的弹出警告框
    轻松学习C语言编程之函数知识详解
    C语言的这个小知识点,竟然连开发多年的老司机都了解的不完全
    「C语言」编程学习—控制语句goto语句解析!
    数学思维+C语言画小猪佩奇,来试试?
    抖音很火的告白编程程序,C语言一样也能做
    世界最强的编程语言:C语言
  • 原文地址:https://www.cnblogs.com/Dev0ps/p/9232984.html
Copyright © 2020-2023  润新知