Linux:找出正在使用的文件描述符数量
在管理一个框时,您可能想找出进程正在做什么,并找出正在使用的文件描述符 (fd) 数量。您会惊讶地发现该进程确实打开了所有类型的文件:
=> 实际日志文件
=> /dev 文件
=> UNIX 套接字
=> 网络套接字
=> 库文件 /lib /lib64
=> 可执行文件和其他程序等
在这篇简短的文章中,我将解释如何计算 Linux 服务器系统上当前正在使用的文件描述符的数量。
步骤#1 找出PID
要找出 mysqld 进程的 PID,请输入:
# ps aux | grep mysqld
或
# pidof mysqld
输出:
28290
步骤 # 2 列出由 PID # 28290 打开的文件
使用 lsof 命令或 /proc/$PID/ 文件系统显示打开的 fds(文件描述符),运行:
或者
您可以计算打开的文件,输入:
# lsof -p 28290
# lsof -a -p 28290
# cd /proc/28290/fd
# ls -l | less
# ls -l | wc -l
提示:计数所有打开的文件句柄
要计算任何类型的打开文件句柄的数量,请输入以下命令:
# lsof | wc -l
示例输出:
5436
列出内核内存中的文件描述符
键入以下命令:
# sysctl fs.file-nr
示例输出:
fs.file-nr = 1020 0 70000
在哪里,
- 1020分配的文件句柄数。
- 0未使用但已分配的文件句柄的数量。
- 70000系统范围内的最大文件句柄数。
您可以使用以下命令查找或设置系统范围的最大文件句柄数:
# sysctl fs.file-max
示例输出:
fs.file-max = 70000
有关详细信息,请参阅如何在 Linux 下设置系统范围的最大文件句柄数。
有关 /proc/PID/file 和 procfs 文件系统的更多信息
/proc(或 procfs)是一个伪文件系统,每次重启后都会动态生成。它用于访问内核信息。Solaris、BSD、AIX 和其他类 UNIX 操作系统也使用 procfs。现在,您知道一个进程使用了多少个文件描述符。您将在 /proc/$PID/file 目录中找到更多有趣的内容:
- /proc/PID/cmdline :进程参数
- /proc/PID/cwd :进程当前工作目录(符号链接)
- /proc/PID/exe :实际进程可执行文件的路径(符号链接)
- /proc/PID/environ :进程使用的环境
- /proc/PID/root :进程看到的根路径。对于大多数进程来说,这将是指向 / 的链接,除非进程在 chroot jail 中运行。
- /proc/PID/status :有关进程的基本信息,包括其运行状态和内存使用情况。
- /proc/PID/task :指向由此(父)进程启动的任何任务的硬链接。
另请参阅:/proc 相关常见问题/提示
/proc 是系统管理员工作必不可少的文件系统。只需浏览我们之前的文章即可获取有关 /proc 文件系统的更多信息:
- /proc/filesystems:找出内核支持的文件系统
- 如何:Linux 检测或找出双核 CPU
- Linux 显示 CPU 信息 – CPU 数量及其速度
- 如何使用 QLogic 驱动程序在 Linux 上扫描新 LUN
- 用于收集有关 Linux 系统信息的 Linux 命令
- Linux 增加最大打开文件数或文件描述符
- 如何显示有关 Linux 内核模块或驱动程序的信息
- Linux 扫描无线网卡以获取信息
- Linux 禁用或丢弃/阻止所有 ping 数据包
- 如何知道我的服务器 CPU 是否可以运行 64 位内核版本(应用程序)?
- 实时显示Linux内核slab缓存信息
- 永久更改 /proc 文件系统
- 磁盘发生故障后如何重建 RAID 阵列
- 查看我的服务器是否能够运行半虚拟化客户端(PAE 支持)
- Linux 配置网络地址转换或 NAT
- 操作方法:Linux 无需重启即可查看新光纤通道连接的磁盘 LUN
- 我还建议阅读 /proc 文件系统相关文档和 lsof 手册页,以更好地了解 fd 和文件。