当前位置:论坛首页 > Linux面板 > Linux面板教程

浅谈日志中记录 too many open files 解决方案

发表在 Linux面板2021-12-21 11:09 [复制链接] 13 6420

日志中记录too many open files 字样,导致打开网站、开启服务失败的原因以及解决方案:
1、文件句柄是什么?
        百度百科:
在文件I/O中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄(file handle),该文件句柄对于打开的文件是唯一的识别依据。要从文件中读取一块数据,应用程序需要调用函数ReadFile,并将文件句柄在内存中的地址和要拷贝的字节数传送给操作系统。当完成任务后,再通过调用系统函数来关闭该文件
2、为什么会报 too many open files?
默认情况下,Linux下默认的文件句柄是 1024,当服务器的并发高或者是打开的文件数量较多的时候,就会报 too many open files
查询:
  1. ulimit  -n
复制代码

文件句柄数量.png
3、如何解决
修改进程打开的文件数量

1、临时解决方案:
  1. ulimit -n 204800
复制代码

此方法不用重启服务器,当前环境变量下,临时生效,重启服务器后,无效
2、永久解决,需要修改/etc/security/limits.conf 文件
  1. echo "* soft nofile 204800"  >> /etc/security/limits.conf
  2. echo "* hard nofile 204800"  >> /etc/security/limits.conf
  3. echo "* soft nproc 204800"  >> /etc/security/limits.conf
  4. echo "* hard nproc 204800 "  >> /etc/security/limits.conf
复制代码

修改后,需要重启服务器,查看是否生效
  1. ulimit -n
复制代码


上面修改的是一个进程打开的文件句柄数量,但是还需要修改系统的总限制才行。比如我们设置的每个进程打开文件句柄默认是1024个,但是系统限制的是500 ,最终一个进程打开的文件句柄数量也是 500
修改系统限制

1、临时解决方案:
  1. echo  6553560 > /proc/sys/fs/file-max
复制代码

2、永久解决方案,需要重启生效:
  1. echo   fs.file-max = 6553560  >> /etc/sysctl.conf
复制代码

查看是否生效:
  1. sysctl -p
复制代码


知其然,也需知其所以然。如果您对本文有其他的建议和看法,请留言。

使用道具 举报 只看该作者 回复
发表于 2022-1-11 19:32:29 | 显示全部楼层
宝塔面板安装的时候提示检查环境  咋解决?
使用道具 举报 回复 支持 反对
发表于 2022-1-11 19:34:20 | 显示全部楼层
iginx-1.20安装这个的时候提示的
使用道具 举报 回复 支持 反对
发表于 2022-1-11 19:41:33 | 显示全部楼层
宝塔面板安装的时候提示检查环境  咋解决?iginx-1.20安装这个的时候提示的
使用道具 举报 回复 支持 反对
发表于 2022-1-12 11:40:42 | 显示全部楼层
宝塔用户_kodgnq 发表于 2022-1-11 19:41
宝塔面板安装的时候提示检查环境  咋解决?iginx-1.20安装这个的时候提示的

您好,截图看下提示
使用道具 举报 回复 支持 反对
发表于 2022-1-27 16:16:18 | 显示全部楼层
学习了!
使用道具 举报 回复
发表于 2022-1-28 18:01:51 | 显示全部楼层
已收藏!~
使用道具 举报 回复
发表于 2022-3-3 09:46:27 | 显示全部楼层
原来如此,以前在日志见到过,但没怎么当回事
使用道具 举报 回复 支持 反对
发表于 2022-3-3 17:10:23 | 显示全部楼层
痞子哥 发表于 2022-3-3 09:46
原来如此,以前在日志见到过,但没怎么当回事

感谢支持!
使用道具 举报 回复 支持 反对
发表于 2022-3-3 17:10:28 | 显示全部楼层
使用道具 举报 回复 支持 反对
发表于 2022-3-9 20:46:49 | 显示全部楼层

sysctl: setting key "fs.file-max": 无效的参数
fs.file-max = 6553560

这里提示无效的参数,有没问题呢?
使用道具 举报 回复 支持 反对
发表于 2022-3-10 09:29:52 | 显示全部楼层
宝塔用户_bwmspe 发表于 2022-3-9 20:46
sysctl: setting key "fs.file-max": 无效的参数
fs.file-max = 6553560
  1. echo   fs.file-max = 65535  >> /etc/sysctl.conf
复制代码

改成这个参数试试
使用道具 举报 回复 支持 反对
发表于 2023-5-29 22:26:57 | 显示全部楼层
提示command not found 咋办
使用道具 举报 回复 支持 反对
发表于 2023-5-29 22:28:16 | 显示全部楼层

提示command not found 咋办
使用道具 举报 回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

企业版年付运维跟进群

普通问题处理

论坛响应时间:72小时

问题处理方式:排队(仅解答)

工作时间:白班:9:00 - 18:00

紧急问题处理

论坛响应时间:10分钟

问题处理方式:1对1处理(优先)

工作时间:白班:9:00 - 18:00

工作时间:晚班:18:00 - 24:00

立即付费处理
快速回复 返回顶部 返回列表