lsof命令学习

1、概述
lsof(list open files)是一个列出当前系统打开文件信息的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。
2、关键选项
使用lsof用于获取系统怎么和网络交互的信息;
(1)使用 -i 获取网络连接

root@alientek_imx6ul:~# lsof -i
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
systemd       1 root   40u  IPv4   3902      0t0  TCP localhost:gpsd (LISTEN)
gpsd        219 gpsd    4u  IPv4   3902      0t0  TCP localhost:gpsd (LISTEN)
sshd        414 root    3u  IPv4   6309      0t0  TCP *:ssh (LISTEN)
ntpd        499  ntp   16u  IPv4   6382      0t0  UDP *:ntp 
ntpd        499  ntp   17u  IPv4   6386      0t0  UDP localhost:ntp 
ntpd        499  ntp   21u  IPv4   7024      0t0  UDP 192.168.0.27:ntp 
ntpd        499  ntp   22u  IPv4   7026      0t0  UDP 192.168.1.1:ntp 
sshd       6564 root    3u  IPv4  16168      0t0  TCP 192.168.0.27:ssh-

如果知道线程使用的端口号,可以使用使用"lsof -i:端口号"来获取使用该端口号的线程信息;

root@alientek_imx6ul:~# lsof -i:80
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
node\x20/ 806 root   20u  IPv4   7797      0t0  TCP *:http (LISTEN)

(2)使用-p查看指定进程ID已打开的内容

root@alientek_imx6ul:~# lsof -p 31590
COMMAND   PID USER   FD      TYPE     DEVICE SIZE/OFF   NODE NAME
process 31590 root  rtd       DIR      179,2     4096      2 /
process 31590 root  mem       REG      179,2    14172 404889 /lib/arm-linux-gnueabihf/libanl-2.23.so
process 31590 root  mem       REG      179,2   897088 404822 /lib/arm-linux-gnueabihf/libc-2.23.so
process 31590 root  mem       REG      179,2    99372 404734 /lib/arm-linux-gnueabihf/libgcc_s.so.1
process 31590 root  mem       REG      179,2   424556 404718 /lib/arm-linux-gnueabihf/libm-2.23.so
process 31590 root  mem       REG      179,2  1032056  26028 /usr/lib/arm-linux-gnueabihf/libstdc++.so.6.0.21
process 31590 root  mem       REG      179,2   109972 404832 /lib/arm-linux-gnueabihf/libpthread-2.23.so
process 31590 root  mem       REG      179,2   442048 405049 /lib/libpaho-mqtt3a.so.1
process 31590 root  mem       REG      179,2   102668 404731 /lib/arm-linux-gnueabihf/ld-2.23.so

可以使用这个命令统计线程打开的文件个数,来分析线程是否有文件描述符泄露;

工作中应用场景:
嵌入式程序稳定性测试过程中,程序跑了三天,发现应用程序退出,打印信息显示文件描述符使用太多,如下面的系统错误打印,

[DEBUG] >> error:Too many open files

我们可以写一个脚本,获取嵌入式程序的线程号,然后分别测试哪项功能会影响文件描述符的增加;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值