zoukankan      html  css  js  c++  java
  • Linux系统中打开文件数量的查看方法

    ulimit -n 4096

        也就是限制用户的最大文件打开数为4096个
        在网上查了关于怎么查看文件打开数的文章大致有两种说法
        /proc/sys/fs/file-nr
        该文件与 file-max 相关,它有三个值:
        已分配文件句柄的数目[来源[url]www.iocblog.net[/url]]
        已使用文件句柄的数目
        文件句柄的最大数目
        该文件是只读的,仅用于显示信息。
        查看所有进程的文件打开数
        lsof |wc -l
        查看某个进程打开的文件数
        lsof -p pid |wc -l
     
    系统设置--ulimit
    语  法:ulimit [-aHS][-c <core文件上 限>][-d <数据节区大小>][-f <文件大小>][-m <内存大小>][-n <文件数 目>][-p <缓冲区大小>][-s <堆叠大小>][-t <CPU时间>][-u <程序数 目>][-v <虚拟内存大小>]

    补充说明:ulimit为shell内建指令,可用来控制shell执行程序的资源。

    参  数:
      -a  显示目前资源限制的设定。 
      -c <core文件上限>  设定core文件的最大值,单位为区块。 
      -d <数据节区大小>  程序数据节区的最大值,单位为KB。 
      -f <文件大小>  shell所能建立的最大文件,单位为区块。 
      -H  设定资源的硬性限制,也就是管理员所设下的限制。 
      -m <内存大小>  指定可使用内存的上限,单位为KB。 
      -n <文件数目>  指定同一时间最多可开启的文件数。 
      -p <缓冲区大小>  指定管道缓冲区的大小,单位512字节。 
      -s <堆叠大小>  指定堆叠的上限,单位为KB。 
      -S  设定资源的弹性限制。 
      -t <CPU时间>  指定CPU使用时间的上限,单位为秒。 
      -u <程序数目>  用户最多可开启的程序数目。 
      -v <虚拟内存大小>  指定可使用的虚拟内存上限,单位为KB。
     
     
    Linux系统的文件句柄数量问题
    linux下面部署应用的时候,有时候会遇上socket/file: can‘t open so many files的问题,其实linux是有文件句柄限制的(就像winxp?),而且默认不是很高,一般都是1024,作为一台生产服务器,其实很容易就达到这个数量,因此我们需要把这个值改大一些。
     
      大概知道ulimit这个命令是相关的,上google搜索了一下,大多数说的很含糊,也没有统一说一下,经过两个小时看了不少文章终于弄清楚ulimit相关的一些配置问题。
     
      我们可以用ulimit -a来查看所有限制值,我只关心文件句柄数量的问题
     
      open files (-n) 1024
     
      这个就是限制数量
     
      这里,有很多ulimit的文章都说的很含糊,究竟这个1024是系统的限制,还是用户的限制呢。其实,这个是用户限制来的,完整的说法,应该是当前用户准备要运行的程序的限制。
     
      1、这个限制是针对单个程序的限制
     
      2、这个限制不会改变之前已经运行了的程序的限制
     
      3、对这个值的修改,退出了当前的shell就会消失
     
      比如说,我先运行了一个程序a,然后通过ulimit修改了限制为2048,然后运行b,然后退出了shell再登录,然后运行c.那就只有b可以打开2048个句柄。
     
      如果我们需要改变整体的限制值,或者我们运行的程序是系统启动的,应该怎么处理呢
     
      其中一个方法,是想ulimit修改命令放入/etc/profile里面,但是这个做法并不好
     
      正确的做法,应该是修改/etc/security/limits.conf
     
      里面有很详细的注释,比如
     
      * soft nofile 2048
     
      * hard nofile 32768
     
      就可以将文件句柄限制统一改成软2048,硬32768
     
      这里涉及另外一个问题,什么是软限制,什么是硬限制
     
      硬限制是实际的限制,而软限制,是warnning限制,只会做出warning
     
      其实ulimit命令本身就有分软硬设置,加-h就是硬,加-s就是软
     
      默认显示的是软限制,如果修改的时候没有加上的话,就是两个一起改
     
      配置文件最前面的一位是domain,设置为星号代表全局,另外你也可以针对不同的用户做出不同的限制
     
      修改了,重新登录用ulimit一开就立刻生效了,不过之前启动过的程序要重新启动才能使用新的值。我用的是centos,似乎有些系统需要重启才能生效。
     
      ulimit其实就是对单一程序的限制
     
      那系统总限制呢
     
      其实是在这里,/proc/sys/fs/file-max
     
      可以通过cat查看目前的值,echo来立刻修改
     
      另外还有一个,/proc/sys/fs/file-nr
     
      只读,可以看到整个系统目前使用的文件句柄数量
     
      查找文件句柄问题的时候,还有一个很实用的程序lsof 
      可以很方便看到某个进程开了那些句柄
     
      也可以看到某个文件/目录被什么进程占用了。
  • 相关阅读:
    PAT (Advanced Level) Practice 1071 Speech Patterns (25分)
    PAT (Advanced Level) Practice 1070 Mooncake (25分)
    PAT (Advanced Level) Practice 1069 The Black Hole of Numbers (20分)
    PAT (Advanced Level) Practice 1074 Reversing Linked List (25分)
    PAT (Advanced Level) Practice 1073 Scientific Notation (20分)
    第一次冲刺个人总结01
    构建之法阅读笔记01
    人月神话阅读笔记01
    四则运算2
    学习进度条(软件工程概论1-8周)
  • 原文地址:https://www.cnblogs.com/xiaOt119/p/2547930.html
Copyright © 2011-2022 走看看