1. 程式人生 > >linux 系統監控、診斷工具之 lsof 用法簡介

linux 系統監控、診斷工具之 lsof 用法簡介

1、lsof 簡介


lsof 是 linux 下的一個非常實用的系統級的監控、診斷工具。
它的意思是 List Open Files,很容易你就記住了它是 “ls + of”的組合~
它可以用來列出被各種程序開啟的檔案資訊,記住:linux 下 “一切皆檔案”,
包括但不限於 pipes, sockets, directories, devices, 等等。
因此,使用 lsof,你可以獲取任何被開啟檔案的各種資訊。


只需輸入 lsof 就可以生成大量的資訊,因為 lsof 需要訪問核心記憶體和各種檔案,所以必須以 root 使用者的身份執行它才能夠充分地發揮其功能。


lsof 的示例輸出:

[[email protected]
wm]# lsof | more COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME init 1 root cwd DIR 8,1 4096 2 / init 1 root rtd DIR 8,1 4096 2 / init 1 root txt REG 8,1 150352 3804838 /sbin/init init 1 root mem REG 8,1 65928 1048605 /lib64/libnss_files-2.12.so init 1 root mem REG 8,1 1922152 1048653 /lib64/libc-2.12.so init 1 root mem REG 8,1 93224 1048983 /lib64/libgcc_s-4.4.7-20120601.so.1 init 1 root mem REG 8,1 47064 1048613 /lib64/librt-2.12.so init 1 root mem REG 8,1 145720 1048682 /lib64/libpthread-2.12.so init 1 root mem REG 8,1 268232 1048618 /lib64/libdbus-1.so.3.4.0 init 1 root mem REG 8,1 39896 1048709 /lib64/libnih-dbus.so.1.0.0 init 1 root mem REG 8,1 101920 1048711 /lib64/libnih.so.1.0.0 init 1 root mem REG 8,1 156912 1048604 /lib64/ld-2.12.so init 1 root 0u CHR 1,3 0t0 3656 /dev/null init 1 root 1u CHR 1,3 0t0 3656 /dev/null init 1 root 2u CHR 1,3 0t0 3656 /dev/null init 1 root 3r FIFO 0,8 0t0 6679 pipe init 1 root 4w FIFO 0,8 0t0 6679 pipe

2、lsof 常用用法


2.1 監控開啟的檔案、裝置


檢視檔案、裝置被哪些程序佔用
[[email protected] wm]# lsof /dev/tty1
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mingetty 1491 root    0u   CHR    4,1      0t0 5152 /dev/tty1
mingetty 1491 root    1u   CHR    4,1      0t0 5152 /dev/tty1
mingetty 1491 root    2u   CHR    4,1      0t0 5152 /dev/tty1

2.2 監控檔案系統

指定目錄、掛載點,可以看到有哪些程序打開了其下的檔案: 
[[email protected] wm]# lsof /home/wm/
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
bash     2187 root  cwd    DIR    8,1     4096 5255364 /home/wm
vim      2215 root  cwd    DIR    8,1     4096 5255364 /home/wm
lsof     2238 root  cwd    DIR    8,1     4096 5255364 /home/wm
lsof     2239 root  cwd    DIR    8,1     4096 5255364 /home/wm
bash    31570 root  cwd    DIR    8,1     4096 5255364 /home/wm

2.3 監控程序

2.4 監控網路

檢視指定埠有哪些程序在使用(lsof -i 列出所有的開啟的網路連線): 
[[email protected] wm]# lsof -i:22
COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd     1296 root    3u  IPv4    9112      0t0  TCP *:ssh (LISTEN)
sshd     1296 root    4u  IPv6    9114      0t0  TCP *:ssh (LISTEN)
sshd     2185 root    3r  IPv4 3331745      0t0  TCP CDNTest69:ssh->172.31.11.74:ea (ESTABLISHED)
sshd    18642 root    3r  IPv4 3120500      0t0  TCP CDNTest69:ssh->172.31.16.26:newlixengine (ESTABLISHED)
sshd    31568 root    3r  IPv4 3309911      0t0  TCP CDNTest69:ssh->172.31.11.74:16980 (ESTABLISHED)

