VFS:已达到文件最大限制 1231582

2023-12-21

我正在运行 Linux 2.6.36 内核,并且看到一些随机错误。像

ls: error while loading shared libraries: libpthread.so.0: cannot open shared object file: Error 23

是的,我的系统无法始终运行“ls”命令。 :(

我注意到 dmesg 输出中有几个错误:

# dmesg | tail
[2808967.543203] EXT4-fs (sda3): re-mounted. Opts: (null)
[2837776.220605] xv[14450] general protection ip:7f20c20c6ac6 sp:7fff3641b368 error:0 in libpng14.so.14.4.0[7f20c20a9000+29000]
[4931344.685302] EXT4-fs (md16): re-mounted. Opts: (null)
[4982666.631444] VFS: file-max limit 1231582 reached
[4982666.764240] VFS: file-max limit 1231582 reached
[4982767.360574] VFS: file-max limit 1231582 reached
[4982901.904628] VFS: file-max limit 1231582 reached
[4982964.930556] VFS: file-max limit 1231582 reached
[4982966.352170] VFS: file-max limit 1231582 reached
[4982966.649195] top[31095]: segfault at 14 ip 00007fd6ace42700 sp 00007fff20746530 error 6 in libproc-3.2.8.so[7fd6ace3b000+e000]

显然,文件最大错误看起来很可疑,它们聚集在一起并且是最近出现的。

# cat /proc/sys/fs/file-max
1231582
# cat /proc/sys/fs/file-nr
1231712 0       1231582

这对我来说也有点奇怪,但问题是,我不可能在这个系统上打开 120 万个文件。我是唯一使用它的人,本地网络之外的任何人都看不到它。

# lsof | wc
  16046  148253 1882901
# ps -ef | wc 
    574    6104   44260

我看到一些文档说:

文件最大和文件编号:

内核动态分配文件句柄,但到目前为止它不会再次释放它们。

file-max 中的值表示 Linux 内核将分配的文件句柄的最大数量。当您收到大量有关文件句柄耗尽的错误消息时,您可能需要增加此限制。

从历史上看,file-nr 中的三个值分别表示已分配的文件句柄数、已分配但未使用的文件句柄数以及最大文件句柄数。 Linux 2.6 总是报告 0 作为空闲文件句柄的数量——这不是一个错误,它只是意味着分配的文件句柄的数量与已使用的文件句柄的数量完全匹配。

printk 报告尝试分配比文件最大数量更多的文件描述符,查找“VFS:已达到文件最大限制”。

我第一次读到的内容是内核基本上有一个内置的文件描述符泄漏,但我发现这很难相信。这意味着任何正在使用的系统都需要经常重新启动以释放文件描述符。正如我所说,我不敢相信这是真的,因为对我来说,Linux 系统一次运行数月(甚至数年)是很正常的。另一方面,我也不敢相信我几乎空闲的系统打开了超过一百万个文件。

有谁有任何想法,无论是修复还是进一步诊断?当然,我可以重新启动系统,但我不希望这成为每隔几周重复出现的问题。作为权宜之计,我退出了 Firefox,尽管我只打开了一个窗口,但 Firefox 却产生了近 2000 行 lsof 输出(!),现在我可以再次运行“ls”,但我怀疑这是否会解决这个问题问题长期存在。 (编辑:哎呀,说得太早了。当我写完这个问题时,症状又回来了)

预先感谢您的任何帮助。


我不想留下一个悬而未决的问题,所以为任何发现这个问题的人提供一个总结。

我最终在 serverfault 上重新发布了问题(本文) https://serverfault.com/questions/235059/vfs-file-max-limit-1231582-reached

实际上,他们无法提出任何建议,但我做了更多调查,最终发现这是 NFSv4 的一个真正的错误,特别是服务器端锁定代码。我有一个 NFS 客户端,每 5 秒运行一次监控脚本,使用 rrdtool 将一些数据记录到 NFS 安装的文件中。每次运行时,它都会锁定文件以进行写入,并且服务器分配(但错误地从未释放)一个打开的文件描述符。该脚本(加上另一个运行频率较低的脚本)导致每小时消耗约 900 个打开文件,两个月后,它达到了极限。

有几种可能的解决方案: 1) 使用 NFSv3 代替。 2) 停止运行监控脚本。 3)将监控结果存储在本地,而不是存储在NFS上。 4) 等待修复此问题的 NFSv4 补丁(Bruce Fields 实际上给我发送了一个补丁来尝试,但我没有时间)

我相信您可以想到其他可能的解决方案。

