netstat命令使用總結mysql
顯示網絡鏈接,端口,路由表,接口狀態。通常用於查看本機各個端口的網絡鏈接情況sql
netstat [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
[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 網絡狀態
[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