歡迎您光臨本站 註冊首頁

linux下的一個診斷分析工具lsof

←手機掃碼閱讀     火星人 @ 2014-03-25 , reply:0

lsof能顯示出由系統里正在運行的進程所打開的文件,也能顯示出每一個進程的通訊socket.



下面,lsof的用法總結:




1、查看文件系統阻塞
lsof 目錄名 可以查看還有哪些進程在使用這個目錄,例:
當一個用戶以oracle的身份telnet到伺服器,那麼用lsof /home/oracle 就可以看到它的進程號.
[root@vm4 ~]# lsof /home/oracle
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
tnslsnr 2709 oracle cwd DIR 8,3 4096 1087047 /home/oracle
bash 3827 oracle cwd DIR 8,3 4096 1087047 /home/oracle



2、搜索打開的網路連接
搜索某個ip打開的所有網路連接:
我從一個windows客戶端用sqlplus連接伺服器,在伺服器上可以看到:
[root@vm4 ~]# lsof -i@192.168.5.168
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
sshd 3354 root 3u IPv6 9276 TCP 192.168.2.134:ssh->192.168.5.168:2030 (ESTABLISHED)
sshd 3356 oracle 3u IPv6 9276 TCP 192.168.2.134:ssh->192.168.5.168:2030 (ESTABLISHED)
oracle 3860 oracle 13u IPv4 12962 TCP 192.168.2.134:1521->192.168.5.168:2372 (ESTABLISHED)



其中前2個是telnet的鏈接,第3個是sqlplus的鏈接,埠是2372



3、尋找本地斷開的打開文件
lsof +L1



4、搜索被程序打開的所有文件及打開的文件相關聯進程



我在windows的機器上sqlplus連接一個linux上面的oracle10g,在linux上面會有一個process作為我的鏈接的server process.
ps看一下:
[root@vm4 ~]# ps -ef | grep oracle
oracle 2709 1 0 20:17 ? 00:00:00 /u01/oracle/product/10.2.0/db_1/bin/tnslsnr LISTENER -inherit
root 3354 2218 0 20:33 ? 00:00:00 sshd: oracle [priv]
oracle 3356 3354 0 20:34 ? 00:00:00 sshd: oracle@pts/1
oracle 3357 3356 0 20:34 pts/1 00:00:00 -bash
oracle 3390 1 0 20:35 ? 00:00:00 ora_pmon_rawdb
oracle 3392 1 0 20:35 ? 00:00:00 ora_psp0_rawdb
oracle 3394 1 0 20:35 ? 00:00:00 ora_mman_rawdb
oracle 3396 1 0 20:35 ? 00:00:00 ora_dbw0_rawdb
oracle 3398 1 0 20:35 ? 00:00:00 ora_lgwr_rawdb
oracle 3400 1 0 20:35 ? 00:00:00 ora_ckpt_rawdb
oracle 3402 1 0 20:35 ? 00:00:00 ora_smon_rawdb
oracle 3404 1 0 20:35 ? 00:00:00 ora_reco_rawdb
oracle 3406 1 0 20:35 ? 00:00:00 ora_cjq0_rawdb
oracle 3408 1 0 20:35 ? 00:00:01 ora_mmon_rawdb
oracle 3410 1 0 20:35 ? 00:00:00 ora_mmnl_rawdb
oracle 3414 1 0 20:35 ? 00:00:00 ora_qmnc_rawdb
oracle 3420 1 0 20:35 ? 00:00:00 ora_q000_rawdb
oracle 3422 1 0 20:35 ? 00:00:00 ora_q001_rawdb
oracle 3464 1 1 20:38 ? 00:00:00 oraclerawdb (LOCAL=NO)
root 3499 3466 0 20:39 pts/1 00:00:00 grep oracle