列出被某個程序開啟所有的網路檔案:
lsof -i -a -p 234

或者
lsof -i -a -c ssh

列出所有 tcp、udp 連線:
lsof -i tcp;
lsof -i udp; 
列出所有 NFS 檔案:
lsof -N -u lakshmanan -a

檢視指定網口有哪些程序在使用:
[[email protected] wm]# lsof [email protected]
COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd     2185 root    3r  IPv4 3331745      0t0  TCP CDNTest69:ssh->172.31.11.74:ea (ESTABLISHED)
sshd    18642 root    3r  IPv4 3120500      0t0  TCP CDNTest69:ssh->172.31.16.26:newlixengine (ESTABLISHED)
sshd    31568 root    3r  IPv4 3309911      0t0  TCP CDNTest69:ssh->172.31.11.74:16980 (ESTABLISHED)

3、更多使用技巧
3.1 監控使用者
檢視指定使用者開啟的檔案(lsof -u ^lakshmanan 可以排除某使用者):
[[email protected] wm]# lsof -u root | more
COMMAND     PID USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
init          1 root  cwd       DIR                8,1      4096          2 /
init          1 root  rtd       DIR                8,1      4096          2 /
init          1 root  txt       REG                8,1    150352    3804838 /sbin/init
init          1 root  mem       REG                8,1     65928    1048605 /lib64/libnss_files-2.12.so
init          1 root  mem       REG                8,1   1922152    1048653 /lib64/libc-2.12.so
init          1 root  mem       REG                8,1     93224    1048983 /lib64/libgcc_s-4.4.7-20120601.so.1
init          1 root  mem       REG                8,1     47064    1048613 /lib64/librt-2.12.so
init          1 root  mem       REG                8,1    145720    1048682 /lib64/libpthread-2.12.so
init          1 root  mem       REG                8,1    268232    1048618 /lib64/libdbus-1.so.3.4.0
init          1 root  mem       REG                8,1     39896    1048709 /lib64/libnih-dbus.so.1.0.0
init          1 root  mem       REG                8,1    101920    1048711 /lib64/libnih.so.1.0.0
init          1 root  mem       REG                8,1    156912    1048604 /lib64/ld-2.12.so

3.2 監控應用程式

檢視指定程式開啟的檔案:
[[email protected] wm]# lsof -c init
COMMAND PID USER   FD   TYPE             DEVICE SIZE/OFF    NODE NAME
init      1 root  cwd    DIR                8,1     4096       2 /
init      1 root  rtd    DIR                8,1     4096       2 /
init      1 root  txt    REG                8,1   150352 3804838 /sbin/init
init      1 root  mem    REG                8,1    65928 1048605 /lib64/libnss_files-2.12.so
init      1 root  mem    REG                8,1  1922152 1048653 /lib64/libc-2.12.so
init      1 root  mem    REG                8,1    93224 1048983 /lib64/libgcc_s-4.4.7-20120601.so.1
init      1 root  mem    REG                8,1    47064 1048613 /lib64/librt-2.12.so
init      1 root  mem    REG                8,1   145720 1048682 /lib64/libpthread-2.12.so
init      1 root  mem    REG                8,1   268232 1048618 /lib64/libdbus-1.so.3.4.0
init      1 root  mem    REG                8,1    39896 1048709 /lib64/libnih-dbus.so.1.0.0
init      1 root  mem    REG                8,1   101920 1048711 /lib64/libnih.so.1.0.0
init      1 root  mem    REG                8,1   156912 1048604 /lib64/ld-2.12.so
init      1 root    0u   CHR                1,3      0t0    3656 /dev/null
init      1 root    1u   CHR                1,3      0t0    3656 /dev/null
init      1 root    2u   CHR                1,3      0t0    3656 /dev/null
init      1 root    3r  FIFO                0,8      0t0    6679 pipe
init      1 root    4w  FIFO                0,8      0t0    6679 pipe
init      1 root    5r   DIR               0,10        0       1 inotify
init      1 root    6r   DIR               0,10        0       1 inotify
init      1 root    7u  unix 0xffff880037c17680      0t0    6680 socket
init      1 root    9u  unix 0xffff88007d86c680      0t0    8688 socket
4、命令模式技巧

