个人性质的网站,wordpress主题APP,鼓楼区建设房产和交通局网站,wordpress阿里秀模板作者#xff1a;李烨楠 中国建设银行来自微信公众号#xff1a;平台人生环境: AIX 6.1 AIX7.1前言:用户有时需要统计一个进程打开的文件数目#xff0c;比如#xff0c;在当前打开文件句柄使用量是否超过用户资源限制(/etc/security/limits)中 nofiles的取值时。那么#…作者李烨楠 中国建设银行来自微信公众号平台人生环境: AIX 6.1 AIX7.1前言:用户有时需要统计一个进程打开的文件数目比如在当前打开文件句柄使用量是否超过用户资源限制(/etc/security/limits)中 nofiles的取值时。那么AIX系统中该如何实现这一需求呢如何判断我们设置的nofiles值对当前应用是否够用呢下面我们提供三种方法进行统计。使用 procfiles 命令procfiles 命令可以显示进程打开的所有文件描述符(FDfile descriptor即代表打开的文件)信息加上 -n 参数还可以显示相关文件名称。sfmonlocalhostprocfiles 5118404651184046 : -kshCurrent rlimit: 8192 file descriptors0: S_IFCHR mode:00 dev:10,4 ino:13150 uid:901 gid:900 rdev:30,0O_RDWR | O_NOCTTY1: S_IFCHR mode:00 dev:10,4 ino:13150 uid:901 gid:900 rdev:30,0O_RDWR | O_NOCTTY2: S_IFCHR mode:00 dev:10,4 ino:13150 uid:901 gid:900 rdev:30,0O_RDWR | O_NOCTTY10: S_IFREG mode:0444 dev:10,5 ino:40370 uid:901 gid:900 rdev:0,0O_RDONLY size:063: S_IFREG mode:0600 dev:110,1 ino:5 uid:901 gid:900 rdev:0,0O_RDWR | O_APPEND size:0sfmonlocalhostprocfiles -n 5118404651184046 : -kshCurrent rlimit: 8192 file descriptors0: S_IFCHR mode:00 dev:10,4 ino:13150 uid:901 gid:900 rdev:30,0O_RDWR | O_NOCTTY name://dev/pts/01: S_IFCHR mode:00 dev:10,4 ino:13150 uid:901 gid:900 rdev:30,0O_RDWR | O_NOCTTY name://dev/pts/02: S_IFCHR mode:00 dev:10,4 ino:13150 uid:901 gid:900 rdev:30,0O_RDWR | O_NOCTTY name://dev/pts/010: S_IFREG mode:0444 dev:10,5 ino:40370 uid:901 gid:900 rdev:0,0O_RDONLY size:0name:/usr/lib/nls/msg/en_US/ksh.cat63: S_IFREG mode:0600 dev:110,1 ino:5 uid:901 gid:900 rdev:0,0O_RDWR | O_APPEND size:0name:/home/ap/sfmon/.sh_history注意stdin/stdout/stderr都各占一个文件描述符而且socket也是要占用文件描述符的。相关知识介绍proctools系列命令/proc 文件系统提供了一种控制进程的机制。它还提供了对有关当前进程和线程状态信息的访问不过该信息是二进制格式。/proc 文件系统中每个条目的名称都是与进程 ID 对应的十进制数字。这些条目是子目录每个条目的所有者由进程的用户 ID 确定。对进程状态的访问是由每个子目录中包含的附加文件提供的。proctools系列命令(/proc 命令)基于某些可用信息提供 ASCII 报告。其中大多数命令接受进程 ID 列表或 /proc/ProcessID 字符串作为输入。因此可以使用 Shell 扩展 /proc/* 指定系统中的所有进程。proctools系列命令从 /proc 中收集指定进程的信息并向用户显示该信息。这些命令从 /proc 中收集的信息是当前进程状态的快照因此除了已终止的进程外此信息在任何时刻都会有所不同。proctools 命令包括procfiles 报告有关由进程打开的所有文件描述符的信息。proctree 打印包含特定进程 ID 或用户的进程树。procsig 列出进程定义的信号操作。procstack 打印进程中所有线程的十六进制地址和符号名称。procrun 启动在发生 PR_REQUESTED 事件时停止的进程。procmap 打印进程的地址空间映射。procflags 打印指定进程中每个线程的 /proc 跟踪标志、挂起和保持信号以及其他 /proc 状态信息。proccred 打印进程的凭据(有效、实际、已保存的用户 ID 和组 ID)。procldd 列出进程加载的对象包括使用 dlopen() 来显式附加的共享对象。procwait 等待所有指定的进程终止。procwdx 打印进程的当前工作目录。procstop 在发生 PR_REQUESTED 事件时终止进程。在生产环境中检查进程时应该特别小心特别不建议编入脚本循环执行进行系统监控因为这些工具在进行检查时可能会挂起进程。2.使用pstat命令统计# pstat -a | grep,获得进程的slot ID。 # pstat -u | grep fd | wc -l每个 fd 代表一个打开的文件描述符。使用方法进入kdb转换进程号pid至16进制然后退出kdb。rootkdb(0)dcal 1442240Value decimal: 1442240 Value hexa: 001601C0(0)q查看同名进程根据进程号16进制找到对应的slotIDrootpstat -a | grepksh1046a 1601c0 2b01a8 1601c0 0 0 1 ksh1054 a 1e0142 1d00d4 1e0142 0 0 1 ksh1056 a 200152 1b0312 1b0312 8 8 1 ksh3099 a 1b0312 1d00d4 1b0312 0 0 1 ksh查看打开的文件描述符rootpstat -u 1046 | grep fd fd 0: fp 0xf1000f1e9009c900 flags 0x0480 count 0x0000fd 1: fp 0xf1000f1e9009c900 flags 0x0480 count 0x0000fd 2: fp 0xf1000f1e9009c900 flags 0x0480 count 0x0000fd 10: fp 0xf1000f1e90062900 flags 0x0481 count 0x0000fd 63: fp 0xf1000f1e90084600 flags 0x0481 count 0x0000统计使用文件描述符数目:rootxxhjibm0502:/pstat -u 1046 | grep fd | wc -l53.使用lsof命令如果系统部署安装了lsof工具统计一个进程打开的文件数目的工作则更加简单直接。rootxxhjibm0502:/lsof -p 1442240COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEksh 1442240 root cwd VDIR 10,4 4096 2 / (/dev/hd4)ksh 1442240 root 0u VCHR 37,0 0t574139 25377 /dev/pts/0ksh 1442240 root 1u VCHR 37,0 0t574139 25377 /dev/pts/0ksh 1442240 root 2u VCHR 37,0 0t574139 25377 /dev/pts/0ksh 1442240 root 10r VREG 10,5 5875 62228 /usr (/dev/hd2)ksh 1442240 root 63u VREG 10,4 20768 31 / (/dev/hd4)