IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> lsof命令学习 -> 正文阅读

[网络协议]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

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

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-14 14:29:09  更:2021-08-14 14:29:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 5:56:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计