16进制 ksh_AIX系统中如何统计进程打开的文件数目

作者:李烨楠 中国建设银行

来自微信公众号:平台人生

环境: AIX 6.1 AIX7.1

前言:

用户有时需要统计一个进程打开的文件数目,比如,在当前打开文件句柄使用量是否超过用户资源限制(/etc/security/limits)中 nofiles的取值时。那么,AIX系统中该如何实现这一需求呢?如何判断我们设置的nofiles值对当前应用是否够用呢?下面我们提供三种方法进行统计。

使用 procfiles 命令

procfiles 命令可以显示进程打开的所有文件描述符(FD,file descriptor,即代表打开的文件)信息,加上 -n 参数还可以显示相关文件名称。

sfmon@localhost>procfiles 51184046

51184046 : -ksh

Current rlimit: 8192 file descriptors

0: S_IFCHR mode:00 dev:10,4 ino:13150 uid:901 gid:900 rdev:30,0

O_RDWR | O_NOCTTY

1: S_IFCHR mode:00 dev:10,4 ino:13150 uid:901 gid:900 rdev:30,0

O_RDWR | O_NOCTTY

2: S_IFCHR mode:00 dev:10,4 ino:13150 uid:901 gid:900 rdev:30,0

O_RDWR | O_NOCTTY

10: S_IFREG mode:0444 dev:10,5 ino:40370 uid:901 gid:900 rdev:0,0

O_RDONLY size:0

63: S_IFREG mode:0600 dev:110,1 ino:5 uid:901 gid:900 rdev:0,0

O_RDWR | O_APPEND size:0

sfmon@localhost>procfiles -n 51184046

51184046 : -ksh

Current rlimit: 8192 file descriptors

0: S_IFCHR mode:00 dev:10,4 ino:13150 uid:901 gid:900 rdev:30,0

O_RDWR | O_NOCTTY name://dev/pts/0

1: S_IFCHR mode:00 dev:10,4 ino:13150 uid:901 gid:900 rdev:30,0

O_RDWR | O_NOCTTY name://dev/pts/0

2: S_IFCHR mode:00 dev:10,4 ino:13150 uid:901 gid:900 rdev:30,0

O_RDWR | O_NOCTTY name://dev/pts/0

10: S_IFREG mode:0444 dev:10,5 ino:40370 uid:901 gid:900 rdev:0,0

O_RDONLY size:0name:/usr/lib/nls/msg/en_US/ksh.cat

63: S_IFREG mode:0600 dev:110,1 ino:5 uid:901 gid:900 rdev:0,0

O_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。

root>kdb

(0)>dcal 1442240

Value decimal: 1442240 Value hexa: 001601C0

(0)>q

查看同名进程,根据进程号16进制,找到对应的slotID:

root>pstat -a | grepksh

1046a 1601c0 2b01a8 1601c0 0 0 1 ksh

1054 a 1e0142 1d00d4 1e0142 0 0 1 ksh

1056 a 200152 1b0312 1b0312 8 8 1 ksh

3099 a 1b0312 1d00d4 1b0312 0 0 1 ksh

查看打开的文件描述符:

root>pstat -u 1046 | grep "fd "

fd 0: fp = 0xf1000f1e9009c900 flags = 0x0480 count = 0x0000

fd 1: fp = 0xf1000f1e9009c900 flags = 0x0480 count = 0x0000

fd 2: fp = 0xf1000f1e9009c900 flags = 0x0480 count = 0x0000

fd 10: fp = 0xf1000f1e90062900 flags = 0x0481 count = 0x0000

fd 63: fp = 0xf1000f1e90084600 flags = 0x0481 count = 0x0000

统计使用文件描述符数目:

root@xxhjibm0502:/>pstat -u 1046 | grep "fd " | wc -l

5

3.使用lsof命令

如果系统部署安装了lsof工具,统计一个进程打开的文件数目的工作则更加简单直接。

root@xxhjibm0502:/>lsof -p 1442240

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

ksh 1442240 root cwd VDIR 10,4 4096 2 / (/dev/hd4)

ksh 1442240 root 0u VCHR 37,0 0t574139 25377 /dev/pts/0

ksh 1442240 root 1u VCHR 37,0 0t574139 25377 /dev/pts/0

ksh 1442240 root 2u VCHR 37,0 0t574139 25377 /dev/pts/0

ksh 1442240 root 10r VREG 10,5 5875 62228 /usr (/dev/hd2)

ksh 1442240 root 63u VREG 10,4 20768 31 / (/dev/hd4)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端Http协议缓存初解

[TOC] 简介 用户获取网络资源,需要通过非常长的网络去服务器上请求资源,另外服务端为了应对大量的用户请求而不断的提升硬件性能与带宽。这对用户与服务端都非常的不友好。而缓存就是为了解决用户请求速度与释放服务器压力而生的。 为什么我会写Http缓存&#xff0c…

详解java访问修饰符

*************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程 请关注微信公众号:HB荷包 一个能让你学习技术和赚钱方法的公众号,持续更…

educoder 二进制数据的位运算_二进制与位运算实用操作汇总(基础篇)