3464就是那個為我的客戶端服務的server process的進程號.用lsof來看看他使用的文件和通訊埠.
lsof -p 3464
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
oracle 3464 oracle cwd DIR 8,3 4096 1184867 /u01/oracle/product/10.2.0/db_1/dbs
oracle 3464 oracle rtd DIR 8,3 4096 2 /
oracle 3464 oracle txt REG 8,3 86175221 551701 /u01/oracle/product/10.2.0/db_1/bin/oracle
oracle 3464 oracle mem REG 8,3 106441 391214 /lib/ld-2.3.4.so
oracle 3464 oracle mem REG 8,3 1451681 391215 /lib/tls/libc-2.3.4.so
oracle 3464 oracle mem REG 8,3 15340 391217 /lib/libdl-2.3.4.so
oracle 3464 oracle mem REG 8,3 178307 391216 /lib/tls/libm-2.3.4.so
oracle 3464 oracle mem REG 8,3 93993 391218 /lib/tls/libpthread-2.3.4.so
oracle 3464 oracle mem REG 8,3 95192 391226 /lib/libnsl-2.3.4.so
oracle 3464 oracle DEL REG 0,6 163841 /SYSV9a02403c
oracle 3464 oracle mem CHR 1,5 1608 /dev/zero
oracle 3464 oracle mem REG 8,3 45816 389426 /lib/libnss_files-2.3.4.so
oracle 3464 oracle mem REG 8,3 2628 696392 /usr/lib/libaio.so.1.0.1
oracle 3464 oracle mem REG 8,3 5480533 1188614 /u01/oracle/product/10.2.0/db_1/lib/libnnz10.so
oracle 3464 oracle mem REG 8,3 98079 1187068 /u01/oracle/product/10.2.0/db_1/lib/libdbcfg10.so
oracle 3464 oracle mem REG 8,3 70077 1188456 /u01/oracle/product/10.2.0/db_1/lib/libclsra10.so
oracle 3464 oracle mem REG 8,3 9017903 1185770 /u01/oracle/product/10.2.0/db_1/lib/libjox10.so
oracle 3464 oracle mem REG 8,3 728411 1188452 /u01/oracle/product/10.2.0/db_1/lib/libocrutl10.so
oracle 3464 oracle mem REG 8,3 1211519 1188451 /u01/oracle/product/10.2.0/db_1/lib/libocrb10.so
oracle 3464 oracle mem REG 8,3 854560 1188450 /u01/oracle/product/10.2.0/db_1/lib/libocr10.so
oracle 3464 oracle mem REG 8,3 8069 1187147 /u01/oracle/product/10.2.0/db_1/lib/libskgxn2.so
oracle 3464 oracle mem REG 8,3 2365801 1188455 /u01/oracle/product/10.2.0/db_1/lib/libhasgen10.so
oracle 3464 oracle mem REG 8,3 143485 113871 /u01/oracle/product/10.2.0/db_1/lib/libskgxp10.so
oracle 3464 oracle 0u CHR 1,3 1607 /dev/null
oracle 3464 oracle 1u CHR 1,3 1607 /dev/null
oracle 3464 oracle 2u CHR 1,3 1607 /dev/null
oracle 3464 oracle 3r REG 0,1 955 34 /init
oracle 3464 oracle 4r CHR 1,3 1607 /dev/null
oracle 3464 oracle 5r CHR 1,3 1607 /dev/null
oracle 3464 oracle 6r CHR 1,3 1607 /dev/null
oracle 3464 oracle 7r CHR 1,3 1607 /dev/null
oracle 3464 oracle 8r CHR 1,5 1608 /dev/zero
oracle 3464 oracle 9r REG 8,3 834560 568806 /u01/oracle/product/10.2.0/db_1/rdbms/mesg/oraus.msb
oracle 3464 oracle 10u CHR 162,10 5795 /dev/raw/raw10
oracle 3464 oracle 11u CHR 162,6 5682 /dev/raw/raw6
oracle 3464 oracle 12r REG 8,3 584704 568815 /u01/oracle/product/10.2.0/db_1/rdbms/mesg/orazhs.msb
oracle 3464 oracle 13u IPv4 9944 TCP 192.168.2.134:1521->192.168.5.168:2057 (ESTABLISHED)
oracle 3464 oracle 14r REG 8,3 834560 568806 /u01/oracle/product/10.2.0/db_1/rdbms/mesg/oraus.msb



其中:
oracle 3464 oracle 13u IPv4 9944 TCP 192.168.2.134:1521->192.168.5.168:2057 (ESTABLISHED)
說明了這個server process 這在用tcpip鏈接我機器的2057埠.
其它信息表明了他所使用的文件.



5、 其它使用命令
-c c 顯示出以字母 c開頭進程現在打開的文件
例:顯示以init進程現在打開的文件
[root@vm4 ~]# lsof -c init
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
init 1 root cwd DIR 8,3 4096 2 /
init 1 root rtd DIR 8,3 4096 2 /
init 1 root txt REG 8,3 32684 324537 /sbin/init
init 1 root mem REG 8,3 106441 391214 /lib/ld-2.3.4.so
init 1 root mem REG 8,3 1451681 391215 /lib/tls/libc-2.3.4.so
init 1 root mem REG 8,3 53736 389497 /lib/libsepol.so.1
init 1 root mem REG 8,3 56320 391229 /lib/libselinux.so.1
init 1 root 3r REG 0,1 955 34 /init
init 1 root 10u FIFO 0,13 1094 /dev/initctl

[火星人 ] linux下的一個診斷分析工具lsof已經有256次圍觀

http://coctec.com/docs/linux/show-post-155342.html