De output van de
'netstat -anT -p tcp'
opdracht van een knooppunt toont een aantal TCP-vensterpakketten met nul (kolom 0-win). De waarden in de kolom 0-win geven het aantal keren aan dat het knooppunt van de TCP-verbinding (lokaal adres) naar het externe apparaat (buitenlands adres) een TCP-updatepakket voor het nulvenster heeft verzonden. Dit gebeurt wanneer het TCP-ontvangstvenster van het knooppunt is teruggebracht tot nul of tot een grootte die te laag is voor een gegevenssegment op volledige grootte.
Voorbeeld:
Cluster-1# netstat -anT -p tcp
Active Internet connections (including servers)
Proto Rexmit OOORcv 0-win maxswnd maxseg srtt srtvar rexmt sndwnd sncwnd rcvwnd delack SR SS ND AS Local Address Foreign Address
tcp4 0 0 1001 2097920 1460 47ms 23ms 342ms 2097664 190488 131400 99ms X X X X 100.89.53.100.445 100.90.164.11.52765
...
Het netto resultaat hiervan is dat het externe apparaat geen gegevens kan verzenden, waardoor vertragingen ontstaan die resulteren in verhoogde (schrijf)latentie, totdat het knooppunt een TCP-vensterupdate verzendt die aangeeft hoeveel gegevens het nu kan ontvangen.
In de meeste gevallen geven TCP-updatepakketten met een nulvenster die door het knooppunt worden verzonden, aan dat de ontvangende toepassing (proces) op het knooppunt (NFS, SMB, enz.) traag is met het ophalen van data uit de ontvangstbuffer. Dit kan worden aangegeven door een consistente niet-nulwaarde die te zien is in de kolom Recv-Q voor de verbinding in de uitgang van de
'netstat -an tcp'
Opdracht. Bijvoorbeeld door de volgende opdracht meerdere keren uit te voeren om te zien of de Recv-Q constant vol is.
Voorbeeld:
Cluster-1# netstat -an tcp
Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4 131400 0 100.89.53.100.445 100.90.164.11.52765 ESTABLISHED
...
Dit is een teller in realtime, dus deze opdracht moet worden uitgevoerd terwijl TCP zero window-updatepakketten worden verzonden door het knooppunt voor de verbinding. Hieronder volgt een voorbeeldscript om live statistieken uit op te halen:
- Recv
- Send-Q's
- Out of Orders (OOO)
- Nul Windows (0-win)
- Zendt opnieuw uit
# mkdir /ifs/data/Isilon_Support/$(date +%d-%m-%Y)/
echo; while sleep 10 ; do echo "######### Live Send Rec Queue Q: #########"; date ; netstat -an4x -p tcp | awk '{ if (( $2 != 0 ) || ($3 != 0)) print $0 }'; echo; sleep 1; echo "######### Live OoO / 0-win / Retrans: #########" ; date; netstat -an4T -p tcp | awk '{ if (( $2 != 0 ) || ($3 != 0) || ($4 != 0)) print $0 }'; done >> `hostname`.TCP_specs.out
Een constant verhoogde Recv-Q betekent dat de gegevens op de ontvangstbuffer zijn gezet, maar dat de applicatie recv() niet heeft aangeroepen om deze van de ontvangstbuffer naar de toepassingsbuffer te kopiëren. Dit is een indicatie dat de applicatie overbelast is of anderszins niet in staat is om binnenkomende data tijdig te verwerken. Zodra gegevens in de ontvangstwachtrij binnenkomen, moeten deze onmiddellijk worden verwerkt, als de applicatie dat niet doet, wordt er meer werk van hem gevraagd dan hij aankan.
Samenvattend: als de Recv-Q-waarde voor de verbinding hoog blijft terwijl TCP zero window-updatepakketten voor de verbinding worden verzonden, moet een onderzoek naar knelpunten worden uitgevoerd bij de ontvangende applicatie, CPU, schijven, enz.
Als de Recv-Q-waarde voor de verbinding op nul blijft, kunnen TCP-updatepakketten voor het nulvenster die door het knooppunt worden verzonden, er ook op wijzen dat het TCP-ontvangstvenster aan de knooppuntzijde van de verbinding te laag is om mee te beginnen voor het bandbreedtevertragingsproduct (BDP) van de verbinding tussen het knooppunt en de externe bestemming, en moeten sommige TCP-afstemmingen van knooppunten mogelijk in overweging worden genomen.