使用 pfiles 命令

pfiles 命令显示当前进程打开文件数的限制以及有关该进程所有当前打开文件的更多信息。
请参阅以下示例。
在后台运行 sleep 120 seconds 命令,然后在 sleep 命令的 PID 上运行 pfiles 命令。

# sleep 120&
[1] 29803
# pfiles 29803
29803:  sleep 120
  Current rlimit: 256 file descriptors
   0: S_IFCHR mode:0620 dev:270,0 ino:12582920 uid:84883 gid:7 rdev:24,2
      O_RDWR|O_NOCTTY|O_LARGEFILE
      /devices/pseudo/pts@0:2
   1: S_IFCHR mode:0620 dev:270,0 ino:12582920 uid:84883 gid:7 rdev:24,2
      O_RDWR|O_NOCTTY|O_LARGEFILE
      /devices/pseudo/pts@0:2
   2: S_IFCHR mode:0620 dev:270,0 ino:12582920 uid:84883 gid:7 rdev:24,2
      O_RDWR|O_NOCTTY|O_LARGEFILE
      /devices/pseudo/pts@0:2

从输出中可以看出,sleep 命令打开了 3 个文件。
为了只检查进程打开的文件数,可以使用以下命令序列:

# pfiles 29803 | nawk '/[0-9]: /{a++}END{print a}'
3

但是,根据 pfiles 手册页,pfiles“在检查目标进程并报告结果时停止 [s] 目标进程”。
如果在运行 pfiles 命令时进程非常活跃,这会对应用程序性能产生负面影响。

https://onitroad.com 更多教程

使用 /proc 文件系统

还可以通过检查目录 /proc/[PID]/fd(在本例中为 /proc/29803/fd)的内容来检查进程打开的文件数:

# ls -al /proc/29803/fd/
total 19
dr-x------   2 root     root        8208 Oct 24 15:46 .
dr-x--x--x   5 root     root         864 Oct 24 15:46 ..
c---------   1 soluser1 tty       24,  2 Oct 24 15:47 0
c---------   1 soluser1 tty       24,  2 Oct 24 15:47 1
c---------   1 soluser1 tty       24,  2 Oct 24 15:47 2

该进程的每个打开文件都有一个字符特殊文件。
通过统计/proc/[PID]的fd子目录下的文件数,可以快速查看进程打开的文件数。

# ls /proc/29803/fd | nawk 'END{print NR}'
3
Solaris 如何查找进程打开的文件数

有时,错误消息“打开的文件太多”会显示在 /var/adm/messages 中。
在这些情况下,了解进程当前打开了多少文件通常很有用。
可以通过以下方式检查某个进程当前打开的文件数:

  1. pfiles 命令
  2. 使用/proc文件系统
日期:2020-09-17 00:15:10 来源:oir作者:oir