概要:
linux系统默认open files数目为1024, 有时应用程序会报Too many open files的错误,是因为open files 数目不够。这就需要修改ulimit和file-max。特别是提供大量静态文件访问的web服务器,缓存服务器(如squid), 更要注意这个问题。
网上的教程,都只是简单说明要如何设置ulimit和file-max, 但这两者之间的关系差别,并没有仔细说明。

说明:
1. 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
Provides control over the resources available to the shell and to processes started by it, on systems that allow such control.
即设置当前shell以及由它启动的进程的资源限制。
显然,对服务器来说,file-max, ulimit都需要设置,否则就可能出现文件描述符用尽的问题

修改:
1.修改file-max

# echo  6553560 > /proc/sys/fs/file-max  //sysctl -w "fs.file-max=34166",前面2种重启机器后会恢复为默认值

# vim /etc/sysctl.conf, 加入以下内容,重启生效
fs.file-max = 6553560

2.修改ulimit的open file,系统默认的ulimit对文件打开数量的限制是1024

# ulimit -HSn 102400  //这只是在当前终端有效,退出之后,open files又变为默认值。当然也可以写到/etc/profile中,因为每次登录终端时,都会自动执行/etc/profile

# vim /etc/security/limits.conf //加入以下配置,重启即可生效
* soft nofile 65535
* hard nofile 65535

附录:
附录1.
为了让一个程序的open files数目扩大,可以在启动脚本前面加上ulimit -HSn 102400命令。但当程序是一个daemon时,可能这种方法无效,因为没有终端。

附录2.
如果某项服务已经启动,再动态调整ulimit是无效的,特别是涉及到线上业务就更麻烦了。
这时,可以考虑通过修改/proc/’程序pid’/limits来实现动态修改!!!

最新文章

  1. MVC3 新建项目
  2. XidianOJ 1057 卡尔的技能
  3. sql拆分查询
  4. GridControl表头全选操作实现之最优方法
  5. Java类加载器深入理解
  6. linux监控脚本
  7. 简单动态规划——三逆数的O(N^2)解法!
  8. 一个不错的PHP文件页面缓存类
  9. Django的静态资源
  10. iOS开发基础-Plist实现嵌套模型
  11. ssm框架如果想要跨域请求,cors跨域
  12. css自定义滚动条
  13. 使用jenkins自部署Coding项目
  14. P3594 [POI2015]WIL-Wilcze doły
  15. VMware内CentOS7虚拟机硬盘扩容
  16. C++基础知识之动态库静态库
  17. Spring插件3.8.2的安装
  18. 从0开始学golang--1.1--连接ms sql server数据库
  19. Task 6.3 冲刺Two之站立会议1
  20. ActiveMQ队列消息过期时间设置和自动清除解决方案

热门文章

  1. Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Query was empty
  2. Vue.js 基本语法
  3. 基于MATLAB边缘检测算子的实现
  4. tools: idea 2017 激活
  5. iBATIS使用$和#的一些理解
  6. 「mysql优化专题」主从复制面试宝典!面试官都没你懂得多!(11)
  7. SignalR简单Demo
  8. 【MySQL】数据库字段类型
  9. iOS MJRefresh上拉加载更多
  10. webpack 3.X学习之多页面打包