lsof移植

本文讲述了在Linux裁剪版系统中,由于lsof命令缺失导致的问题,作者通过移植lsof来解决产品连续开机死机的难题。详细介绍了移植过程,包括下载源码、配置kernel、修改Makefile以及编译步骤。同时,文章还概述了lsof命令的基本用法,如查看打开文件、端口和特定进程等。

之前参与的一个项目遇到过一个问题,我们的产品在拷机时发现:连续开机2天就会死机。这个问题交给了我来解决。

我查了几个小时代码,并没有发现明显的异常。好在我们的产品使用的Linux裁剪版系统,我想到可以用top命令来看内存变化。果然,经过2个小时的观察,发现内存是有规律减小的。因为我们的产品在运行过程中会涉及到一些文件的操作,所以感觉可能和这个有关。

运行lsof命令,提示”command not found”, 显然被裁掉了。于是决定自己移植一个。

最后发现,果然有个文件被多次打开,直到内存耗尽。

lsof是什么

* lsof -- list open files

移植过程

  • 这里下载源码lsof_4.76.tar.gz
  • 解压:$ tar zxvf lsof_4.76.tar.gz
  • 进入目录lsof_4.76
  • 配置kernel,运行configure
    • LINUX_KERNEL=/home/Smith/Kernel/2.6.28.9 LSOF_VERS=2142 ./Configure linux
      * 上面的/home/Smith/Kernel/2.6.28.9是产品的linux kernel源码路径
  • 配置Makefile
    • 交叉编译工具: CC= mips-linux-gnu-gcc
    • 设置小端: CFGF选项添加: -EL
    • 设置linux版本号:
      • -DLSOF_VSTR=\”2.6.28.9\”
        • “2.6.28.9”是在产品上运行$uname –r得到的
  • 编译:make, 生成lsof

lsof用法

运行lsof之后各字段说明

字段含义
COMMAND进程的名称
PID进程标识符
USER进程所有者
FD文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
TYPE文件类型,如DIR、REG等
DEVICE磁盘
SIZE文件的大小
NODE索引节点
NAME打开的文件

使用举例

  • $ lsof
    • 所有打开的文件
  • $ lsof -i23
    • 查看端口23(telnet)
  • $ lsof bin/sh
    • 查看打开bin/sh的所有进程
  • $ lsof /dev/malloc
    • 查看查看打开/dev/malloc的所有进程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值