感谢您的尝试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VFS:已达到文件最大限制 1231582 的相关文章

  • 这个反斜杠在这段汇编代码中起什么作用?

    我不确定这些推线有什么区别 修剪下来来自 Linux 的 x86 entry calling h https github com torvalds linux blob 241e39004581475b2802cd63c111fec43b
  • ASCII“../”是 PHP 中指示目录遍历的唯一字节序列吗?

    我有一个 PHP 应用程序 它使用 GET参数来选择文件系统上的 JS CSS 文件 如果我拒绝输入字符串包含的所有请求 或者可见 7 位 ASCII 范围之外的字节 当路径传递到 PHP 的底层 基于 C 文件函数时 这是否足以防止父目录
  • 如何查找连接到 AF_INET 套接字的客户端的 UID?

    有什么方法或类似的东西ucred for AF UNIX如果是AF INET插座 TCP在我的例子中 找出连接到我的套接字的客户端的UID 还有 proc net tcp但它显示了UID of the creator插座的而不是连接的cli
  • 设置 Apache POI 的路径

    我想创建 Excel 文件并使用 java 程序在该文件中写入数据 That is here http www techbrainwave com p 554我在 java 文件所在的位置提取了 Apache POI 并将该路径包含在路径变
  • Linux shell 脚本中的 while 循环超时

    这工作正常 无限循环 while TRUE do printf done 我在尝试着timeout this while loop与timeout命令 所有这些都不起作用 timeout 5 while TRUE do printf don
  • 没有可用的符号表信息

    我正在测试第三方的库 它崩溃了 当我想查看崩溃的原因时 我的 gdb 告诉我没有可用的调试符号 Program received signal SIGSEGV Segmentation fault Switching to Thread 0
  • GCC 和 ld 找不到导出的符号...但它们在那里

    我有一个 C 库和一个 C 应用程序 尝试使用从该库导出的函数和类 该库构建良好 应用程序可以编译 但无法链接 我得到的错误遵循以下形式 app source file cpp text 0x2fdb 对 lib namespace Get
  • PHP 致命错误:未找到“MongoClient”类

    我有一个使用 Apache 的网站 代码如下 当我尝试访问它时 我在 error log 中收到错误 PHP Fatal Error Class MongoClient not found 以下是可能错误的设置 但我认为没有错误 php i
  • 嵌入式Linux poll()不断返回

    我有一个特别的问题 当我知道没有什么可读时 民意调查不断返回 因此设置如下 我有 2 个文件描述符 它们构成fd设置民意调查监视 一种用于引脚从高到低的变化 GPIO 另一个用于代理输入 代理输入出现问题 处理的顺序是 启动main函数 然
  • Godaddy 托管上的 CakePHP 控制台

    我一直在努力让我的 CakePHP 网站在 Godaddy 网格托管 帐户上运行 我的蛋糕应用程序设置是从帐户的子目录托管的 并且可以通过子域访问 我必须调整我的 htaccess 文件才能使其正常工作 现在我需要让 CakePHP 控制台
  • xsel -o 对于 OS X 等效项

    是否有一个等效的解决方案可以在 OS X 中抓取选定的文本 就像适用于 Linux 的 xsel o 一样 只需要当前的选择 这样我就可以在 shell 脚本中使用文本 干杯 埃里克 你也许可以安装xsel在 MacOS 上 更新 根据 A
  • 拆分字符串以仅获取前 5 个字符

    我想去那个地点 var log src ap kernelmodule 10 001 100 但看起来我的代码必须处理 ap kernelmodule 10 002 100 ap kernelmodule 10 003 101 等 我想使用
  • 何时使用 pthread 条件变量?

    线程问题 看来 只有在其他线程调用 pthread cond notify 之前调用 pthread cond wait 时 条件变量才起作用 如果在等待之前发生通知 那么等待将被卡住 我的问题是 什么时候应该使用条件变量 调度程序可以抢占
  • bluetoothctl 到 hcitool 等效命令

    在 Linux 中 我曾经使用 hidd connect mmac 来连接 BT 设备 但自 Bluez5 以来 这种情况已经消失了 我可以使用 bluetoothctl 手动建立连接 但我需要从我的应用程序使用这些命令 并且使用 blue
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • 无法加载 JavaHL 库。- linux/eclipse

    在尝试安装 Subversion 插件时 当 Eclipse 启动时出现此错误 Failed to load JavaHL Library These are the errors that were encountered no libs
  • 跟踪 Linux 程序中活跃使用的内存

    我想跟踪各种程序在特定状态下接触了多少内存 例如 假设我有一个图形程序 最小化时 它可能会使用更少的内存 因为它不会重新绘制窗口 这需要读取图像和字体并执行大量库函数 这些对象仍然可以在内存中访问 但实际上并没有被使用 类似的工具top它们
  • 如何使用 bash 锁定文件

    我有一个任务从远程服务器同步目录 rsync av email protected cdn cgi l email protection srv data srv data 为了使其定期运行并避免脚本 reEnter 问题 我使用 rsyn
  • nginx 上的多个网站和可用网站

    通过 nginx 的基本安装 您的sites available文件夹只有一个文件 default 怎么样sites available文件夹的工作原理以及如何使用它来托管多个 单独的 网站 只是为了添加另一种方法 您可以为您托管的每个虚拟
  • 为什么 Linux perf 使用事件 l1d.replacement 来处理 x86 上的“L1 dcache misses”?

    在英特尔 x86 上 Linux用途 https stackoverflow com a 52172985 149138事件l1d replacements来实施其L1 dcache load misses event 该事件定义如下 计数

随机推荐