查看Web服務器的併發請求數及其TCP連接狀態的命令
- netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
據說是從新浪互動社區事業部技術總監王老大那兒獲得的,非常不錯。
返回結果一般爲
- LAST_ACK 247 (正在等待處理的請求數)
- SYN_RECV 66
- ESTABLISHED 1094 (正常數據傳輸狀態)
- FIN_WAIT1 258
- FIN_WAIT2 629
- TIME_WAIT 4792 (處理完畢,等待超時結束的請求數)
其他參數說明:
- CLOSED:無連接是活動的或正在進行
- LISTEN:服務器在等待進入呼叫
- SYN_RECV:一個連接請求已經到達,等待確認
- SYN_SENT:應用已經開始,打開一個連接
- ESTABLISHED:正常數據傳輸狀態
- FIN_WAIT1:應用說它已經完成
- FIN_WAIT2:另一邊已同意釋放
- ITMED_WAIT:等待所有分組死掉
- CLOSING:兩邊同時嘗試關閉
- TIME_WAIT:另一邊已初始化一個釋放
- LAST_ACK:等待所有分組死掉
本人shell中awk語法不是特別熟悉,老是關鍵時刻用到這個的時候,不會寫。順便用perl改寫了下,哈哈
- #!/usr/bin/perl -w
- use strict;
- our %hash;
- open TCP,'netstat -n|' or die "$!\n";
- while ( <TCP> ) {
- chomp;
- next unless /^tcp/;
- if ( exists $hash{(split /\s+/)[5]} ) {
- $hash{(split /\s+/)[5]} ++;
- } else {
- $hash{(split /\s+/)[5]} = 1;
- }
- }
- close TCP;
- while ( my($key,$val) = each %hash ) {
- print "$key\t$val\n";
- }
一樣的結果