linux执行lsof命令_一天一个Linux命令(1)「lsof」

很久(一年多了)没有写文章了。工作越来越忙了,有时候也因为懒,有时候呢又会想太多,觉得自己写得不好,写的这些东西有什么用啊,网上可能很多,而且甚至我还会有些是写错的呢。之前写的也有很多,是为了获得阅读量,从而使用阿里腾讯之类的,马云马化腾之类的热点信息。现在,我就打算就至少每天,发出来一篇自己之前做的笔记,这样也可以勉励自己不断的往自己笔记池子里进行补充内容。也可以达到分享和和有心的读者讨论的目的。

之前一直用lsof也只是做做lsof -i:port端口号,来看看信息,还有lsof -i|grep pid来查看。

实际上它还有很多功能。

lsof

-a 列出打开文件存在的进程

-c 列出指定进程所打开的文件

-g 列出GID号进程详情

-d 列出占用该文件号的进程

+d 列出目录下被打开的文件

+D 递归列出目录下被打开的文件

-n 列出使用NFS的文件

-i 列出符合条件的进程。(4、6、协议、:端口、 @ip )

-p 列出指定进程号所打开的文件

-u 列出UID号进程详情

-h 显示帮助信息

-v 显示版本信息

#进程查端口lsof -i | grep pid#端口查进程lsof  -i:port#使用lsof查看进程句柄使用情况lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|more#但这个查的我理解的,并不是当前未关闭的句柄数

sof输出各列信息的意义如下:

COMMAND:进程的名称 PID:进程标识符

USER:进程所有者

FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等 TYPE:文件类型,如DIR、REG等

DEVICE:指定磁盘的名称

SIZE:文件的大小

NODE:索引节点(文件在磁盘上的标识)

NAME:打开文件的确切名称

#查看所有进程的文件打开数lsof |wc -l#查看整个系统目前使用的文件句柄数cat /proc/sys/fs/file-nr#查看某个进程的的文件句柄数lsof -p pid|wc -l查看某个目录,文件被什么进程占用lsof path(file)
  • 使用脚本采集每10秒某程序的句柄使用情况
#!/bin/sh set -x echo "">total_handler psid=`ps -ef|grep $1|head -1|awk '{print $2}'` count=0 while [ $count -lt 3000 ] do  lsof -p $psid|wc -l >> total_handler  sleep 10  count=`expr $count + 1` done

其他点

  • awk:是一个格式化过滤文本的命令,比如上面的awk '{print $2}',就是。
  • wc: 计数的。-l就是算行。-w显示字数,-c显示字节数。

疑问点

网上能找到的说查看句柄用这个:

lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|more

但我发现,这个结果看到的句柄数,有时候是一个过大的值。之所以说有时候,是我在Mac上的时候,发现这个值找到的pid打开的句柄,和这里的确实数量一致或者相差不大。

4b1e000e133c2f47d499d8212d4bd5c1.png

mac截图

但是在centos7上,看到lsof -p pid得到行数值,是远远小于统计值,而且大多数的进程,都有这个统计特点。

cad52f22f0332d28e8015bdfd021b9e9.png

centos7截图

所以我还是没有搞大明白,为何两者之间会有这么大的差距呢?

首先lsof -p pid是可以看到具体的打开着的文件句柄。所以他的统计数,应该是未关闭的句柄。而统计的那个语句,是因为本身命令读取的,就是另外一个值(比如进程历史总打开句柄数),还是怎样,还没搞清楚。而我们运维有次根据这个图里的长命令,表示是程序写的有问题,导致耗尽了文件句柄,但实际我没有看到too many open files给出。而且还发现,一台机器上的nacos,用

lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|more

查看到更是统计出27万多的数,显然这个数,不是表示这个进程正打开未关闭的文件句柄数(通过lsof |wc -l 查看到的总数,和这里分进程排序查看后相加的总数是一样的)。通过查看系统限制,也会发现此时的配置是低于这个值的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值