4.1 組合邏輯查詢條件

只有多個查詢條件都滿足, 用 "-a" 引數,預設是 -o 。 

[[email protected] wm]# lsof -a -c bash -u root
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
bash     2187 root  cwd    DIR    8,1     4096 5255364 /home/wm
bash     2187 root  rtd    DIR    8,1     4096       2 /
bash     2187 root  txt    REG    8,1   938832 3014746 /bin/bash
bash     2187 root  mem    REG    8,1   156912 1048604 /lib64/ld-2.12.so
bash     2187 root  mem    REG    8,1    22536 1048988 /lib64/libdl-2.12.so
bash     2187 root  mem    REG    8,1  1922152 1048653 /lib64/libc-2.12.so
bash     2187 root  mem    REG    8,1   138280 1049003 /lib64/libtinfo.so.5.7
bash     2187 root  mem    REG    8,1 99158576 3419352 /usr/lib/locale/locale-archive
bash     2187 root  mem    REG    8,1    65928 1048605 /lib64/libnss_files-2.12.so
bash     2187 root  mem    REG    8,1    26060 3411690 /usr/lib64/gconv/gconv-modules.cache

4.2 lsof 命令的重複執行模式:

基於給定的引數延時多少秒重複執行 lsof

+r 表示 當沒有檔案被開啟的時候,repeat mode 將自行結束。

-r 表示 不管檔案是否存在或者被開啟,它都將執行,直到你中斷它。

每個迴圈的輸出使用 ‘=======’ 做分隔符,你也可以用 ‘-r’ | ‘+r’ 指定延時時間。

[[email protected] wm]# lsof -u root -c init -a -r5
COMMAND PID USER   FD   TYPE             DEVICE SIZE/OFF    NODE NAME
init      1 root  cwd    DIR                8,1     4096       2 /
init      1 root  rtd    DIR                8,1     4096       2 /
init      1 root  txt    REG                8,1   150352 3804838 /sbin/init
init      1 root  mem    REG                8,1    65928 1048605 /lib64/libnss_files-2.12.so
init      1 root  mem    REG                8,1  1922152 1048653 /lib64/libc-2.12.so
init      1 root  mem    REG                8,1    93224 1048983 /lib64/libgcc_s-4.4.7-20120601.so.1
init      1 root  mem    REG                8,1    47064 1048613 /lib64/librt-2.12.so
init      1 root  mem    REG                8,1   145720 1048682 /lib64/libpthread-2.12.so
init      1 root  mem    REG                8,1   268232 1048618 /lib64/libdbus-1.so.3.4.0
init      1 root  mem    REG                8,1    39896 1048709 /lib64/libnih-dbus.so.1.0.0
init      1 root  mem    REG                8,1   101920 1048711 /lib64/libnih.so.1.0.0
init      1 root  mem    REG                8,1   156912 1048604 /lib64/ld-2.12.so
init      1 root    0u   CHR                1,3      0t0    3656 /dev/null
init      1 root    1u   CHR                1,3      0t0    3656 /dev/null
init      1 root    2u   CHR                1,3      0t0    3656 /dev/null
init      1 root    3r  FIFO                0,8      0t0    6679 pipe
init      1 root    4w  FIFO                0,8      0t0    6679 pipe
init      1 root    5r   DIR               0,10        0       1 inotify
init      1 root    6r   DIR               0,10        0       1 inotify
init      1 root    7u  unix 0xffff880037c17680      0t0    6680 socket
init      1 root    9u  unix 0xffff88007d86c680      0t0    8688 socket

