|
|
发现当前磁盘空间使用情况:
3 N7 w# o" ~* w# G k: h; d0 l
) |3 P' {6 _4 G- M- p7 [
8 |8 x0 f5 _ l& B# `0 X7 l# H$ M7 @$ s. }6 W! Y$ e
[root@ticketb ~]# df -h; U, V8 y. t) v% K
Filesystem Size Used Avail Use% Mounted on4 B+ |. `8 S4 ^
/dev/sda1 981M 203M 729M 22% /- Z! O+ s) [$ }6 b
none 16G 0 16G 0% /dev/shm' R% Y/ t4 }* M2 `# N. X$ j9 f
/dev/sda9 2.9G 37M 2.7G 2% /tmp
: d2 k) F% p2 |% T3 X+ m. p' A% F/dev/sda7 4.9G 1.9G 2.7G 42% /usr& c1 U& w* T3 O
/dev/sda8 2.9G 145M 2.6G 6% /var
- |! |$ }8 A+ L1 W% F* K7 Z/dev/mapper/vghome-lvhome
" u, r- t+ s. }5 d E% m 20G 19G 11M 100% /home% Z2 j1 W& M/ H; j3 k
/dev/mapper/vgoradata-lvoradata
+ P* M6 x5 Z" U 144G 48G 90G 35% /u01/oradata
/ B j' j4 V/ o: X* g @/dev/mapper/vgbackup-lvbackup
1 ~2 E- s1 o6 t+ U 193G 7.8G 175G 5% /u01/backup
7 c* g9 T0 _7 N7 ]6 a) x" Y6 u- { k% ^, z5 E4 }
g: k: J; {* O& ]* E0 c通过下面的命令找到无用的文件,然后删除
! n+ N4 @7 x( Q
( d. M4 k, `/ d y3 k% y9 e/ O$ J2 V+ ^! T) H
[root@ticketb ~]# find /home/oracle/admin/dbticb/udump/ -name "dbticb_*.trc" -mtime +50 | xargs rm -rf% ?5 L# |% }$ |% t9 c8 ^0 S: V
E- p& o$ s. k& n
$ g# n+ s9 p! o0 ~% y+ E
; y: w, K" ?6 s' a V6 Z5 C
然后在查看磁盘空间使用情况,发现没有/home空间没有变化* o$ u8 x) R3 A7 U
4 T- w: T, o! a/ i
" ^: ^, j$ t/ }3 p+ O' ]" n; @5 D8 \2 ]) N, b2 }
[root@ticketb ~]# df -h$ u* N4 K0 ^& w- ~7 y+ \
Filesystem Size Used Avail Use% Mounted on9 u9 N7 f4 ~1 H+ `. R4 s
/dev/sda1 981M 203M 729M 22% /
( @5 [* T7 s5 D6 o# `- f2 T! @none 16G 0 16G 0% /dev/shm
( H& s; P1 T- i$ F4 ]- _/dev/sda9 2.9G 37M 2.7G 2% /tmp# j1 Z: H- N% A- i4 }+ n' g" U8 S
/dev/sda7 4.9G 1.9G 2.7G 42% /usr
8 I0 [. v& u3 V/ u( b( e/dev/sda8 2.9G 145M 2.6G 6% /var
4 i' o' Y h: o4 r' ^6 n1 S/dev/mapper/vghome-lvhome
1 v" ^0 x5 U+ ?0 k5 w, r/ l2 n 20G 19G 11M 100% /home! ^+ d% F$ ]% A6 K. l( s% H
/dev/mapper/vgoradata-lvoradata
* e6 ^0 H2 s8 L1 o, L 144G 48G 90G 35% /u01/oradata: ] {4 O+ A. u, E- E! E: m2 N
/dev/mapper/vgbackup-lvbackup
. [; X1 s1 l, T6 J 193G 7.8G 175G 5% /u01/backup: s. K1 D- X" f9 z- O4 o
; u% }' ]( \. V. \, R, i
5 Q ?7 p! \2 F) U) z
% s: K, a: u4 z* q这个郁闷啊,明明删除文件了,怎么空间没有被释放啊,rm命令应该是直接删除啊,在查看下/home下还有什么占用空间
" Q# U9 F2 X6 G- Q% t( I
" M4 P; ]0 u) M! h( S: P7 e# x& m2 i# G: z$ z# |; k
0 C6 Y* A0 f- p$ n
[root@ticketb ~]# du -h --max-depth=1 /home
& F2 ?8 F5 j" ^" s7 z16K /home/lost+found1 M' i, w* A. J
2.6G /home/oracle U. U4 w% f1 j$ h% F
2.6G /home
I6 [7 W7 t; q+ E
6 U4 F3 `+ X5 K5 ]" A8 c/ I: m2 i8 |# Z( y+ w3 D, T
- k, O$ ?; T9 c1 [
可这里显示空间已经释放了啊,于是google下,) ?% M S6 x# x; Q% Z/ }* m
2 k7 E, L+ Q8 f$ ]' n5 G8 U
- \, q6 R v7 A9 X/ H
1 |& ^- x3 i. N0 { a# H2 y L未释放磁盘空间原因:
6 O" K' x8 d5 R+ g' X% a" y6 H8 t( a2 \
: ^4 S9 Z) W6 ~: o6 b0 D- S" v; x" ]- O1 R E
在Linux或者Unix系统中,通过rm或者文件管理器删除文件将会从文件系统的目录结构上解除链接(unlink).然而如果文件是被
6 N) n7 V1 J- e1 @/ {4 Z4 B8 }3 M打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。而我删除的是oracle的告警log文件
2 o, r8 |& \: ?! H删除的时候文件应该正在被使用
: \( E/ S6 J) `. [* s: {# e* C4 l- m) U! X+ z+ f
1 v1 L k. e( O/ v6 t# w. ?; s
: A6 O1 B' G; n解决方法* H4 M7 D5 q6 j4 N+ Q) C- Y
% V* P* i+ T$ [ l2 `* W
$ b6 Q. `" E' B3 K
4 v8 f+ Z2 Y' I8 U u7 \; W: c
首先获得一个已经被删除但是仍然被应用程序占用的文件列表,如下所示: z: Y6 v+ \8 o9 J9 j0 g8 p0 L
+ o# d: l7 A4 p9 e4 s
3 E6 J* j3 B: m/ H( Q[root@ticketb ~]# lsof |grep deleted
# m4 t# A& v/ E w+ `oracle 12639 oracle 5w REG 253,0 648 215907 /home/oracle/admin/dbticb/udump/dbticb_ora_12637.trc (deleted)1 y& ]6 P3 s; O. G
oracle 12639 oracle 6w REG 253,0 16749822091 215748 /home/oracle/admin/dbticb/bdump/alert_dbticb.log (deleted)
( T0 Y7 ]6 ]' f/ [2 n# Eoracle 12639 oracle 7u REG 253,0 0 36282 /home/oracle/oracle/product/10.2.0/db_1/dbs/lkinstdbticb (deleted)
4 W# Y, i; c: r: ]0 C6 F+ roracle 12639 oracle 8w REG 253,0 16749822091 215748 /home/oracle/admin/dbticb/bdump/alert_dbticb.log (deleted)
8 C* x" g5 h0 n- ^$ \% P8 Horacle 12641 oracle 5w REG 253,0 648 215907 /home/oracle/admin/dbticb/udump/dbticb_ora_12637.trc (deleted)/ H) f# u; D7 Q D
oracle 12641 oracle 6w REG 253,0 16749822091 215748 /home/oracle/admin/dbticb/bdump/alert_dbticb.log (deleted)
; c0 t0 ]$ @3 ?/ v; g。
" {2 H0 X) |7 n0 ~。
" ~3 f) n; j9 t7 r0 \8 E。
# t: Q+ [% s# ?- V, V3 i7 Goracle 23492 oracle 6w REG 253,0 16749822091 215748 /home/oracle/admin/dbticb/bdump/alert_dbticb.log (deleted)
4 H+ z7 s% x+ [oracle 23492 oracle 7u REG 253,0 0 36282 /home/oracle/oracle/product/10.2.0/db_1/dbs/lkinstdbticb (deleted)
4 u9 q. @, i2 `4 W' eoracle 23492 oracle 8w REG 253,0 16749822091 215748 /home/oracle/admin/dbticb/bdump/alert_dbticb.log (deleted)
# G* W" I @6 q2 _1 A4 u" ^. {# }oracle 23494 oracle 10u REG 253,0 0 36307 /home/oracle/oracle/product/10.2.0/db_1/dbs/lkinstrmandb (deleted)5 D+ O( l+ A; `
6 n" ~' @* F6 x0 E+ T
! j( o! L" b& n! L B1 }( t
; k4 W: W" C5 F6 c
1 e! ]. Y+ R- m. S- }* ]0 S' k从输出结果可以看到/home/oracle/admin/dbticb/bdump/alert_dbticb.log还被使用,未被释放空间
0 I% ^+ N: H0 G- F! U# O
2 Y6 W, x; N7 w, A1 r
5 y) N/ R4 E+ E: v& y# u8 ]# a
# h$ c( x8 w& r6 z如何让进程释放呢?
0 @4 I% g2 P9 f+ f4 d2 {! \# Q; m$ w/ x9 M, C
. [3 T' y; f: h2 m t: F e# s2 K# h7 Z0 V
一种方法是kill掉相应的进程,或者停掉使用这个文件的应用,让os自动回收磁盘空间* @$ S& V( N/ ?* h O( P' `% S6 T
; K+ m; G7 u# g; N( l. C我这个环境有很多进程在使用的这个文件,停掉进程有点麻烦,再有就是风险很大$ r$ x0 ~3 |4 X4 Q1 v2 x
4 a% }6 A6 e: e T3 `4 C) Y( v4 H/ J$ }! b) m, V6 y( h2 ^3 s$ K
. k; ~5 A" A4 P3 I当linux打开一个文件的时候,Linux内核会为每一个进程在/proc/ 『/proc/nnnn/fd/目录(nnnn为pid)』建立一个以其pid
: V! o9 N0 U- r为名的目录用来保存进程的相关信息,而其子目录fd保存的是该进程打开的所有文件的fd(fd:file descriptor)。
. P5 I: M1 z: ]/ t
8 h7 y) i- t3 ~9 N7 Y2 Mkill进程是通过截断proc文件系统中的文件可以强制要求系统回收分配给正在使用的的文件。2 {1 \$ z2 x# x: P+ j
这是一项高级技术,仅到管理员确定不会对运行中的进程造成影响时使用。应用程序对这种方
, M9 |- @* k+ R式支持的并不好,当一个正在使用的文件被截断可能会引发不可预知的问题$ R5 o& Y7 i; H2 S/ G- t6 x
$ r! P% f0 ]& D' U% u. Z! H' _" l& f: a0 h0 z4 g
; Q3 D4 }2 v2 W) V$ v8 g所以我还是采用停应用来解决& R: Y; t5 u# h7 F
0 S4 P; h$ F' I: u6 e
) ?+ v3 o% F# q3 P; T0 X: [+ w
( L0 [& [' c. U' Crestart oracle数据库,发现/home/oracle/admin/dbticb/bdump/alert_dbticb.log对应的空间被释放& m5 p- K8 K4 ?( C/ [, k/ @
; ?* T) E3 i1 k O9 K0 h: }$ m
% C; c; H2 H3 g' y2 b* U! ?
5 p4 m5 f5 { C. e5 d5 S1 L在查看磁盘空间的使用情况,发现空间已经回收了4 l7 M' ^8 { d5 D' f) P
7 @# l1 L2 i- J6 e: v1 ~3 V5 p9 s1 S
[root@ticketb ~]# df -h& w" A; R6 }" k( u# J
Filesystem Size Used Avail Use% Mounted on
' L* I: {: N$ M3 h" F/dev/sda1 981M 203M 729M 22% / \% Q. y1 K( ^" e9 l
none 16G 0 16G 0% /dev/shm
% V. u8 s6 P# l) X& p6 d$ X* ~/dev/sda9 2.9G 37M 2.7G 2% /tmp
# U# Q# r- h: }6 C, Q8 ]6 I/dev/sda7 4.9G 1.9G 2.7G 42% /usr {: B9 K* o# E/ z7 e$ l; c
/dev/sda8 2.9G 145M 2.6G 6% /var) d; y0 E+ d* O8 S+ B, E) e4 X
/dev/mapper/vghome-lvhome$ H V/ A& B% g4 o: ]
20G 2.6G 16G 15% /home
- h. V" U, \( L: }( f' E5 O! t/dev/mapper/vgoradata-lvoradata
5 K5 u3 d6 j- q6 t9 d7 N e 144G 48G 90G 35% /u01/oradata! I3 P, |, O' d+ L, q+ p# G
/dev/mapper/vgbackup-lvbackup& P9 c/ t+ q" K' F4 @
193G 7.8G 175G 5% /u01/backup9 c) S0 P6 B: D
6 t% S' N! F# A/ ^% l; H
' R$ U4 y$ ], r2 J( rok,问题解决,然后做下收尾工作即可! U/ X. r6 v# N5 v4 t" r0 y; I
/ q7 Q: M1 t* q1 H/ i
6 M2 }( S- g! U x8 R* U
9 F, R* ~8 m8 N+ t0 k1 f) |-------------------------------------------------------------------------------------------------
# ?; o; q `; d9 H- c9 w8 K
- h$ y2 |, S, l; E6 z* n6 n; u: M7 N' m/ Y! _
) @: X) Z2 @. O7 q* L1 d- N学习下lsof命令
% M0 h1 ?! D- y
1 d3 }& z$ t0 J6 {3 l6 S, R5 s) p" U& y% ~$ @2 x& \1 } B. Q
, a7 T2 H3 y$ H0 W9 B1 S2 r% t2 E
lsof全名list opened files,也就是列举系统中已经被打开的文件。我们都知道,linux环境中,任何事物都是文件,
+ W! B9 y7 ~, c- `设备是文件,目录是文件,甚至sockets也是文件。所以,用好lsof命令,对日常的linux管理非常有帮助。
0 I) f u& |) f7 V U g2 `0 O3 b- T
; Y' n8 X) {0 Z( G
# T [+ T/ H0 _lsof是linux最常用的命令之一,通常的输出格式为:, l2 s5 c! k% H3 d2 h+ I2 H1 T
4 Y2 C* g% p( ]/ v" l+ y) r Q
/ u) I! p5 Q% v9 Q# i/ O4 h8 v8 T8 T+ _4 O; I0 F. Y
引用0 M( l1 f x; M' c0 w) Q# z
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME5 S7 z8 Q6 ~4 H
# H, S6 U, r! R0 y- V' Q8 e. u/ g
+ c% ], v! d& O6 r4 ?; j& A% C& Z2 \- f( G0 v# }
常见包括如下几个字段:更多的可见manual。8 l& K% Y' [+ x4 ?" c0 o0 ?/ K
8 {& a$ O( o" n. G! `* X1 M4 ]
1、COMMAND
, Q6 Z. z* A7 m) O默认以9个字符长度显示的命令名称。可使用+c参数指定显示的宽度,若+c后跟的参数为零,则显示命令的全名
8 T( \ ?$ ^2 d1 P! j. k% }2、PID:进程的ID号
/ l% \, \' [1 b# M0 b( a3、PPID$ N' I7 W, P6 d( l: w9 n, c
父进程的IP号,默认不显示,当使用-R参数可打开。
1 Y0 f. e! }& I) P i# u% s4、PGID
. R% h; }* q) l# F进程组的ID编号,默认也不会显示,当使用-g参数时可打开。
/ b4 ~ F! h! u7 ~" |5、USER
4 @, W; @7 e/ w2 m8 i( ]1 c$ N命令的执行UID或系统中登陆的用户名称。默认显示为用户名,当使用-l参数时,可显示UID。# N* E2 D I$ l
6、FD; t( h0 }4 f* A( a6 U" z& Q
是文件的File Descriptor number,或者如下的内容:4 M3 ?8 J. |* j }& O' W# m
(这里很难翻译对应的意思,保留英文)9 u4 u3 V F& R9 l
& H) n) L4 H a7 N0 d4 i) ~7 y: y9 M8 }
" F; o: K# x: O! p/ c" W; E/ k引用7 h' {- [/ _. Q [* B. C1 g
cwd current working directory;6 a' r, _4 Q" O5 J* b$ U& x
Lnn library references (AIX);5 Q" }6 n+ U* m% _/ u$ ]
jld jail directory (FreeBSD);
" L6 B0 b2 a# J0 oltx shared library text (code and data);5 Y: v0 S# r! E* ?# p8 J# D
Mxx hex memory-mapped type number xx.
5 W- T4 V- R2 ~4 F! R; K8 E- `' L1 m$ Om86 DOS Merge mapped file;
" N' J! [# S5 B% |mem memory-mapped file;
0 l A& U$ Z1 s1 M" X. G+ Pmmap memory-mapped device;
& G# P. F4 G7 fpd parent directory;7 n) U% s- z, c3 z* j c7 v1 E. D
rtd root directory;8 u4 ^0 [" O" n J& H4 Z& z! ]
tr kernel trace file (OpenBSD);
/ }! z' R! [/ [txt program text (code and data);5 \* t$ b4 h2 j g! X& u; x) U
v86 VP/ix mapped file;* y& D2 ?4 I2 V) F- t5 Z
6 A% ?; t$ Q: Z; O6 ~, C2 U; ]. H1 B! _. g9 |1 `
7 G- o, E1 e# H* C
! z) O+ J7 c: f7 k+ J5 f. G. R
J$ a+ L, e+ N6 q# F) q! ]文件的File Descriptor number显示模式有:
: s! F4 G; W0 g: M; Y
$ U8 m( S; `9 d3 r5 i+ s j; g2 A O4 Q+ u$ ~# m+ |7 N
2 [0 ]7 O7 u* K4 e
引用
2 [0 Q2 j: Q; m) u% C ^1 A7 Ur for read access;
( K/ B! Q# i/ gw for write access;
& v( ]7 @3 H& H. a% x( n0 fu for read and write access;
2 x" ]& {% ]: w ?, mN for a Solaris NFS lock of unknown type;
" a9 f9 T1 Y" W; B5 Wr for read lock on part of the file;( h" w3 T7 G q/ c* s$ O
R for a read lock on the entire file;
6 O% Z( T# B6 a: @; T$ M, yw for a write lock on part of the file;9 j& {: I! Y' [* m3 H
W for a write lock on the entire file;# T3 l0 A: [8 `8 r `
u for a read and write lock of any length;
0 r( Q- L! T/ H- k6 a5 v* tU for a lock of unknown type;
8 G+ H" ~( b: u. ax for an SCO OpenServer Xenix lock on part of the file;
" B+ X7 j; S" _ Q& QX for an SCO OpenServer Xenix lock on the entire file;
) c4 s" f# q. qspace if there is no lock.
& M$ y8 U2 m, j( ^+ e6 e3 t4 `6 i$ e' D: [/ T2 @$ B. @+ b4 j/ b+ E
$ k! z- W+ t P
. y* Z k& N% n v: G
9 ]% O' K, E" S, G
, |+ ^0 p! Z2 e* w# I7、TYPE. f0 ~* i( c) S3 S3 C9 c, K
8 f$ R3 K3 ^/ P) G- f3 y) n引用
6 }. ^ h. { d' t& eIPv4 IPv4的包;8 d. `) V% d8 D( w& u/ x6 s% [7 A Z
IPv6 使用IPv6格式的包,即使地址是IPv4的,也会显示为IPv6,而映射到IPv6的地址;
P6 p5 R& ~) Q& eDIR 目录
1 G( t; H) t8 H% V" MLINK 链接文件* e; W' y3 D$ Y, d3 H
" g+ j1 C' D/ q# l; `详情请看manual中更多的注释。
" C6 V: v8 g; b9 X' b8 j' y1 Y# M5 \, ^. u: P9 i/ J2 H3 ~
; J" M1 {6 Q$ P0 \' f
1 W( I0 g3 n1 ?- h' F8、DEVICE/ v; T% f' w# U/ U L* S- L$ A
使用character special、block special表示的设备号
F' M$ ^# q- H6 V9 X7 V Y9 i7 R! `& U6 w9、SIZE H5 J. x1 D6 Y2 }
文件的大小,如果不能用大小表示的,会留空。使用-s参数控制。
0 b$ t& X3 y H4 K10、NODE/ y. ?6 Q5 z/ X& Y# i
本地文件的node码,或者协议,如TCP等
4 R" U0 `6 K& `" L1 A6 @11、NAME
& M% ?$ ~ I$ U+ N挂载点和文件的全路径(链接会被解析为实际路径),或者连接双方的地址和端口、状态等' b* ^) {/ k9 ^7 G
2 D7 f2 d& z: g: ?5 Y; ^1 {1 ]$ E/ `. F. m3 |$ y: V0 N/ Y2 o
) ^" S& z1 k5 ^1 d7 ]0 q常用示例:5 P8 l) Q# K' H" l
- k: K0 S9 Y0 U0 X- [% M5 i5 X. R
% _# L9 [/ i5 P4 O
* G! t9 C3 [+ u# ]2 C8 m3 \% V1.显示开启文件/home/oracle/10.2.0/db_1/bin/tnslsnr的进程" \% f0 K# Q6 x
! z5 s( ~( c& c1 s( h I/ B9 o& y5 U. k/ N, N2 B
- g, L5 `& E3 c( O& `
[root@svr-db-test ~]# lsof /home/oracle/10.2.0/db_1/bin/tnslsnr
% Q* A4 [5 t. J. B- T; W" w% aCOMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
! l0 g& u! R* Utnslsnr 3520 oracle txt REG 253,5 431062 11408866 /home/oracle/10.2.0/db_1/bin/tnslsnr
: c1 y5 i3 P& o' M2 x
; l9 e8 K: c5 L; ^
+ m, U+ j8 B1 Y J! a9 d; b" ?3 N
& c1 ^: v& [" f1 [1 }$ v2.知道22端口现在运行什么程序
9 F" `* X) U. k) k. t( G' ~0 N) L Y
9 S9 e. m1 ?6 L: ~ i( ]
/ K9 E! h, z' I3 a% G[root@svr-db-test ~]# lsof -i :22& x6 {5 ?$ u6 E2 N& z) e0 K
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME d. j3 q2 E6 N
sshd 3101 root 3u IPv6 8670 TCP *:ssh (LISTEN)
% }9 S3 q0 d- A7 h: e: @* [sshd 4545 root 3u IPv6 4237972 TCP 203.aibo.com:ssh->win-avbmq9e8ka7.gdgg.local:nsjtp-ctrl (ESTABLISHED)
; G4 m4 B$ U) h; G& N5 E; _) S: Q4 Q. f& ]
6 Z8 p4 m( ]3 x( H4 S9 A
4 G% p ]0 e9 s% I7 X3.显示init进程现在打开的文件9 s: ?9 P/ x9 E& z$ N
k5 N) K8 d9 V2 e# B- z' p* q* Y3 c6 r9 m3 J0 g4 S0 }% l! S
8 K7 B C' \- Y5 O
[root@svr-db-test ~]# lsof -c init, U% c; G7 l6 g8 B
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
; l# k% O' G0 @! b2 L' hinit 1 root cwd DIR 253,0 4096 2 /: M: u$ O& _: T: S, P0 s$ j: u
init 1 root rtd DIR 253,0 4096 2 /1 k' H3 _0 Z& H% H! H1 ~% w: z' Z
init 1 root txt REG 253,0 43496 524446 /sbin/init: m- R$ Q' h$ G [) W M, R
init 1 root mem REG 253,0 130448 917826 /lib64/ld-2.5.so9 u2 U- V- k3 f
init 1 root mem REG 253,0 1678480 917827 /lib64/libc-2.5.so
! ?7 q% U2 P+ M. r& kinit 1 root mem REG 253,0 23520 917686 /lib64/libdl-2.5.so
- x8 N* x+ \- U- {init 1 root mem REG 253,0 247528 917844 /lib64/libsepol.so.1
2 U3 u; \1 L) |9 m! o+ Hinit 1 root mem REG 253,0 95480 917845 /lib64/libselinux.so.1
6 B A4 E3 u8 `7 |: r, s1 {" Dinit 1 root 10u FIFO 0,16 2311 /dev/initctl
7 X3 h* `$ v4 M" V
2 _; O4 P/ F$ Z& R; X6 y& B1 ?! a: X" e, D( \
; ~9 X* w3 u8 \- v' j4 t9 n
4. 看进程号为1的进程打开了哪些文件( W8 D0 _( G% ]: G, P1 @! R: |. s
% x" }3 W% v# g! Z$ K$ |9 s) Q$ Y
! T( @ n* V" S& r d0 T3 C
8 O: [! ~" X- x' Z) m[root@svr-db-test ~]# lsof -p 18 i& X. v e7 J* _( W
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME' e V# m2 K; t7 p
init 1 root cwd DIR 253,0 4096 2 /
; r! M8 U: O% |% h. G7 n5 E0 ]init 1 root rtd DIR 253,0 4096 2 /6 f! R( J% B% C% o
init 1 root txt REG 253,0 43496 524446 /sbin/init$ e5 k$ @' I, V2 T3 k, {" V3 x
init 1 root mem REG 253,0 130448 917826 /lib64/ld-2.5.so9 S. x* M* [. v6 C$ r/ Q( l
init 1 root mem REG 253,0 1678480 917827 /lib64/libc-2.5.so. e g3 Q/ I: Z" e9 o
init 1 root mem REG 253,0 23520 917686 /lib64/libdl-2.5.so
; S3 O% T5 ]5 `$ a; `init 1 root mem REG 253,0 247528 917844 /lib64/libsepol.so.1+ y! m) U+ l6 n/ M- r
init 1 root mem REG 253,0 95480 917845 /lib64/libselinux.so.1
. R3 C: s* ]! [) j3 b: linit 1 root 10u FIFO 0,16 2311 /dev/initctl
) d$ A" F( [ i
" A! t$ k% ]; n L7 _3 V% D9 y' m, T T( m7 z
# j8 p9 Q0 l/ D Z8 S
5. 显示归属3520的进程情况
4 Z1 @8 [5 P- n, S; e- _
, m9 z4 u' g! `# d G
, T" j2 U& X# A! ?$ N3 D# A+ J$ y% a7 E7 n& r3 A( u
[root@svr-db-test ~]# lsof -g 3520
% C2 x* X- ]8 j6 l. F( k# SCOMMAND PID PGID USER FD TYPE DEVICE SIZE NODE NAME1 j! \9 g0 i# F! o
tnslsnr 3520 3520 oracle cwd DIR 253,5 4096 11059201 /home/oracle) w' R( v* r. E% V% a
tnslsnr 3520 3520 oracle rtd DIR 253,0 4096 2 /" r4 O# D" q: d2 _! \
tnslsnr 3520 3520 oracle txt REG 253,5 431062 11408866 /home/oracle/10.2.0/db_1/bin/tnslsnr! [& _+ i& n$ d: q @9 V% F2 N: U. R
tnslsnr 3520 3520 oracle mem REG 253,0 130448 917826 /lib64/ld-2.5.so
1 a, y( @0 L* `0 Q& T" d9 utnslsnr 3520 3520 oracle mem REG 253,0 1678480 917827 /lib64/libc-2.5.so% A; i) V( ?) g2 i. ?5 d+ ?" X
tnslsnr 3520 3520 oracle mem REG 253,0 23520 917686 /lib64/libdl-2.5.so$ j& \7 K/ C- \: j0 V: X5 M8 g& g. R
tnslsnr 3520 3520 oracle mem REG 253,0 615136 917834 /lib64/libm-2.5.so2 W* i) i3 T$ g! i$ H- O# A
tnslsnr 3520 3520 oracle mem REG 253,0 141208 917829 /lib64/libpthread-2.5.so3 b2 }" i' e4 X
tnslsnr 3520 3520 oracle mem REG 253,0 109824 917839 /lib64/libnsl-2.5.so' w; L$ ^! G6 ^
tnslsnr 3520 3520 oracle mem REG 253,5 20706622 11405436 /home/oracle/10.2.0/db_1/lib/libclntsh.so.10.1
6 `' H1 F" H. x" {! E5 mtnslsnr 3520 3520 oracle mem REG 253,5 3803097 11410641 /home/oracle/10.2.0/db_1/lib/libnnz10.so
. C9 Y/ o5 Q2 T# l" ztnslsnr 3520 3520 oracle mem REG 253,5 83493 11407251 /home/oracle/10.2.0/db_1/lib/libons.so' {0 O0 z/ ]1 w* M8 y/ k
tnslsnr 3520 3520 oracle mem REG 253,0 53880 917532 /lib64/libnss_files-2.5.so/ v. v7 l$ u* [* U, L
tnslsnr 3520 3520 oracle mem REG 253,5 8545 11407615 /home/oracle/10.2.0/db_1/lib/libskgxn2.so
1 Z+ o) L, \! y$ Gtnslsnr 3520 3520 oracle mem REG 253,5 513705 11410332 /home/oracle/10.2.0/db_1/lib/libocrutl10.so. n& Y9 C' D9 z, e4 w
tnslsnr 3520 3520 oracle mem REG 253,5 636161 11410330 /home/oracle/10.2.0/db_1/lib/libocr10.so) y0 B8 X1 S( b# d2 j
tnslsnr 3520 3520 oracle mem REG 253,5 657825 11410331 /home/oracle/10.2.0/db_1/lib/libocrb10.so3 s% K0 ^3 q. \. { R9 C
tnslsnr 3520 3520 oracle mem REG 253,5 1745769 11410365 /home/oracle/10.2.0/db_1/lib/libhasgen10.so3 M' L6 `2 \0 X8 F' `+ K
tnslsnr 3520 3520 oracle mem REG 253,5 61985 11410366 /home/oracle/10.2.0/db_1/lib/libclsra10.so C" S! v5 v, |1 N( v
tnslsnr 3520 3520 oracle 0u CHR 1,3 2553 /dev/null* P9 p7 T$ R5 Z6 i" y% F
tnslsnr 3520 3520 oracle 1u CHR 1,3 2553 /dev/null
8 j' g# Z' q7 A9 f3 l& t9 C6 Htnslsnr 3520 3520 oracle 2u CHR 1,3 2553 /dev/null
% G8 U9 }& z) k" Y itnslsnr 3520 3520 oracle 3w REG 253,5 318853012 11633459 /home/oracle/10.2.0/db_1/network/log/listener.log% Q% a6 M% o- K' \
tnslsnr 3520 3520 oracle 4r FIFO 0,6 15661 pipe! ]( K( a0 ~, r( @) y2 A, x5 I
tnslsnr 3520 3520 oracle 5r REG 253,5 11776 11410579 /home/oracle/10.2.0/db_1/network/mesg/nlus.msb
J7 W. J4 j" q' O! Jtnslsnr 3520 3520 oracle 6r REG 253,5 46592 11407160 /home/oracle/10.2.0/db_1/network/mesg/tnsus.msb
Z7 m+ E3 n+ J9 d# y+ K/ w3 N, X5 ktnslsnr 3520 3520 oracle 7w FIFO 0,6 15662 pipe
) C' @. E1 ^7 p/ ]0 Gtnslsnr 3520 3520 oracle 8u IPv4 15665 TCP 203.aibo.com:ncube-lm (LISTEN)
8 \2 @5 D1 U/ e8 @( o' ?& T4 Stnslsnr 3520 3520 oracle 9u unix 0xffff81021b7d6980 15666 /var/tmp/.oracle/s#3520.1
( s ~* B3 {. N* T3 U. Ytnslsnr 3520 3520 oracle 10u unix 0xffff81021b7d66c0 15668 /var/tmp/.oracle/s#3520.21 A: ]/ n, o2 T; S& r4 |: @
9 b; f/ p0 w! R0 a: t k
; T/ K: E0 H. S2 X, R) U* s- T
6.依照文件夹/home/oracle来搜寻,但不会打开子目录,用来显示目录下被进程开启的文件% c: L$ n: b) B# H6 c
4 D j3 w8 H" l
) J# O" v" K1 x# d; g# {3 w
! A$ L9 ^' z5 [5 Q" c[root@svr-db-test ~]# lsof +d /home/oracle6 E- s9 u2 D/ D/ C
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
1 D9 Z( b6 R) \* T! v4 a7 ztnslsnr 3520 oracle cwd DIR 253,5 4096 11059201 /home/oracle
4 _' i/ H5 b3 _1 u
- y1 Z/ o6 @* r4 b
6 T: |) S3 T2 J# R
7 C) \7 B5 Q+ i+ U. e7. 打开/home/oracle文件夹以及其子目录搜寻,用来显示目录下被进程开启的文件
1 ~$ @1 p4 O L: w2 i* b0 t
7 g7 K0 [ g$ @
% @$ u7 c4 n; ?1 Z. v: ^& |
6 q: @; h: |8 i+ d1 T[root@svr-db-test ~]# lsof +D /home/oracle; c0 _& S& r7 {8 h$ r* \
' q8 R3 U4 q# o; T8 b/ Z5 g- H
4 r J( Q4 B9 f6 S: Q显示内容太多了,不显示了
Z! R2 S( {8 [
/ c3 t, H }7 \' p* z% g- v" Q2 y# H" { c5 ?0 W
8. lsof -i 用以显示符合条件的进程情况, @* N2 N1 G7 ~
, \( B0 {% J$ i5 f( ^
1 c. Z4 S6 I& q7 R v# }+ H+ o
+ N) J ?/ a g! ?- r语法: lsof -i[46] [protocol][@hostname|hostaddr][:service|port]8 I+ r. V/ n- K
6 t/ V: x' E1 B% o2 E6 G8 x
" l; k$ i/ y! S/ P( V7 H4 A
' r* J7 U( R5 Y" A0 E6 z) Z46 --> IPv4 or IPv6
/ P4 b i7 W0 ?; R
" M8 C* n& [' F" S+ z# ~protocol --> TCP or UDP1 J" G9 f) R* [- |1 }
( c: x, Y0 M# o5 w8 t
hostname --> Internet host name; ~' O- H$ A/ l& G4 G
; B8 j) F3 j4 e* fhostaddr --> IPv4位置
2 A% f- b n" K+ Y: ~% A, _ n' G. I5 N3 [! X
service --> /etc/service中的 service name (可以不只一个)
* ?) J! |2 s0 C' q- y3 E9 ]$ \+ t' E# w
port --> 端口号 (可以不只一个)
6 m. R# f0 h+ Y* K) M
N* j z& C9 f( @/ N& w1 ?* n& h+ h+ s. i" [0 _; z+ K
; [' q$ \4 O1 C# V- W0 @8 {例:
4 o" _5 G/ ~$ x% _2 y9 q5 |4 T. J3 _1 j
6 Y2 j0 c; f$ B, [2 {) K$ e
[root@svr-db-test ~]# lsof -i tcp@192.168.2.245:1521 -n
5 a$ ]+ F0 A) N4 BCOMMAND PID USER FD TYPE DEVICE SIZE NODE NAME0 {, q2 T) E. ^6 m
oracle 15633 oracle 16u IPv4 4069605 TCP 192.168.2.203:31580->192.168.2.245:ncube-lm (ESTABLISHED)
# q+ u# g! q* I4 }2 b& d# x7 H- W# a- `6 r% n9 Y" V
' z- ?$ v6 S1 R5 v/ a/ _
; s. o; A: `5 y) H; d4 g* f
或; N! J5 g/ _: r% v6 N5 J* i6 g
8 |0 K+ |$ t, O& }
+ |' e. Y9 L h7 y$ S" M1 g7 \: y9 s) j% Y/ G
[root@svr-db-test ~]# lsof -i tcp@192.168.2.245:1521+ q! C- S$ p' J1 b
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
& j" L% S3 E! f& ?& s7 `, Roracle 15633 oracle 16u IPv4 4069605 TCP 203.aibo.com:31580->192.168.2.245:ncube-lm (ESTABLISHED)9 Q9 f, K9 m1 T1 c7 O, B
: C, _: G ]3 b; s5 ~) j7 g; G, A" Q' j- @9 R8 ^/ E
/ q8 a+ Z$ }9 Hlsof -n 不将IP转换为hostname,缺省是不加上-n参数
/ t+ C7 W8 Y6 l) c- E1 N2 l
/ L+ }9 y- G: Q' h% z3 G0 }) L9 S0 L6 W
/ k/ g6 |6 _3 B( }7 v# N9. 显示某用户的已经打开的文件(或该用户执行程序已经打开的文件)
4 m& l! x, v: N1 |/ ?; b5 _) X: w; A% U c2 p. U
4 a2 K/ D8 N5 p$ n# I1 q! O
$ y8 {$ N, |9 u5 q) [[root@svr-db-test ~]# lsof -u oracle
5 W W$ P' h4 ^( w3 m% E! p或* H `$ t3 P) m' v4 z5 C
[root@svr-db-test ~]# lsof -u 0
D) H8 I* N! ~
5 X0 W+ W- B' H- j# D8 D0 l' k; I* Z
1 l$ u1 e6 V( a. v: @10. 仅打印进程,方便shell脚本调用- j$ x* ~) P3 Y: D" f9 i
- Z) `2 M' h4 W3 H- J9 B8 i5 e
[root@svr-db-test ~]# lsof -tc sshd
. }: V/ u" _) [9 X6 J: f" H( m3101. I( N+ R( ]. \" n4 P% v
4545. o7 Y% H0 i! Y0 _6 ^
3 K' }. ~$ z" x5 E
( L* O: s/ `' x0 p
7 K! f i9 H3 K% N5 j
& ^6 |, O. a3 j5 }& `1 x y Y
. L K: K/ e4 B: }$ s
关注:
6 c8 o9 d2 l5 x& t5 U
- m2 G) B; w3 U9 z
$ x1 v- Y, T3 h; B0 y4 A4 A, K% ]) T" M3 g i3 I
进程调试命令:truss、strace和ltrace
7 N+ c- h( }/ p7 E N
" _3 C. d, U1 ~2 M3 g/ H m0 R5 g$ A+ W7 V0 W% q' g
4 H6 s! N% Y. T- x/ t
进程无法启动,软件运行速度突然变慢,程序的"SegmentFault"等等都是让每个Unix系统用户头痛的问题,而这些问题都可以通过使用truss、strace和ltrace这三个常用的调试工具来快速诊断软件的"疑难杂症"。, \$ c$ x f, H5 i0 ? Y7 @
P2 C/ I: I/ c% l$ Z
问题描述:# V7 Q x+ B8 ]! w# Q$ J' O) ]
df -h 查看到的空间,和du目录的空间不一致,实际du目录大小要小,磁盘空间没释放! m4 o+ x- r+ d. M
du /home 大小93G df 查看实际/home挂载已使用168G
; ?! J% Z& |' t+ s5 Y" s- K4 E3 s% |! h/ a- W3 {% s
问题原因:! w4 M+ m6 d0 u5 b* f
磁盘空间未释放,在此前执行删除操作中,进程未结束
2 e. q* m' @8 ^# i9 l5 i2 K
5 v! z: @" V! J) B解决方案:0 I; h' x$ \+ L9 H
lsof |grep delete 找到未结束的进程,杀掉进程) Z: _$ A5 L4 l& V F
找到delete进程中3504和4433一致占用,杀掉
. D: s( X- | Z! X% m; @: j7 S8 B, j3 A- f
kill之后正常
: v1 _. s. d/ ]0 |* c
$ M K, }* m% c( z0 O" {/ w# j/ c. j3 G) [0 _9 m
备注:在实际应用中,可能还存在在文件目录下使用du -sh * 查看文件总体大小和du -sh 文件目录大小不一致,也不是磁盘空间不释放,可能是存在隐藏文件,du -sh * 是不会du隐藏文件(.)的,此时建议使用du -h –max-depth=1 ,显示本一级目录的大小,包含所有隐藏文件
) X5 v8 l, Y5 `$ l6 V+ u5 ?9 K
" v; c4 K; g# {& ^9 g C5 t) S k! L5 R
|
|