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