天高云淡 发表于 2018-8-21 13:24:09

用perl来改写shell-BSDerの

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


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

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


[*]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 () {
[*]       chomp;
[*]       next unless /^tcp/;
[*]
[*]       if ( exists $hash{(split /\s+/)} ) {
[*]         $hash{(split /\s+/)} ++;
[*]       } else {
[*]         $hash{(split /\s+/)} = 1;
[*]       }
[*]
[*]}
[*]
[*]close TCP;
[*]
[*]while ( my($key,$val) = each %hash ) {
[*]       print "$key\t$val\n";
[*]}
  

  一样的结果


页: [1]
查看完整版本: 用perl来改写shell-BSDerの