mirror of https://github.com/BOINC/boinc.git
120 lines
3.8 KiB
Tcsh
120 lines
3.8 KiB
Tcsh
#! /bin/csh
|
|
#
|
|
# by jeffc
|
|
#
|
|
# Usage :
|
|
# tcpstat [-t | -i interval] -w
|
|
#
|
|
# Options:
|
|
# -t given current counter totals
|
|
# -i interval sample at interval seconds and give counter rate
|
|
# -w watch_mode
|
|
# Default is -i 5
|
|
#
|
|
#
|
|
|
|
set usage = "usage: watch_tcp [-t | -i interval] -w"
|
|
set get_current_totals = 0
|
|
set get_current_rates = 1
|
|
set interval = 5
|
|
set watch_mode = 0
|
|
set drop_limit = 3
|
|
|
|
while ($#argv)
|
|
if ("$argv[1]" == "-t") then
|
|
set get_current_totals = 1
|
|
set get_current_rates = 0
|
|
else if ("$argv[1]" == "-i") then
|
|
set get_current_rates = 1
|
|
set get_current_totals = 0
|
|
shift
|
|
set interval = $argv[1]
|
|
else if ("$argv[1]" == "-w") then
|
|
set watch_mode = 1
|
|
endif
|
|
|
|
shift
|
|
end
|
|
|
|
set now = `date '+%y:%m:%d:%H:%M:%S'`
|
|
set TMPFILE = /tmp/tcpstat.tmp.${now}.$$
|
|
set DFILE = /tmp/tcpstat.tmp.delta.${now}.$$
|
|
set DROPFILE = /tmp/DROPS
|
|
|
|
if($get_current_totals) then
|
|
netstat -i -s -P tcp | sed -g s/=/\ / > $TMPFILE
|
|
|
|
echo ""
|
|
echo "handshake queue max " `/usr/sbin/ndd -get /dev/tcp tcp_conn_req_max_q0`
|
|
echo "ESTABLISHED queue max " `/usr/sbin/ndd -get /dev/tcp tcp_conn_req_max_q`
|
|
echo ""
|
|
awk '{if($1 == "tcpOutDataSegs") print $1" "$2}' $TMPFILE
|
|
awk '{if($3 == "tcpOutDataBytes") print $3" "$4}' $TMPFILE
|
|
awk '{if($3 == "tcpPassiveOpens") print $3" "$4}' $TMPFILE
|
|
awk '{if($1 == "tcpListenDrop") print $1" "$2}' $TMPFILE
|
|
awk '{if($3 == "tcpListenDropQ0") print $3" "$4}' $TMPFILE
|
|
awk '{if($1 == "tcpHalfOpenDrop") print $1" "$2}' $TMPFILE
|
|
|
|
\rm $TMPFILE
|
|
|
|
else
|
|
|
|
netstat -i -s -P tcp | sed -g s/=/\ / > $TMPFILE
|
|
sleep $interval
|
|
netstat -i -s -P tcp | sed -g s/=/\ / > $DFILE
|
|
|
|
set ODS = `awk '{if($1 == "tcpOutDataSegs") print $2}' $TMPFILE`
|
|
set ODS5 = `awk '{if($1 == "tcpOutDataSegs") print $2}' $DFILE`
|
|
set ODB = `awk '{if($3 == "tcpOutDataBytes") print $4}' $TMPFILE`
|
|
set ODB5 = `awk '{if($3 == "tcpOutDataBytes") print $4}' $DFILE`
|
|
set PO = `awk '{if($3 == "tcpPassiveOpens") print $4}' $TMPFILE`
|
|
set PO5 = `awk '{if($3 == "tcpPassiveOpens") print $4}' $DFILE`
|
|
set LD = `awk '{if($1 == "tcpListenDrop") print $2}' $TMPFILE`
|
|
set LD5 = `awk '{if($1 == "tcpListenDrop") print $2}' $DFILE`
|
|
set LDQ0 = `awk '{if($3 == "tcpListenDropQ0") print $4}' $TMPFILE`
|
|
set LDQ05 = `awk '{if($3 == "tcpListenDropQ0") print $4}' $DFILE`
|
|
set HOD = `awk '{if($1 == "tcpHalfOpenDrop") print $2}' $TMPFILE`
|
|
set HOD5 = `awk '{if($1 == "tcpHalfOpenDrop") print $2}' $DFILE`
|
|
|
|
@ ODS_rate = ($ODS5 - $ODS) / $interval
|
|
@ ODB_rate = ($ODB5 - $ODB) / $interval
|
|
@ PO_rate = ($PO5 - $PO) / $interval
|
|
@ LD_rate = ($LD5 - $LD) / $interval
|
|
@ LDQ0_rate = ($LDQ05 - $LDQ0) / $interval
|
|
@ HOD_rate = ($HOD5 - $HOD) / $interval
|
|
|
|
if($watch_mode) then
|
|
echo INFO $now TCP Out B/s : $ODB_rate Listen drops/s : $LD_rate
|
|
if($LD_rate) then
|
|
if(-f $DROPFILE) then
|
|
set drop_count = `cat $DROPFILE`
|
|
@ drop_count++
|
|
if($drop_count > $drop_limit) then
|
|
echo CRITICAL $now TCP dropping connections for $drop_count checks
|
|
endif
|
|
echo $drop_count > $DROPFILE
|
|
else
|
|
echo 1 > $DROPFILE
|
|
endif
|
|
else
|
|
if(-f $DROPFILE) then
|
|
rm $DROPFILE
|
|
endif
|
|
else
|
|
echo ""
|
|
echo "handshake queue max " `/usr/sbin/ndd -get /dev/tcp tcp_conn_req_max_q0`
|
|
echo "ESTABLISHED queue max " `/usr/sbin/ndd -get /dev/tcp tcp_conn_req_max_q`
|
|
echo ""
|
|
echo tcpOutDataSegs" "$ODS_rate per second
|
|
echo tcpOutDataBytes" "$ODB_rate per second
|
|
echo tcpPassiveOpens" "$PO_rate per second
|
|
echo tcpListenDrop" "$LD_rate per second
|
|
echo tcpListenDropQ0" "$LDQ0_rate per second
|
|
echo tcpHalfOpenDrop" "$HOD_rate per second
|
|
endif
|
|
|
|
\rm $TMPFILE
|
|
\rm $DFILE
|
|
endif
|
|
|