5、最後的技巧
關於磁碟空間告警 df -h --max=1 與 du -hx --max=1 顯示不一致的問題,
最常見的的還是下面這種情況:
lsof|grep -i delete
看看被刪除的檔案:有些刪了檔案,但是程序沒 reload,那些空間還是佔用的,你可以理解為類似 windows 下的程序控制代碼沒釋放的概念吧~ 只是 windows 下如果有檔案被程序使用,你一般是刪不掉的,而 linux 雖然不做刪除限制,但卻要等到程序使用完檔案才能完全釋放,以防止程序奔潰,這是作業系統對資源的管理差異吧~
例如 nginx 會有很多臨時檔案佔用了 /tmp 目錄,刪掉後,依然佔用著空間,
此時你可以:
pkill -9 nginx && /etc/init.d/nginx restart
好吧,本文到此結束了,關於 lsof 還有很多很多,不過哥常用、知道的就這些了,哥也只能幫你到這兒了,  

6、refer: 

使用 lsof 查詢開啟的檔案

15 Linux lsof Command Examples (Identify Open Files)

實用的系統工具之 lsof



相關推薦

linux 系統監控診斷工具 lsof 用法簡介

1、lsof 簡介 lsof 是 linux 下的一個非常實用的系統級的監控、診斷工具。 它的意思是 List Open Files,很容易你就記住了它是 “ls + of”的組合~ 它可以用來列出被各種程序開啟的檔案資訊,記住:linux 下 “一切皆檔案”, 包括但不限

linux 系統監控診斷工具 top 詳解

文章來源:http://my.oschina.net/leejun2005/blog/157910 接觸 linux 的人對於 top 命令可能不會陌生(不同系統名字可能不一樣,如 IBM 的 aix 中叫 topas ),它的作用主要用來監控系統實時負載率、程序的資源佔用

三十六rsync通過服務同步Linux系統日誌screen工具

rsync通過服務同步 Linux系統日誌 screen工具 三十六、rsync通過服務同步、Linux系統日誌、screen工具一、rsync通過服務同步該方式可以理解為:在遠程主機上建立一個rsync的服務器,在服務器上配置好各種應用,然後本機將作為客戶端連接遠程的服務器。啟動服務前要先編輯配

36.rysnc通過服務同步linux系統日誌screen工具

rysnc通過服務同步 linux系統日誌 screen工具 一、rysnc通過服務同步rsync 通過服務的方式同步要編輯配置文件/etc/rsyncd.conf啟動服務rsync --daemon格式:rsync -av test1/ 192.168.127.133::module/dir/

Day 7 Linux系統監控硬盤分區等

char 實時 系統監控 份額 chan 標準 lock mkfs.ext4 登錄 Linux之系統監控、硬盤分區等 系統監控 系統監視和進程控制工具—top和free 1) 掌握top命令的功能:top命令是Linux下常用的性能分析工具,能夠實時顯示

Linux系統監控工具

linux系統監控工具需要監視Linux服務器的性能?試試這些內置的命令和一些附加的工具吧。大多數Linux發行版都集成了一些監視工具。這些工具可以獲取有關系統活動的信息的詳細指標。通過這些工具,你可以發現產生系統性能問題可能存在原因。下面討論的是一些最基本的命令,它涉及到系統分析和調試服務器等一些問題,如:

linux系統監控工具glances

版本信息 AR glances 通過 ip 地址 arch 下載安裝 mirrors 性能監控 glances linux系統自帶了很多系統性能監控工具,如top,vmstat,iftop等等,還有一款監視工具glances,它能把其他幾個監控的指標都集於一身。Glance

常用的Linux系統監控工具