位运算是最高效而且占用内存最少的算法操作,但也是最难看懂的操作。然而,关于位运算的用法,笔者查了许多资料,似乎都没有找到详细而系统的讲解资料。笔者对位运算的操作相当感兴趣,因此斗胆尝试对位运算来一个的总结。…

企业为什么要做SEO,它的重要性有哪些?

对于SEO工作而言,我们知道一个网站做SEO的基础诉求就是让用户和搜索引擎更好的理解网站内容,虽然随着搜索引擎算法技术的迭代,目前SEO面临更大的挑战与竞争,但基于搜索营销,它目前仍然显得十分重要。 那么&#xff0…

白话说编程之java线程

白话说编程之java线程线程和进程:进程:线程:线程和进程的区别:详解多线程:并发为什么使用并发并发的执行原理并行线程的五种状态:创建状态:就绪状态:运行状态:阻塞状态:死…

powerdesigner显示工具面板_photoshop教程-画笔工具预设与选项设置

定义画笔预设在打开的“画笔”面板中,单击左侧的“画笔笔尖形状”名称,可显示笔尖形状图案。单击“画笔”面板左侧其他不同的选项名称,在右侧就会显示其对应的调节项。只单击不同选项前面的方框,可使此选项有效,但右侧…

C#属性的声明和使用演示源码片段

工作闲暇时间,将代码过程重要的一些代码做个收藏,如下代码是关于C#属性的声明和使用演示片段的代码,应该对码农有一些好处。 using System; class Person {private string myName "N/A";private int myAge 0;public string Name{g…

深入理解== 和 equals 的区别

深入理解 和 equals 的本质区别简介区别:图解:注意点:源码分析:总结分享一波:程序员赚外快-必看的巅峰干货简介 初学者常常被" “和‘equals ’所折磨,为什么,因为他们的大概意思相同,都是…

rsem比对_RSEM方法比对和表达量计算

分析模块,封装了Trinity程序包中的“align_and_estimate_abundance.pl”脚本,进行原始数据与转录本序列的比对和表达量计算。其中,核心程序为,Bowtie或Bowtie2进行原始数据与转录本序列的比对,RSEM根据比对结果进行表达…

java sleep和wait区别

为什么80%的码农都做不了架构师?>>> 关于sleep和wait区别解析: sleep只是释放CPU资源,并不释放资源锁对象,wait是会释放掉资源锁对象。 比如,有个锁对象object,线程1和线程2都会锁住object对象…

u8转完看不到菜单_web网页有错误,无法看到操作菜单-用友U8

文章摘要:本文提供在用友U8V8.51erp软件财务会计管理的WEB财务模块中客户在使用WEB功能时,没有使用默认的设置,是将WEB功能设置在自己的网站上面,访问WEB功能没有问题,界面出来了,输入用户名、密码、选择帐…

.Net Core 项目引用本地类库方式(二)

上篇文章有详细的介绍.Net Core 项目中引用本地类库通过打包,然后Nugety引用方式,这里再介绍一种引用包的方式 转载于:https://www.cnblogs.com/wangshitou/p/10283800.html

深入理解equals和hashCode关系和区别

深入理解equals和hashCode关系和区别直入主题:区别:1.他们判断对象相同的方式不一样:2.他们判断对象是否相等的准确率不一样:改写equals时总是要改写hashcode分享一波:程序员赚外快-必看的巅峰干货为什么要说equals和hashCode这两…

lol韩服游戏内设置_韩服LOL进去了还不能玩?教你如何玩韩服!

领取免费韩服LOL安全号,百度搜索韩服LOL微博关注即可!上图错误为常识性错误,LOL韩服游戏的安装文件路径有中文所导致的错误 解决方法:将安装路径里的中文改成英文即可 举例 包含中文汉字的文件夹都是错误的 Program FilesLOL韩服 …

Jdk 和 jre 的 关系和区别

Jdk 和 jre 的 关系和区别 区别: JDK:是Java Development Kit 的简称–>翻译过来就是:Java 开发工具包。是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。 JRE:是Java Runtime Environm…

OpenCV-Python入门教程7-PyQt编写GUI界面

前面一直都是使用命令行运行代码,不够人性化。这篇用Python编写一个GUI界面,使用PyQt5编写图像处理程序。包括:打开、关闭摄像头,捕获图片,读取本地图片,灰度化和Otsu自动阈值分割的功能。 使用Qt Designer…

spark 广播变量大数据_大数据处理 | Spark集群搭建及基本使用

点击蓝字关注我前面用了一篇文章详细的介绍了集群HDFS文件系统的搭建,HDFS文件系统只是一个用于存储数据的系统,它主要是用来服务于大数据计算框架,例如MapReduce、Spark,本文就接着上一篇文章来详细介绍一下Spark集群的搭建及Spa…

如何将本地项目上传到gitee

*************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程 请关注微信公众号:HB荷包 一个能让你学习技术和赚钱方法的公众号,持续更…

oracle dg 备库未设置convert参数导致ORA-01111,ORA-01110

2019独角兽企业重金招聘Python工程师标准>>> 查看trace 文件: MRP0: Background Managed Standby Recovery process started (amls) started logmerger process Sun Jan 20 07:55:53 2019 Managed Standby Recovery starting Real Time Apply MRP0: Back…