Testvariablen:

  • Sensoranzahl s
  • Nachrichtenanzahl m
  • unterschiedliche Nachrichtentypen: TextMessages, ObjectMessages
  • Anzahl der Topics/Queues t / q
  • Verwendung von Messageselector
  • Verarbeitung der Nachrichten(z.B Listen durchlaufen...)

Vorbedingungen (teilw.):

  • Ausschalten von allen Loggern (vor allem file, weil aufwändig), einziges Logging: Ergebnis in Console
  • manuelle Einstellung des java Heap mittels "vm argument" : -Xmx384m
  • Start aus dem Eclipse Projekt

Scenario 1

  • Versenden von m Nachrichten an s Sensoren mit Zeitmessung, (System.currentTimeMillis()) wird gespeichert bei Start und Ende des Tests. Testende = letzter Aufruf der "onMessage- Methode",festgestellt durch statische Variable (wird am Ende der onMessage-Methode erhöht).
  • Eine Mittlung über mehrere Durchläufe erfolgt nicht. Es werden aber jeweils 3 Durchläufe gestartet um die (geringen) Unterschiede zu beobachten.
  • alternativ denkbar: Senden von Nachrichten über bestimmten Zeitraum
  • Einsatz eines Messageselectors: Filtern der Nachrichten über eine String-Property (enthält zufällig generierte ID eines Sensors). Der Sensor verarbeitet dann nur Nachrichten die für ihn bestimmt sind.
  • versenden von unterschiedlichen Messagetypen:
    • jms- textmessage : enthält 50 Zeichen
    • jms- objectmessage (enthält eine Array-Liste von 10 doubles, beim Empfang wird das Maximum bestimmt)
  • ein Messenger fungiert als Listener für alle Topics eines Sensors

  • Probleme/ Überlegungen:
    • java heap space error
    • Frage: Einsatz eines manuellen Garbage Collectors?
    • Frage :Verlangsamung des Programms durch hohe Testlauf Anzahl(automatisiert durch geschachtelte Schleifen) oder durch hohe Variablenwerte?
    • Gleichwertiges Testen der Parameterkombination durch Threads oder durch "frische" VM?
    • nichtbeachten von Rechnerleistung
    • es ist nicht festzustellen (nach meinem Wissen), wann eine Mantaray queue komplett abgearbeitet ist, daher sind keine Test mit einer Schleife und unserer Zählvariable mögliche, das der 2. Test diese auf 0 setzt bevor der 1. komplett alle Nachrichten verschickt hat
    • Mittlung über mehrere Läufe automatisch nicht möglich, da Mantaray scheinbar noch arbeitet, nachdem alle Messages verarbeitet wurden

  • Durchführen der Tests:
    • verschiedene Kombinationen folgender Variablenbereiche:
      • Sensoren : 10 - 100 in 10er Schritten
      • Nachrichten : 100- 1000 in 100er Schritten
      • mit Messageselector/ ohne Messageselector
      • Anzahl der Topics (Sensor subcsriped mehrere Topics) 1-5
      • verschiedene Messagetypen: bisher nur Textmessage und Objectmessage

Szenario 2

  • Sensoren laufen als eigene Threads in einem CachedThreadPool und senden Messages an andere Sensoren. Außerdem läuft eine TimeControl im gleichen ThreadPool, die in bestimmten Abständen eine Message sendet.

Ergebniss-Logs:

  • SensorsAndTimeControl - 50 Sensoren empfangen alle 5 Sekunden eine TimeControl Nachricht, dieses ist eine einfache Textnachricht. Deren Text und die aktuelle Zeit wird geloggt. Es fällt auf, das in der Zeit, bis die Logging-Nachricht durch ist, schon 2 Sonsoren die Nachricht gelesen haben!
  • SensorsSendingAndTimeControl - 50 Sensoren senden jede 1000 - 2000 Millisekunden eine Nachricht, TimeControl sendet jede 1 Sekunde. Auszüge aus dem log. Es wird die Queue-Struktur des Topics deutlich, die Messages werden in korrekter Reihenfolge abgeholt, auch die Sensoren holen sich die Nachricht in der Reihenfolge ihrer Anmeldung an dem Topic ab. Es werden keine Verarbeitungen mit den Textnachrichten durchgeführt, es findet keine Selektion der Message statt (Sensoren empfangen auch ihre eigene Nachricht). Ergebniss: Das senden einer Nachricht an alle 50 Sensoren daurt keine 20 Millisekunden!
  • SensorSendingObjectMessagesAndTimeControl - Analog zum Fall zuvor, jedoch mit Objectmessages (enthält ArrayListe mit 100 Doubles) und einer Verarbeitung (einmaliger Listendurchlauf, speichern des jeweils größten in einer lokalen Liste/History, erzeugt kaum Laufzeit), die Listen werden beim Erzeugen des Sensors einmal erstellt. Die Zeit zwischen senden der Nachricht und lesen durch Sensor 49 beträgt ca. 200 Millisekunden. Das versenden eine Time-Message benötigt weiterhin ca. 20 Millisekunden. Nach ca 6,5 Minuten kommt ein OutOfMemoryError... das senden einer Zeitnachricht dauert inwzischen ca. 300 Millisekunden, die erste Nachricht die in der Console gesendet wird, wird innerhalb der Console garnicht mehr gelesen! Finde aber in den MantaRay-Threads keine Liste/Queue mit noch nicht verschickten Nachrichten.

-- DanielNuest - 05 Feb 2007

This topic: SensorWeb > WebHome > SensorWorld > MantaRayPerfomanceTests
Topic revision: 05 Feb 2007, DanielNuest
Legal Notice | Privacy Statement


This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Wiki? Send feedback