Zum Hauptinhalt springen

Was Anwendern, die von TCP_OS zu STCP wechseln, sofort auffällt, ist, dass die vom TCP_OS-Befehl „netstat“ angezeigten TCP-Statistiken wesentlich umfangreicher sind als die von STCP. Die „netstat“-Statistiken von STCP zeigen die standardmäßigen TCP-Statistiken gemäß RFC-1213 an. Statistiken wie doppelte Bestätigungen, doppelte Daten, Pakete in falscher Reihenfolge oder die Anzahl der Window-Probes fehlen. Viele dieser Statistiken sind jedoch als Teil der Ausgabe verfügbar, die durch die Anfrage „analyze_system stcp_meters“ angezeigt wird. Probieren Sie den folgenden Befehl aus:
analyze_system -request_line ‘stcp_meters -all -long’ -quit

Die Argumente und die Ausgabe von `stcp_meters` sind im Handbuch „OpenVOS System Analysis (R073)“ dokumentiert, das unterstratus verfügbar ist. Der Datensatz entspricht nicht dem des Befehls `TCP_OS`; einige Zähler wie „connections dropped by retransmit“ fehlen, dafür gibt es aber auch neue Zähler wie „window set zero after receive“. Ein nettes Detail ist, dass der prozentuale Anteil des Zählers automatisch berechnet und angezeigt wird.

Ein großes Problem bei den TCP-Statistiken von „netstat“ sowohl für TCP_OS als auch für STCP besteht darin, dass sie sich auf das gesamte Modul beziehen; die Zählwerte für jede Verbindung, die jemals existiert hat (zumindest seit dem aktuellen Systemstart), werden addiert, um die angezeigten Werte zu erhalten. Probleme wie inakzeptable Wiederholungsübertragungen, die nur eine oder wenige Verbindungen betreffen, können in den Gesamtzahlen untergehen. Das Standardverhalten von stcp_meters weist dasselbe Problem auf: Es aggregiert die Zähler aller Verbindungen seit dem aktuellen Systemstart; ABER stcp_meters kann als Argument die PCB-Adresse (Protocol Control Block) einer einzelnen Verbindung entgegennehmen und die Statistiken nur für diese eine Verbindung anzeigen, was es zu einer wichtigen Debugging-Hilfe macht. Um die PCB-Adresse zu ermitteln, führen Sie netstat mit dem Argument PCB_addr aus – ja, PCB wird in Großbuchstaben geschrieben. Sobald netstat fertig ist, finden Sie die gewünschte Verbindung, und die PCB-Adresse steht in der ersten Spalte.

Das folgende Makro erledigt dies für Sie: Es führt „netstat“ aus, ermittelt die gewünschte Verbindung, extrahiert die PCB-Adresse und führt anschließend „stcp_meters“ aus. Das Makro akzeptiert entweder die PCB-Adresse, falls Sie diese bereits kennen (in diesem Fall überspringt es die meisten der oben genannten Schritte), oder zwei Zeichenfolgen, die bei der Identifizierung der gewünschten Verbindung helfen. Die Verwendungshinweise geben an, dass die Zeichenfolgen die lokale IP-Adresse, die lokale Portnummer sowie die Remote-IP-Adresse und die Remote-Portnummer sein sollten. Dadurch wird die Verbindung eindeutig identifiziert, aber möglicherweise reichen auch weniger Angaben aus, zum Beispiel nur die lokale Portnummer und die Remote-IP-Adresse. Wenn die angegebenen Zeichenfolgen mehr als eine Verbindung identifizieren, werden die Messwerte für jede dieser Verbindungen angezeigt. Die netstat-Zeile erscheint über den Messwerten, um zu verdeutlichen, für welche Verbindung die Messwerte gelten.

Wenn Sie die Metriken für alle Ihre bestehenden Verbindungen anzeigen möchten, versuchen Sie den Befehl „
get_connection_meters -local ESTAB -remote :“

In diesem Fall stehen die Argumente nicht für die lokale und die Remote-Adresse, sondern für den Status „ESTABLISHED“ und jede Zeile, die einen Doppelpunkt enthält.

& get_connection_meters beginnt hier\
&\
& get_connection_meters.cm\
&   Version 1.0 06.04.09\
& stratus
&\
&begin_parameters\
 LOCAL  Option (-local),Zeichenkette\
 REMOTE Option (-remote),Zeichenkette
PCB    Option (-pcb),Zeichenkette
&end_parameters
&
& stelle sicher, dass keine überflüssigen Daten in die Ergebnisdatei ausgegeben werden
&if (process_type) = 'batch' &then &do
set_ready -format off
&echo no_command_lines
&end
&
&if (length &PCB&) > 0
&dann &do;
   &wenn (Länge &LOCAL&) > 0;
       &dann &goto ERROR_ADDRESS;
   &wenn (Länge &REMOTE&) > 0;
       &dann &goto ERROR_ADDRESS
   analyze_system -request_line (string stcp_meters &PCB& -all -long) -quit
   &return
&end
&
&set_string FILE_1 (process_dir)>connect_stcp_meters_1.temp
&set_string FILE_2 (process_dir)>connect_stcp_meters_2.temp
&
&if (length &LOCAL&) = 0
    &then &goto ERROR_ADDRESS
&if (length &REMOTE&) = 0
    &then &goto ERROR_ADDRESS
attach_default_output &FILE_1&
netstat -numeric -PCB_addr
detach_default_output
&
display &FILE_1& -match &LOCAL& -output_path &FILE_2& -no_header
display &FILE_2& -match &REMOTE& -output_path &FILE_1& -no_header
&
&attach_input
analyze_system
&set LINE 1
&label AGAIN
&set_string CONNECTION (contents &FILE_1& &LINE& -hold)
&if (end_of_file &FILE_1&) = 1 &then &do
    &if &LINE& = 1
       &then &goto ERROR_NOT_FOUND
       &else &do
          quit
          &return
       &end
&end
&
..display_line ============================================================
..display_line ============================================================
..display_line
..display_line &CONNECTION&
..display_line
&set_string PCB (substr (string &CONNECTION&) 1 8)
stcp_meters &PCB& -all -long
&set LINE (calc &LINE& + 1)
&goto AGAIN
&
&
&label ERROR_NOT_FOUND
quit
display_line
display_line
display_line Die angegebene Verbindung konnte in der netstat-Ausgabe nicht gefunden werden
display_line &LOCAL& &REMOTE&
&return
&
&label ERROR_ADDRESS
display_line
display_line Sie müssen entweder eine PCB-Adresse oder sowohl die lokale als auch die Remote-IP:Port eingeben;
display_line Verwendung:;
display_line '        get_connection_meters -pcb PCB';
display_line '    oder';
display_line '        get_connection_meters -local IP:PORT -remote IP:PORT';
&return;
&;
& get_connection_meters endet hier