天天看點

用perl來改寫shell

檢視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"; 

一樣的結果

本文轉自dongfang_09859 51CTO部落格,原文連結:http://blog.51cto.com/hellosa/602696,如需轉載請自行聯系原作者