netstat命令

netstat命令使用總結mysql

做用:

顯示網絡鏈接,端口,路由表,接口狀態。通常用於查看本機各個端口的網絡鏈接情況sql

語法參數:

netstat [options]緩存

options參數

參數bash

含義服務器

解釋cookie

-r網絡

--route併發

顯示路由表ssh

-lsocket

--listensing

顯示正在監聽的socket

-a

all

顯示全部正在監聽和非監聽的socket

-n

numeric

顯示數字IP地址(默認主機名)

-t

TCP

顯示tcp協議的鏈接狀況

-u

udp

顯示UDP協議的鏈接狀況

-s

statistics

顯示網絡統計

-p

--programs

顯示監聽的socket進程

網絡鏈接狀態

狀態

說明

LISTEN

監聽來自對端的TPC端口的鏈接請求

SYN_SENT

發送鏈接請求後等待匹配的鏈接請求(嘗試創建一個鏈接)

SYN_RECEIVED

再收到和發送一個鏈接請求後等待對方對鏈接請求的確認

ESTABLISHED

表明一個打開的鏈接(已創建的鏈接)

FIN_WAIT1

等待遠程TCP鏈接中斷請求,或先前的鏈接中斷請求的確認

FIN_WAIT2

從遠程TCP等待鏈接中斷請求

CLOSE_WAIT

等待從本地用戶發來的鏈接中斷請求

CLOSING

等待遠程TCP對鏈接中斷的確認

LAST_ACK

等待原來的發向遠程TCP的鏈接中斷請求的確認

TIME_WAIT

等待遠程TCP接收到鏈接中斷請求的確認(系統在等待客戶端的響應)

CLOSED

沒有任何鏈接狀態

說明:上面每一種鏈接狀都是一個併發


具體應用實例

查看全部鏈接

[root@localhost ~]# netstat an

查看全部tcp和udp的鏈接

[root@localhost ~]# netstat -tunl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State      
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      
tcp        0      0 :::80                       :::*                        LISTEN      
tcp        0      0 :::22                       :::*                        LISTEN      
tcp        0      0 ::1:25                      :::*                        LISTEN      
udp        0      0 0.0.0.0:68                  0.0.0.0:*
輸出內容講解 
Proto 協議使用的協議 
Recv-Q 
Send-Q 
Local Address 本地的IP及端口 
Foreign Address 本地鏈接遠端的IP及端口 
State 網絡狀態

查看ssh監聽的端口

[root@localhost ~]# netstat -anput | grep ssh
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1359/sshd           
tcp        0     52 192.168.254.10:22           192.168.254.19:63759        ESTABLISHED 1514/sshd           
tcp        0      0 :::22                       :::*                        LISTEN      1359/sshd

生產案例:鏈接數

(1)、查看當前系統的鏈接數(已鏈接的)

[root@localhost ~]# netstat -an |awk 'BEGIN {FS=":"} /ESTABLISHED/ {print$4":"$5"\t"$8}' |sort |uniq -c |sort -rn |head -5 
5 172.16.123.177:80 119.102.6.54 
2 192.168.123.17:22177 192.168.123.10 
2 172.16.123.177:80 121.207.208.40 
2 172.16.123.177:80 117.136.16.197 
2 172.16.123.177:80 110.90.250.8 
說明:找出網絡狀態爲ESTABLISHED已鏈接的前五個IP地址

(2)、生產案例:查看當前系統的TIME_WAIT鏈接(等待的鏈接,沒有被釋放,網站訪問慢的緣由)(重點)

 [root@localhost ~]# netstat -an |awk 'BEGIN{FS=":"} /TIME_WAIT/ {print $4":"$5"\t"$8}' |sort|uniq -c |sort -rn |head -5 
3 172.16.123.177:80 117.136.15.108 
 
2 172.16.123.177:80 211.137.59.23 
2 172.16.123.177:80 117.136.25.141 
1 172.16.123.177:80 183.213.18.83 
1 172.16.123.177:80 125.39.239.221 
注意:httpd服務和mysqld等都會有鏈接狀態,經過本地端口區分,都會致使網站訪問慢的緣由
說明:TIME_WAIT狀態是等待客戶端的響應,這種等待會佔用鏈接數,致使網站訪問慢

(3)、優化TIME_WAIT(內核優化參數)

說明:TIME_WAIT若是時間比較大,該鏈接沒有被釋放,快速回收不提供服務鏈接出現過多TIME_WAIT鏈接,清理沒有被釋放的TIME_WAIT鏈接

提示:鏈接數超過五千,可能就沒法提供服務了,將某個IP大於50個就使用防火牆給幹掉,正常狀況下一個客戶端不會超過10個

net.ipv4.tcp_fin_timeout = 2 
#→表示若是套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。
 
net.ipv4.tcp_tw_reuse = 1 
#→表示開啓重用。容許將TIME-WAIT sockets從新用於新的TCP鏈接,默認爲0,表示關閉。 
 
net.ipv4.tcp_tw_recycle = 1 
#→表示開啓TCP鏈接中TIME-WAITsockets的快速回收,默認爲0,表示關閉。

提示:以上兩個參數爲了防止生產環境下 time_wait過多設置的。

 

控制TIME_WAIT的數量

若是設置了,服務器超過了這個數量,日誌中會提示警告,默認是180000 
生產案例:藍訊CDN緩存服務器生產環境使用的內核參數(提供緩存的服務器)
[root@CNC-BJ-H-388 ~]# sysctl -p |grep net.ipv4 
net.ipv4.ip_forward = 0 
net.ipv4.conf.default.rp_filter = 1 
net.ipv4.conf.default.accept_source_route = 0 
net.ipv4.tcp_max_tw_buckets = 1800000 
net.ipv4.tcp_max_syn_backlog = 8192 
net.ipv4.tcp_tw_reuse = 1 
net.ipv4.tcp_tw_recycle = 1 
net.ipv4.tcp_retries1 = 22 
net.ipv4.tcp_syncookies = 1 
net.ipv4.tcp_max_syn_backlog = 8192 
net.ipv4.tcp_fin_timeout = 10 
net.ipv4.tcp_synack_retries = 3 
net.ipv4.tcp_syn_retries = 3
相關文章
相關標籤/搜索