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