2010年11月11日 星期四

利用netstat找出怪怪的連線

起因:
主機上偶爾有一個httpd的線程佔用大量記憶體,但一直不確定是那個網頁造成的
它會造成網路,暫時沒反應...>.<
努力找了很久都沒找到...(是我太笨嗎??)


後來先利用top來看出是那個httpd及其PID,
再利用netstat -ntup | grep ESTAB 來比對查詢是來自那一個ip
這樣就可以到httpd的log去查是那一個網頁

不過,查出來後竟然是因為mysql搜尋出來的資料量太大
它一直在收資料,整個頻寬都被它佔去了

所幸主機上還有另一張對內的網卡,於是把mysql的連線都轉而走那張對內的卡
這樣就解決這問題了
(這好像是早就應該要這麼做的事了....>.<)


以下是一些實用的 netstat 語法,可以檢查主機的連線數量:

netstat -na
顯示主機上所有已建立的連線。
netstat -an | grep :80 | sort
顯示所有 port 80 的連線,並把結果排序。
netstat -n -p|grep SYN_REC | wc -l
列出主機上有多少個 SYNC_REC,一般上這個數字應該相當低。
netstat -n -p | grep SYN_REC | sort -u
同樣是列出 SYNC_REC,但不只列出數字,而是將每個 SYNC_REC 的連線列出。
netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'
列出發送 SYNC_REC 的所有 ip 地址。
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
計算每一個 ip 在主機上建立的連線數量。
netstat -anp |grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
列出從 TCP 或 UDP 連線到主機的 ip 的數量。
netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
列出每個 ip 建立的 ESTABLISHED 連線數量。
netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1
列出每個 ip 建立的 port 80 連線數量。



參考資料:使用 netstat 找出不正常的連線

沒有留言:

張貼留言