1、常用命令  -e 顯示所有 -f 全格式。 -h 不顯示標題。 -l 長格式。 -w 寬輸出。 a 顯示終端上的所有程序,包括其他使用者的 r 只顯示正在執行的程序。 x 顯示沒有控制終端的程序。 Linux系統監控工具 1、mpstat - 多處理器

運維不得不知的 Linux 效能監控測試優化工具

Linux 平臺上的效能工具有很多,眼花繚亂,長期的摸索和經驗發現最好用的還是那些久經考驗的、簡單的小工具。系統性能專家 Brendan D. Gregg 在 LinuxCon NA 2014 大會上更新了他那個有名的關於 Linux 效能方面的 talk (Linux Performance To

性能測試三十三:監控Linux系統監控命令大全

毫秒 car fir ges error 狀態 tac 總數 x86_64 1.top命令top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源占用狀況,類似於Windows的任務管理器。下面詳細介紹它的使用方法。top - 01:06:48 up 1

運維筆記40 Linux系統監控Cacti(Cacti搭建,自動抓取cacti統計圖片指令碼)

概述:監控系統在一個系統中十分重要,它會將很多重要的資訊,諸如記憶體資訊,cpu資訊,硬碟資訊集合在一起顯示出來,當系統出現問題的時候我們能及時定位並修復錯誤。今天介紹的監控系統是一款輕量級的監控系統Cacti,並附有python編寫的cacti統計圖片採集指令

每個系統管理員都要知道的 30 個 Linux 系統監控工具

11. netstat - Linux 網路統計監控工具netstat 命令顯示網路連線、路由表、介面統計、偽裝連線和多播連線等資訊。# netstat -tulpn # netstat -nat12. ss - 網路統計ss 命令用於獲取套接字統計資訊。它可以顯示類似於 netstat 的資訊。不過 net

監控Linux系統狀態手動增加swap空間

檢視系統負載: w命令/uptime命令 在運維工作中,w命令是一個最常用的命令

linux分析工具lsof詳解

一、概述       在linux中,所有東西都是以檔案的形式存在的,所以我們在linux上的操作都是通過對檔案的操作來執行我們所需要的邏輯,比如我們對檔案資料的訪問,修改,訪問網路的連線等,剛好lsof(list open file)命令用於檢視程序開啟的檔案,開啟檔案的程序

Linux 系統監控工具 atop

系統監控是運維工作中重要的一環,本文以 atop 工具為例來介紹系統的重要監控項。 atop可以使用yum或apt包管理器進行安裝。atop man page 中詳細說明了 atop 中各監控項含義及atop命令用法。 如上圖所示, atop 的介面分為上半部分的系統監控項和下半部分的程序列表。 atop

Linux 系統監控 硬盤分區及格式化

所在 占用 disk str 性能 多個進程 buffer 使用情況 alt top linux系統中性能分析工具,實時顯示系統中各個進程的資源占用情況,類似windows中的資源管理器。 free命令 顯示內存的使用情況,total,used,free,b

linux系統監控與硬盤分區/格式化/文件系統管理

時間 運行 輸入 -c 進程pid 死循環 running ddl 變慢 1.系統監控 1) 系統監視和進程控制的工具----> Top 與 free 類似於windows的資源管理器。 進程運行的三種狀態: tips: 進程(Proce

Linux系統調優相關工具

應用 磁盤讀寫 系統 相關 系統調優 網絡 運行 work lin 系統調優4大子系統 實戰1:找出系統中使用CPU最多的進程? 實戰2:找出系統中使用內存最多的進程? 實戰3:找出系統中對磁盤讀寫最多的進程? 實戰4:找出系統中使用網絡最多的進程? 系統調

Linux系統上傳下載工具rz/sz

linux系統上傳下載工具rz/szLinux系統上傳下載工具rz/szlinux系統中上傳與下載的工具有很多,比如:filezilla.exe等。為了使用linux系統方便,rz / sz命令很方便的幫我們實現了這個功能,但是很多Linux系統初始並沒有這兩個命令。下面對此命令進行說明:下載軟件lrzszl