详解 Too many open files &-bash: ulimit: max user processes: cannot modify limit

运行在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的下标索引,将每个进程与它所访问的文件关联起来了。



每个进程中都有一个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 <setting number> 命令。

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

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

Java代码 复制代码 收藏代码
  1. lsof -p $java_pid 每个文件描述符的具体属性
  2. lsof -p $java_pid | wc -l 当前Java进程file descriptor table中FD的总量
lsof -p $java_pid 每个文件描述符的具体属性
lsof -p $java_pid | wc -l  当前Java进程file descriptor table中FD的总量


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

更改如下文件:

vi /etc/security/limits.conf

* - nofile 65536
# End of file
ocdc    soft    nofile  65536
ocdc    hard    nofile  65536
root    soft    nofile  65536
root    hard    nofile  65536

 

 

 

2、

-bash: ulimit: max user processes: cannot modify limit错误

由于/etc/profile文件里设置了ulimit -u unlimited

普通用户登录时,没权限执行ulimited命令,所以报这个错误

将其注释掉即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]和\[2\]中的信息显示,当尝试使用ulimit命令修改文件打开限制时,出现了"Operation not permitted"的错误提示。这意味着当前用户没有足够的权限来修改这个限制。这通常是由于系统管理员对用户的权限进行了限制所导致的。引用\[3\]中的信息也表明,在从root用户切换到oracle用户时,同样出现了类似的错误提示。因此,问题的原因是当前用户没有足够的权限来修改文件打开限制。 要解决这个问题,你需要联系系统管理员或具有足够权限的用户来修改文件打开限制。只有具有足够权限的用户才能修改ulimit的限制。系统管理员可以使用root用户登录,并使用ulimit命令来修改文件打开限制。或者,系统管理员可以为你的用户分配足够的权限,以便你可以自行修改文件打开限制。 总结:问题的原因是当前用户没有足够的权限来修改文件打开限制。要解决这个问题,你需要联系系统管理员或具有足够权限的用户来修改文件打开限制。 #### 引用[.reference_title] - *1* [【core】设置core大小遇到-bash: ulimit: core file size: cannot modify limit: Operation not permitted](https://blog.csdn.net/weixin_43330974/article/details/126481891)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [ulimit: open files: cannot modify limit: Operation not permitted](https://blog.csdn.net/robinson_0612/article/details/8749773)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值