|
ss命令用于显示socket状态. 他可以显示PACKET sockets, TCP sockets, UDP sockets, DCCP sockets, RAW sockets, Unix domain sockets等等统计. 它比其他工具展示等多tcp和state信息. 它是一个非常实用、快速、有效的跟踪IP连接和sockets的新工具.SS命令可以提供如下信息:
0 J+ d1 r% T# r, a% N3 J, e: e
所有的TCP sockets 所有的UDP sockets 所有ssh/ftp/ttp/https持久连接 所有连接到Xserver的本地进程 使用state(例如:connected, synchronized, SYN-RECV, SYN-SENT,TIME-WAIT)、地址、端口过滤 所有的state FIN-WAIT-1 tcpsocket连接以及更多 / J4 g1 t& \1 B) V2 m
2 W& C j; e* P( m* P0 i I
很多流行的Linux发行版都支持ss以及很多监控工具使用ss命令.熟悉这个工具有助于您更好的发现与解决系统性能问题.本人强烈建议使用ss命令替代netstat部分命令,例如netsat -ant/lnt等.
. G& b1 v+ x; P8 H0 B6 n
展示他之前来做个对比,统计服务器并发连接数 - . }7 P$ y4 n4 _
- netstat
( b+ z" I1 S4 x* s( k6 R& r - # time netstat -ant | grep EST | wc -l& o4 ?$ [% b+ Y2 {
- 31005 S( \! i8 m4 ^7 {4 r, X
/ M3 @4 m) c/ B" A& }0 ~ Q- D- real 0m12.960s! A6 \/ g- H( a# _2 v. Z
- user 0m0.334s4 A% T, B' h' r5 b& n
- sys 0m12.561s
+ j; G; M/ c4 ?/ {& E2 O - # time ss -o state established | wc -l/ f" }( ]1 X3 n, l) l9 m
- 3204- T0 T7 _! r( _* Y* F2 ~
8 i& d1 c( Y/ @. E" _- real 0m0.030s. `. z9 F4 q2 }- U3 R L
- user 0m0.005s6 J. u* h' B# g1 T2 M+ Z* s+ r
- sys 0m0.026s
复制代码' X$ C7 S; k$ y: P: V
结果很明显ss统计并发连接数效率完胜netstat,在ss能搞定的情况下, 你还会在选择netstat吗, 还在犹豫吗, 看以下例子,或者跳转到帮助页面.
. O/ F. e. i3 ?. B2 G- x U$ p+ Y/ J
常用ss命令:
! @; E8 N9 E( J; s2 k- ss -l 显示本地打开的所有端口
t$ K5 F1 O" c$ s8 O - ss -pl 显示每个进程具体打开的socket
& T- {: Q* f( b7 l! s2 M - ss -t -a 显示所有tcp socket- w$ D, r9 P+ ]- N' j# B
- ss -u -a 显示所有的UDP Socekt! |; D% ^0 ]1 F% W
- ss -o state established '( dport = :smtp or sport = :smtp )' 显示所有已建立的SMTP连接
@5 d# p3 l8 c6 E9 u - ss -o state established '( dport = :http or sport = :http )' 显示所有已建立的HTTP连接
8 B; h! J' U/ g* I* I q - ss -x src /tmp/.X11-unix/* 找出所有连接X服务器的进程
, N3 G+ a9 a: o6 K% T( T - ss -s 列出当前socket详细信息:
复制代码
% c2 [9 p; f7 l, ?: N2 b' y显示sockets简要信息,列出当前已经连接,关闭,等待的tcp连接 - % i6 J7 B8 N. T' T7 `
- # ss -s9 }, n8 }3 Q( U" j. T* Q
- Total: 3519 (kernel 3691)
5 K& {' z; z3 o- [* l9 @* c4 X6 x - TCP: 26557 (estab 3163, closed 23182, orphaned 194, synrecv 0, timewait 23182/0), ports 1452
# [& g; Z0 L/ r2 y! A7 Q
- B# g; X8 j. j5 |9 l. t* }* ~4 U- Transport Total IP IPv6" {9 U2 h: }; a) U0 j
- * 3691 - -
z' ?) c. z ^' ]$ y1 z - RAW 2 2 0+ @: ]4 Y/ Y3 @+ {8 ]4 S" X
- UDP 10 7 3
2 e, X# { c% { E' Q! l - TCP 3375 3368 7
: C' a- C( J: L - INET 3387 3377 10- X! Y0 l9 y; f7 J* N
- FRAG 0 0 0
复制代码
3 ?3 ?1 O1 `# p' l列出当前监听端口
/ k: ^" F& O) c! G* m% \- # ss -lRecv-Q Send-Q Local Address:Port Peer Address:Port
; f K5 x# x; k" v - 0 10 :::5989 :::*
$ V; b5 n6 X5 g4 {- I% u3 y - 0 5 *:rsync *:*0 l+ I$ a7 U2 d
- 0 128 :::sunrpc :::*
' |2 ^, x& b4 W3 ~" c4 F V - 0 128 *:sunrpc *:*5 P$ O) [6 V5 G. G. l
- 0 511 *:http *:*) ~9 m% }: c3 l; @1 j
- 0 128 :::ssh :::*
) I1 i& @) j7 c! ^! ~ - 0 128 *:ssh *:* U) ?: n8 j6 I: P; Z3 X
- 0 128 :::35766 :::*4 X6 k2 F r/ q3 B4 Y7 k9 @
- 0 128 127.0.0.1:ipp *:** `2 o5 C; a- Y2 o) [) W
- 0 128 ::1:ipp :::*+ ]+ m) a" Z7 |
- 0 100 ::1:smtp :::*% P/ X2 |: \- v/ p
- 0 100 127.0.0.1:smtp *:*
) M# j" M/ |; s" G- j - 0 511 *:https *:*5 Z6 H7 S# J2 q5 F3 X
- 0 100 :::1311 :::*
) H( k3 R% c" [( T& M8 ^1 m, k& } - 0 5 *:5666 *:*
2 G5 C5 n$ ]+ f& y- \$ k7 A - 0 128 *:3044 *:*
复制代码 $ r, C* E. o, p8 S! ~# _
ss列出每个进程名及其监听的端口
$ p) x; G, Q0 n5 N7 U
- # ss -pl, e+ v7 L9 p _5 V
& t0 x) U: [! A. ^8 v
4 G3 X* b p# F3 h6 ] ?' c n
ss列所有的tcp sockets * Z1 d: H8 W! m* C% F
- # ss -t -a# Z5 G6 y0 l& r6 O. t7 U: N
7 d) ?1 t( W F5 s J0 H
% x) `. r+ {9 s) W# D1 L
ss列出所有udp sockets
9 t/ J: r8 _7 Q
- # ss -u -a
& ?. ~. W; ~/ d4 Y4 R* s; Z
& v2 h$ {# i4 V/ I P: `+ S
" Z" s+ z/ z) Y4 C& K8 j2 T
ss列出所有http连接中的连接 7 f# u7 a# O4 C& C) i+ n+ g2 h
- # ss -o state established '( dport = :http or sport = :http )'2 D) c! J* Z9 a5 F3 S( ^6 I+ [
% g. X3 y( K w' i
·以上包含对外提供的80,以及访问外部的80 ·用以上命令完美的替代netstat获取http并发连接数,监控中常用到 ) C; A6 n4 ~% ]! Y4 m: \% W# l, f% d
ss列出本地哪个进程连接到x server 2 L* a* W Z- t0 u* ^0 ^
- # ss -x src /tmp/.X11-unix/*( y7 I4 J/ {& a
' l1 d! r$ {) B$ H7 h! t
1 Z5 O: A' R4 J! `
ss列出处在FIN-WAIT-1状态的http、https连接 7 m1 Q" |. ?4 s! w3 }2 J3 W
- # ss -o state fin-wait-1 '( sport = :http or sport = :https )'' W$ F/ ] p. p+ M T- `1 Q
+ S2 c; t+ {) \ |' l/ @3 F
2 \5 Z# I0 ?4 v
ss常用的state状态: - # d p8 R. e5 \5 \% g4 a" S& M
- established$ {/ K1 e5 q1 H& J1 \& z4 R, W1 e
- syn-sent
; c( H* T7 n0 h4 C+ t. d - syn-recv
7 F9 d1 {2 \. n0 C9 m$ ^- g/ m - fin-wait-1; h# Y. D" R8 y; Y% z
- fin-wait-2
& v& i8 T; q( q3 _8 r+ A - time-wait
( L- V4 W5 E6 {( a* z: Y# b - closed
1 o( f% q- Q2 [% j7 P - close-wait
( i7 F3 E+ F+ P1 Y" M - last-ack
+ O3 x) h* E2 {, B2 W) R* I - listen
7 L) D" e$ W3 y4 C) I6 V$ { - closing
7 v1 q& ?5 K. o6 M3 y - all : All of the above states! @- }. Y: p7 `$ L2 }
- connected : All the states except for listen and closed! N! \# V; d! g3 ^5 Z
- synchronized : All the connected states except for syn-sent
, m8 D- T! N8 N+ c - bucket : Show states, which are maintained as minisockets, i.e. time-wait and syn-recv.
& R$ Y/ y+ S i" v. p6 V0 L - big : Opposite to bucket state.
复制代码
5 j0 g- |$ B- a/ v' G4 V2 `ss使用IP地址筛选
. `8 P* A0 B+ P" \& T' ~- ss src ADDRESS_PATTERN
8 B5 P' I6 m. Q. y1 p7 P - src:表示来源
, G4 D6 ]0 q. @ w - ADDRESS_PATTERN:表示地址规则6 W2 b3 ~* t% P9 c8 {, `
- 如下:
( |) p1 |: }, b, I: _) b+ Z - ss src 120.33.31.1 # 列出来之20.33.31.1的连接7 c0 i% Q7 j* L( u2 t
- ) W( s4 Q7 V4 w4 ]
- # 列出来至120.33.31.1,80端口的连接/ {" Z$ O0 ]) `3 f: D; `+ l8 n
- ss src 120.33.31.1:http4 p: t/ c- H; V" r; H \" }
- ss src 120.33.31.1:8
复制代码
* F6 E5 m! ?9 G0 Z$ Sss使用端口筛选
% P& S+ ~, L; p$ ~/ T- I- G* e3 {- ss dport OP PORT5 j2 m" ~" U3 i6 ]9 i! e
- OP:是运算符- p( A8 O' b6 U8 M" m/ g! V
- PORT:表示端口
7 o' j& A% u0 g, t& G - dport:表示过滤目标端口、相反的有sport
复制代码
. o. n' R I; k5 oOP运算符如下: - , v6 _ L- [9 A6 B
- <= or le : 小于等于 >= or ge : 大于等于
* n: S) Q5 R9 E - == or eq : 等于
, e/ Q! a* T7 u2 N1 N - != or ne : 不等于端口
* b/ N5 |3 a* x& d' ~ - < or lt : 小于这个端口 > or gt : 大于端口
复制代码 3 ?/ B2 o* L# u
OP实例
V3 ]! Q" A- U' h- ss sport = :http 也可以是 ss sport = :80
7 [% E, _9 C2 g& o7 m - ss dport = :http$ `7 f$ M5 }/ w4 G% \( g! G* B
- ss dport \> :1024! ]' {1 \3 O. o3 S( V
- ss sport \> :1024
% M g* u" Q' m9 @5 }3 t$ p R l - ss sport \< :32000
1 F( ?8 ~5 Q+ F f3 T7 U; k - ss sport eq :229 r8 _9 y: \) N5 [! f- [/ x* v
- ss dport != :222 Y( X1 k" N7 m) f$ S& z
- ss state connected sport = :http5 O0 x# D6 F5 B8 E) N0 e
- ss \( sport = :http or sport = :https \)
0 m3 X6 R3 v( G5 E - ss -o state fin-wait-1 \( sport = :http or sport = :https \) dst 192.168.1/24
复制代码
' @8 X1 U5 V( ~1 o6 E! v; E3 i. [为什么ss比netstat快: netstat是遍历/proc下面每个PID目录,ss直接读/proc/net下面的统计信息。所以ss执行的时候消耗资源以及消耗的时间都比netstat少很多 2 p: a0 z& c- K: M1 X3 d" E
ss命令帮助
3 ?6 l2 d: }$ A I- # ss -h+ y/ O0 y' Y; c# Q1 U
- Usage: ss [ OPTIONS ]
& c4 B. I+ r/ Z8 O% z0 W0 i - ss [ OPTIONS ] [ FILTER ]( J( r+ g7 W7 i
- -h, --help this message% h3 {% ~5 y5 o; S1 C3 z" J7 U
- -V, --version output version information- X1 f( @- v) z) ~$ Y7 z1 F
- -n, --numeric don't resolve service names8 _+ A" F3 Q( X5 C9 B( e( k. s( H
- -r, --resolve resolve host names
, U6 F u( h6 C3 W. m: v - -a, --all display all sockets* t$ b: D/ b2 }9 p9 j( A
- -l, --listening display listening sockets
8 X# D, D, `2 s7 e" E* S9 l - -o, --options show timer information, R( E$ U" v1 v- J9 M
- -e, --extended show detailed socket information% z* {0 `' X8 |; F6 k& l% X3 C) T
- -m, --memory show socket memory usage. E H' Z7 c8 d9 }) [4 q5 g" h
- -p, --processes show process using socket8 S# a* A) |" \7 Y! ?
- -i, --info show internal TCP information
5 \" W! n- M2 k - -s, --summary show socket usage summary
! x" D, W9 `1 y" @ - -4, --ipv4 display only IP version 4 sockets
3 K$ y# T" D% y3 q; s$ e - -6, --ipv6 display only IP version 6 sockets
: Q) A0 K8 T6 Y+ O - -0, --packet display PACKET sockets/ s, |! z0 i2 R
- -t, --tcp display only TCP sockets ^ w# t* Y. p) B! k$ O( H
- -u, --udp display only UDP sockets
8 u# T8 r6 v- K w. u - -d, --dccp display only DCCP sockets6 F" p4 h( [; U. u: Z: j4 D5 d
- -w, --raw display only RAW sockets# t \7 X* n, W, v6 \2 D( P
- -x, --unix display only Unix domain sockets
% n- j3 C U0 f8 |& c h' A - -f, --family=FAMILY display sockets of type FAMILY
2 F) o4 y1 B& y8 I6 n2 ~ - -A, --query=QUERY, --socket=QUERY! ~6 I9 V' s+ X- w( t6 K$ r( Y
- QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]
' b+ u! S2 |3 R' S1 R - -D, --diag=FILE Dump raw information about TCP sockets to FILE
7 u2 \" P& u2 F$ q1 @ - -F, --filter=FILE read filter information from FILE1 |+ l) o9 @4 A) ]+ ]7 e* A( Z- N
- FILTER := [ state TCP-STATE ] [ EXPRESSION ]
复制代码 $ i! s* i s/ h% [# @- u
|