太多文件打开问题(在 CentOS 中)

Ram*_*Ram 1 files centos

最近我在我们的一台生产机器上遇到了这个问题。PHP 的实际问题如下所示:

fopen(dberror_20110308.txt):无法打开流:打开的文件太多

我在这台机器上运行 LAMP 堆栈和内存缓存。我还在这台机器上运行了几个 Java 应用程序。虽然我确实将可以打开的文件数量限制增加到 10000(从 1024),但我真的很想知道是否有一种简单的方法来跟踪这个(任何时刻打开的文件数量)作为一个指标。我知道 lsof 是一个命令,它将列出进程打开的文件描述符。想知道是否有其他更好的(就报告而言)方法来使用 nagios 跟踪此情况。

Dec*_*ado 6

你可以看看/proc/sys/fs/file-nr

cat /proc/sys/fs/file-nr
3391    969     52427
|        |       |
|        |       |
|        |       maximum open file descriptors
|        total free allocated file descriptors
total allocated file descriptors
Run Code Online (Sandbox Code Playgroud)

分配的文件描述符总数是指自启动以来分配的文件描述符数。这可以被认为是一次打开的最大文件数的高水位线。当这些释放出来时,它们进入第二列,因此在任何给定时间打开的文件数将是第 1 列 - 第 2 列。