Messung von Transfer- und Ausführungszeiten von Methodenaufrufen in verteilten Systemen

« | Einleitung | Server-seitige Zeitmessung »

Client-seitige Zeitmessung

Problem

Folgende Fragestellungen ergeben sich aus Sicht eines Clients, wenn er entfernte Dienste nutzen möchte:

  • Wie lange dauert es bei einem entfernten Methodenaufruf, bis ein Client-Objekt nach Anforderung einer Dienstleistung bei einem Server-Objekt mit seiner nächsten Instruktion fortfahren kann?
  • (Bei einer grafischen Oberfläche): Wie lange ist der Client blockiert?
  • Wie lange kann der Anwender keine weiteren Interaktionen mit dem Client durchführen?
  • Wie schnell meldet sich das Programm beim Anwender zurück?

Ziel

Das Ziel der client-seitigen Zeitmessung ist die Messung der Zeitspanne, die zur vollständigen Ausführung eines entfernten Methodenaufrufs aus Sicht des Clients benötigt wird.

Vorgehen

Die Zeitmessung beginnt mit dem Absetzen des Methodenaufrufs im Client-Objekt. Sie beinhaltet das Verpacken und Entpacken ggf. vorhandener Parameter auf Client- und Server-Seite und den Transfer der Daten über das Netzwerk. Die Zeitmessung endet, wenn das Client-Objekt eine Rückmeldung - nach der Ausführung der Methode - vom Server-Objekt bekommt. Wie geht die Messung vonstatten? Im Client-Objekt wird direkt vor dem Absetzen des Methodenaufrufs an ein Server-Objekt die Systemzeit ermittelt. Diese Zeit wird als Startzeit im Client-Objekt gespeichert. Bei der Rückmeldung des Server-Objektes (nach Ausführung der aufgerufenen Methode im Server-Objekt) wird im Client-Objekt erneut die Systemzeit abgefragt. Diese wird nun als Stoppzeit interpretiert. Die Differenz der beiden vom Client-Objekt genommenen Zeiten ist die Zeitspanne, in der das Client-Objekt vollständig blockiert ist. Folgende Abbildung stellt grafisch dar, welche Zeitspanne gemessen wird bzw. woraus sich die Zeitspanne zusam-mensetzt.

Code-Beispiel

Folgendes Java-Codefragment illustriert die Zeitmessung eines Client-Objektes. Außer dem hier aufgeführten Code sind keine weiteren Implementierungen (z.B. im Server-Objekt) notwendig.

 public class clientObject {

   // Referenz auf remoteObject holen (z.B. über Naming-Service) . . .
   // Diese Methode ruft eine Methode beim Server-Objekt auf
   public void measureRemoteMethod() {
     long startTime = System.currentTimeMillis();
     remoteObject.methodTest(); // Aufruf der remote-Methode
     long stopTime = System.currentTimeMillis();
     System.out.println(“Zeitdauer in msec = “ + stopTime-startTime));
  }
 } 

« | Einleitung | Server-seitige Zeitmessung »