概要:
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

如果不生效:
请检查以下几点:
首先查看ssh的版本,ssh -V
如果版本是7.3及以下:修改/etc/ssh/sshd_config中 UseLogin的值为yes
UseLogin yes后,重启sshd服务service sshd restart即可。

如果版本是7.4及以上,具体步骤如下:
1、修改/etc/ssh/sshd_config的UsePAM no为UsePAM yes
2、修改/etc/pam.d/sshd以及/etc/pam.d/password-auth为之前版本的文件。
/etc/pam.d/sshd示例:
auth required pam_sepermit.so
auth include password-auth
account required pam_nologin.so
account include password-auth
password include password-auth

pam_selinux.so close should be the first session rule

session required pam_selinux.so close
session required pam_loginuid.so

pam_selinux.so open should only be followed by sessions to be executed in the user context

session required pam_selinux.so open env_params
session optional pam_keyinit.so force revoke
session include password-auth

/etc/pam.d/password-auth示例:
#%PAM-1.0

This file is auto-generated.

User changes will be destroyed the next time authconfig is run.

auth required pam_env.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth required pam_deny.so

account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 500 quiet
account required pam_permit.so

password requisite pam_cracklib.so try_first_pass retry=3 type=
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password required pam_deny.so

session optional pam_keyinit.so revoke
session required pam_limits.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so

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

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

2021-09-02 linux修改open files数相关推荐

  1. Linux修改open files数

    原起 1.Linux系统默认open files数目为1024, 有时应用程序会报Too many open files的错误,是因为open files 数目不够. 2.压力测试防止open fil ...

  2. linux修改open files:ulimit、file-max

    linux修改open files:ulimit.file-max linux系统默认的open files 为1024 ,如果程序报错 too many open files错误,就是因为open ...

  3. 修改linux的最大文件句柄数限制

    修改linux的最大文件句柄数限制 对于一般的应用来说(象Apache.系统进程)1024完全足够使用.但是如何象squid.mysql.java等单进程处理大量请求的应用来说就有点捉襟见肘了.如果单 ...

  4. linux 修改最大线程,修改linux系统用户最大线程数限制

    遇到了坑就记下来,养成一个好习惯,利人利己.java tomcat启动后总是报错:java.lang.OutOfMemoryError: unable to create new native thr ...

  5. 02.Linux的基础命令

    第二讲 Linux常用命令 课程大纲 课程内容 学习效果 掌握目标 Linux基础 Linux的命令 掌握 常用命令 掌握 五.Linux常用命令 (一)Linux的命令 1.命令的必要性 虽然我们可 ...

  6. linux 内存被修改,linux 查询内存(linux 修改 openfiles)

    linux 查询内存(linux 修改 openfiles) 2020-07-24 11:09:44 共10个回答 下面是一个可供选择的,但并不全面的图形或命令行工具列表,这些工具用来检查Linux平 ...

  7. 2021.09.27 MySQL笔记

    2021.09.27 MySQL笔记 文章目录 2021.09.27 MySQL笔记 一.展示当前存在的所有数据库 二.使用(选中)一个数据库 三.创建一个数据表 四.查询并展示该数据库内的所有数据表 ...

  8. Linux修改fstab引起系统无法启动问题的解决方法

    文章列表 crontab执行脚本出错 博客分类: Linux 最近经常碰到关于crontab不能执行的,初步总结了有以下几个原因:第一,脚本的原因:大多数情况下,是我们的脚本的问题,这种问题导致cro ...

  9. 实习日志 (2021.09.13)

    2021.09.13星期一 今天把之前的算法题终于给弄明白了,并能够按照自己的思路去把他给完成,总结这个题目并不是很难,最重要的是要把链表给弄懂,一开始由于我对链表不是很熟悉,导致我在写该题目的时候花 ...

最新文章

  1. JS Array.reduce 实现 Array.map 和 Array.filter
  2. Linux的一些基本命令与MySQL索引
  3. 回文树或者回文自动机,及相关例题
  4. jzoj1082-合并果子【堆,贪心】
  5. php图型分析插件,IMAGE缩略图插件
  6. 教育类网页设计灵感|容易阅读,条理清晰!
  7. R 绘制风洞实验数据曲线
  8. javascript时间戳转换成yyyy-MM-DD格式
  9. html5 中国地图统计图,html5 echarts中国地图网络销售分布图表代码
  10. 信息熵是怎样炼成的 | 纪念信息论之父香农
  11. 史上最大DDoS攻击”之争”
  12. 突破与改变:酒店品牌的中高端之战
  13. 精神小伙儿探秘JVM( 六)
  14. 洛谷 U87052 一线天
  15. linux色彩配置文件,Xfce得到颜色配置文件的支持
  16. 雷电2接口_中国连城 | 总结关于USB、TypeC、雷电接口的冷知识
  17. mysql distinct 优化_SQL优化终于干掉了“distinct”
  18. 使用instantclient_19客户端(免安装)远程连接Oracle服务器端数据库
  19. 揭秘今年Android春招面试必问问题有哪些?成功拿下大厂offer
  20. 土地估价师试题(含答案)

热门文章

  1. 重装系统win7教程
  2. webgl1到webgl2_我如何使用WebGL重建Gorillaz Andromeda音乐视频
  3. poj 1755 Triathlon (半平面交解一元二次不等式)(切割求半平面交)
  4. IDEA自动生成实体类XML
  5. Java 8 Stream Lambda 的学习与使用
  6. Pandas如何读取保存Excel
  7. python计算标准差函数_Python pandas,pandas常用统计方法,求和sum,均值mean,最大值max,中位数median,标准差std...
  8. 前端基础 HTML
  9. 偶尔娱乐一下应该无妨?
  10. 如何用网站统计工具追踪访客来路