微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用perl来改写shell

查看Web服务器的并发请求数及其TCP连接状态的命令

 
 
  1. netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'  

据说是从新浪互动社区事业部技术总监王老大那儿获得的,非常不错。

返回结果一般为

 
 
  1. LAST_ACK 247 (正在等待处理的请求数) 
  2. SYN_RECV 66 
  3. ESTABLISHED 1094 (正常数据传输状态) 
  4. FIN_WAIT1 258 
  5. FIN_WAIT2 629 
  6. TIME_WAIT 4792 (处理完毕,等待超时结束的请求数) 

其他参数说明:

 
 
  1. CLOSED:无连接是活动的或正在进行 
  2. LISTEN:服务器在等待进入呼叫 
  3. SYN_RECV:一个连接请求已经到达,等待确认 
  4. SYN_SENT:应用已经开始,打开一个连接 
  5. ESTABLISHED:正常数据传输状态 
  6. FIN_WAIT1:应用说它已经完成 
  7. FIN_WAIT2:另一边已同意释放 
  8. ITMED_WAIT:等待所有分组死掉 
  9. CLOSING:两边同时尝试关闭 
  10. TIME_WAIT:另一边已初始化一个释放 
  11. LAST_ACK:等待所有分组死掉 

本人shell中awk语法不是特别熟悉,老是关键时刻用到这个的时候,不会写。顺便用perl改写了下,哈哈

 
 
  1. #!/usr/bin/perl -w 
  2.  
  3. use strict; 
  4.  
  5. our %hash; 
  6.  
  7. open TCP,'netstat -n|' or die "$!\n"; 
  8.  
  9. while ( <TCP> ) { 
  10.        chomp; 
  11.        next unless /^tcp/; 
  12.  
  13.        if ( exists $hash{(split /\s+/)[5]} ) { 
  14.            $hash{(split /\s+/)[5]} ++; 
  15.        } else { 
  16.            $hash{(split /\s+/)[5]} = 1; 
  17.        } 
  18.  
  19.  
  20. close TCP; 
  21.  
  22. while ( my($key,$val) = each %hash ) { 
  23.        print "$key\t$val\n"; 

一样的结果

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