Linux 下应用程序最大打开文件数的理解和修改

2016-03-31 16:18 29 1 收藏

下面图老师小编跟大家分享一个简单易学的Linux 下应用程序最大打开文件数的理解和修改教程,get新技能是需要行动的,喜欢的朋友赶紧收藏起来学习下吧!

【 tulaoshi.com - 服务器 】

Linux 下应用程序最大打开文件数的理解和修改

   运行在Linux系统上的Java程序运行了一段时间后出现"Too many open files"的异常情况。

  这种情况常见于高并发访问文件系统,多线程网络连接等场景。程序经常访问的文件、socket在Linux中都是文件file,系统需要记录每个当前访问file的name、location、access authority等相关信息,这样的一个实体被称为file entry。open files table(图中橙色标识)存储这些file entry,以数组的形式线性管理。文件描述符(file descriptor)作为进程到open files table的指针,也就是open files table的下标索引,将每个进程与它所访问的文件关联起来了。

Linux 下应用程序最大打开文件数的理解和修改 图老师

  每个进程中都有一个file descriptor table管理当前进程所访问(open or create)的所有文件,文件描述符关联着open files table中文件的file entry。细节不表,对于open files table能容纳多少file entry。Linux系统配置open files table的文件限制,如果超过配置值,就会拒绝其它文件操作的请求,并抛出Too many open files异常。这种限制有系统级和用户级之分。

  系统级:

  系统级设置对所有用户有效。可通过两种方式查看系统最大文件限制

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

  2 sysctl -a 查看结果中fs.file-max这项的配置数量

  如果需要增加配置数量就修改/etc/sysctl.conf文件,配置fs.file-max属性,如果属性不存在就添加。

  配置完成后使用sysctl -p来通知系统启用这项配置

  用户级:

  Linux限制每个登录用户的可连接文件数。可通过 ulimit -n来查看当前有效设置。如果想修改这个值就使用 ulimit -n 命令。

  对于文件描述符增加的比例,资料推荐是以2的幂次为参考。如当前文件描述符数量是1024,可增加到2048,如果不够,可设置到4096,依此类推。

  在出现Too many open files问题后,首先得找出主要原因。最大的可能是打开的文件或是socket没有正常关闭。为了定位问题是否由Java进程引起,通过Java进程号查看当前进程占用文件描述符情况:

  lsof -p $java_pid 每个文件描述符的具体属性

  lsof -p $java_pid | wc -l 当前Java进程file descriptor table中FD的总量

  分析命令的结果,可判断问题是否由非正常释放资源所引起。

  如果我们只是普通用户,只是暂时的修改ulimit -n,可以直接shell命令来修改(ulimit -n 1024000)。但是这个设置时暂时的保留!当我们退出bash后,该值恢复原值。

  如果要永久修改ulimit,需要修改/etc/security/limits.conf。

  vim /etc/security/limits.conf

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/fuwuqi/)

  # 添加如下的行

  * soft nofile 2048

  * hard nofile 2048

  以下是说明:

  * 代表针对所有用户

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/fuwuqi/)

  noproc 是代表最大进程数

  nofile 是代表最大文件打开数

  添加格式:

  [username | @groupname] type resource limit

  [username | @groupname]:设置需要被限制的用户名,组名前面加@和用户名区别。也可以用通配符*来做所有用户的限制。

  type:有 soft,hard 和 -,soft 指的是当前系统生效的设置值。hard 表明系统中所能设定的最大值。soft 的限制不能比hard 限制高。用 - 就表明同时设置了 soft 和 hard 的值。

  resource:

  core - 限制内核文件的大小(kb)

  date - 最大数据大小(kb)

  fsize - 最大文件大小(kb)

  memlock - 最大锁定内存地址空间(kb)

  nofile - 打开文件的最大数目

  rss - 最大持久设置大小(kb)

  stack - 最大栈大小(kb)

  cpu - 以分钟为单位的最多 CPU 时间

  noproc - 进程的最大数目

  as - 地址空间限制

  maxlogins - 此用户允许登录的最大数目

  实例:

  username soft nofile 2048

  username hard nofile 2048

  @groupname soft nofile 2048

  @groupname hard nofile 2048

来源:http://www.tulaoshi.com/n/20160331/2052233.html

延伸阅读
sakulagi 回复于:2003-08-13 08:06:50 lsof|wc -l 妮子的小辫 回复于:2003-08-13 17:04:25 谢谢老大:) 另外,我看到,打开的文件句柄是在 /proc/sys/fs/file-nr 看:) sakulagi 回复于:2003-08-14 07:58:13 谢谢你的信息^_^
iphone应用程序图标不越狱修改方法 很多人拿到 iPhone 之后都喜欢折腾主题,以让自己的设备更加个性化。但一般来说,如果不对手机进行越狱(Jailbreak)以取得系统权限的话,很难修改这些东西。那么,真的就没有办法了吗?非也!这里就给大家介绍一个不越狱修改 iPhone 应用程序图标的方法。 这里我们需要用到一款非常小巧的软件iPh...
标签: 电脑入门
在MAC的使用过程中,有时我们想要知道一些小的资讯,比如计算、航班以及日历等。这些是不需要大的应用程序的,只要一个小小的应用程序便可搞定。那么,不如使用 Dashboard 吧。在这里面有许多小的应用程序,可以帮助你解决许多问题哦。 Dashboard 里还有 widget 可搭配 iTunes 或 iCal 等 Mac 应用程式使用,让您不必打开原应用程式,即可...
标签: 电脑入门
在MAC的使用过程中,安装应用程序是一件很麻烦的事。不少用户在安装完应用程序后,发现自己找不到它们的文件夹。面对这个问题该如何解决呢?现在图老师小编就来告诉大家这个问题的解决方法。 Mac应用程序在哪? 方法一: 1、在系统的 Dock 栏中,找到一个叫住 Launchpad 的图标,点击打开它。 2、接着就可以看到当前 Mac 中所有的应...
标签: Web开发
始      首先我们从一个简单的XML文档开始。现在来看看我们最初的演示文档--CD 目录:          ?xml version="1.0"?    CATALOG    CD    TITLEEmpire Burlesque /TITLE    ARTISTBob Dylan /ARTIST &nb...

经验教程

915

收藏

70
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部