ServerPlugin LagMonitor - Performance Analyse in Minecraft

Dieses Thema im Forum "Selbstgeschriebene Plugins | Mods | Programme" wurde erstellt von games6471, 22. Januar 2016.

  1. games6471
    Online

    games6471

    Projektbeschreibung:

    Dieses Plugin ermöglicht es die Performance des Servers genauer unter die Lupe zu nehmen. Dadurch kann man Performance-Problemen auf den Grund gehen und den Server entsprechend anpassen.
    • Konfigurationen ändern
    • Plugins auswechseln
    • Plugin-Autor benachrichtigen
    • usw.

    Inspiriert ist diesen Projekt von den leistungsfähigen Programmen VisualVm und Java Mission Control; beide von Oracle. Dieses Plugins versucht den Funktionsumfang dieser Programme anzunähren (Es wird bestimmt niemals möglich sein alle Funktionen einzubauen). Dabei werden die Funktionen im Spiel abrufbar sein. Somit kann dieses Plugin auch für Administratoren interessant sein, die diese Tools nicht verwenden können, weil sie z.B. kein Zugriff auf den kompletten Server haben.

    Ferner ist dieses Plugin speziell für Minecraft entworfen und besitzt deshalb ebenfalls speziell auf Minecraft zugeschnittene Funktionen wie:
    • TPS (später weiter ausgeführt)
    • Spieler Ping
    • Minecraft Timings
    Features
    • Spieler ping zum Server
    • Zeigt den CPU-Verbrauch
    • Zeigt den Arbeitspeicher-Verbrauch
    • Zugriff zum Stacktrace einzelner Threads
      • Ermöglicht es eventuelle Deadlocks zu erkennen
    • Zeigt die TPS (Ticks pro sekunde)
    • Shows system performance usage
    • Visuelle Graphen über das Map Item, die sich ständig aktualisieren
    • Timings können im Spiel über den Chat angezeigt werden
      • Es wird nicht benötigt die Datei zu öffnen oder den Inhalt hochzuladen
    • Zugriff zu MBeans der Java Managment Schnittstelle.
      • Darüber lassen sich bestimmte Systemwerte auslesen wie z.B.
        • Anzahl geladene Klassen
        • Anzahl gestarteter Threads
        • CPU-Verbrauch des Java-Prozess, wo der Server läuft
        • CPU-Verbrauch über das gesamten Server
        • RAM-Verbrauch des gesamten Servers
        • ...
    • Open Source
    • ...
    Permissions

    Derzeit keine

    Commands
    • /ping - Gibt den Ping zum Server zurück (gemeint ist der von Minecraft implementierte Ping)
    • /ping <player> - Gibt den Ping von diesem Spieler zum Server zurück
    • /stacktrace - Gibt den Stacktrace des Hauptthreads zurück
    • /stacktrace <threadName> - Gibt den Stacktrace des ausgewählten Threads zurück
    • /thread - Gibt alle Threads (ausgenommen Java-VM eigene Threads wie Finalizer) mit ihrem Status (wie wartend) zurück
    • /tps - Gibt die die letzten TPS (Ticks pro sekunden) zurück. Bei guter Performance werden 20 TPS versucht zu erreichen.
    • /mbean - List all available mbeans (java environment information, JMX)
    • /mbean <beanName> - Listet alle Attribute dieses MBeans auf.
    • /mbean <beanName> <attribute> - Gibt den Wert von diesem Attribut zurück.
    • /system - Gibt einige generelle Infos über den Server aus. Darunter z.B. Uptime, Java version, Prozessorkerne, laufende Threads, TPS, freier RAM
    • /timing - Gibt den Timings-Report von Plugins (Event handling, Scheduler Tasks) und Minecraft (z.B. wie viel Zeit für das Verwalten von Chunks gebraucht wurde) als Text im Spiel aus
    • /monitor - (Experimentell) Analysiert den CPU-Verbrauch von einzelnen Methoden -> CPU sampling
    • /graph - Gibt dem Spieler eine Karte mit dem Graph über die aktuelle Kategorie (Derzeit nur den Heap-Verbrauch) - aktualisiert sich alle halbe Sekunde
    Lizenz:
    Links:
    Github | Source Code: https://github.com/games647/LagMonitor
    Download: http://dev.bukkit.org/bukkit-plugins/lagmonitor/
    (0.4) ist derzeit nur Verfügbar unter den Github releases.
    Gefällt euch das Projekt?
    Dann lasst doch einen Stern auf Github da. Gerne könnte ihr euch an dem Projekt über Github beteiligen. Da dies ein großes Projekt ist, wäre ich für jede Hilfe dankbar.​

    Screenshots


    Graph vom Heap-Verbrauch (Gelb = Maximal; Blau = Derzeitiger verbrauch) - aktualisiert sich alle halbe Sekunde
    [​IMG]

    (todo - mehr Bilder)
     
    #1
  2. games6471
    Online

    games6471

    Nach einigen Commits später kommt nun auch eine neue Version daher. Temporär ist diese Datei unter den Github Releases zum Download zur Verfügung.

    Verfolgen könnt Ihr das Projekt auf Github hier:
    https://github.com/games647/LagMonitor
    Falls euch das Projekt interessiert, könnt ihr einen Star (wie ein Like) dalassen und euch selbstverständlich an dem Projekt beteiligen.

    Zweifellos ist das Plugin nicht fertig. Es sind noch einige Dinge in Planung.
    https://github.com/games647/LagMonitor#planning
    Einige wichtige Punkte sind unter anderem:
    • Aufräumen des Timings-Parsers. Abgeleitet von der Timings-Website wurde dieser Parser umgesetzt. Da sich dies nicht so ganz einfach war, sieht auch dementsprechend der Programmcode aus.
    • Seiten für die Ausgabe von Befehlen
      Speziell für Ingame-Spieler ist dies ein sehr wichtiger Aspekt, da der Chat nicht besonders groß ist.

      Unter der Verwendung der neuen Chat Features von 1.8 könnte man von einem Timings zusammenfassen und bei einem Klicken auf das jeweilige Element detaillierter ausgeben. Das Gleiche gilt für das "Durchklicken" durch den Stacktrace (Siehe ThreadSample Bild)
    • Plugin spezifische Analyse von z.B. Commands, Events, Tasks (Scheduler)
    • Brandbeiten Tracker (Anzahl der eingehenden und ausgehenden Daten)
    • Heap Verbrauch von Objekten
    • Warnmeldung wenn der Hauptthread versucht blockierende Tasks wie SQL-/HTTP-/File-Operationen auszuführen.
    • usw.
    Nebenbei ist noch zu erwähnen , dass die Idee für den Thread-Sampler von sk89q's Projekt WarmRoast stammt. Falls euch dieses Projekt nicht gefällt, könnt ihr auch dort vorbei schauen.

    Natürlich mag jeder Screenshots, also dann:

    Timing command
    [​IMG]

    CPU Graph (blue=process, yellow=system) - Process load
    [​IMG]

    Stacktrace and Threads command
    1. /stacktrace Thread-5 -> Wie zu erkennen ist dies der Konsolen Thread
    Natürlich geht auch /stacktrace Spigot Watchdog Thread
    2. /threads
    [​IMG]

    Ping Command
    [​IMG]

    Thread Sampler (Monitor command)
    [​IMG]

    Environment command
    [​IMG]

    System command
    [​IMG]
     
    #2
  3. 可愛い
    Offline

    可愛い

    Registriert seit:
    19. Mai 2014
    Beiträge:
    657
    Hab das jetzt nur kurz überflogen, aber die Idee mit der Map find ich cool.
     
    #3
  4. games6471
    Online

    games6471

    Danke.

    Wenn man schon Bilder mit der Minecraft-Map anzeigen kann, wieso dann nicht auch solche Graphen abbilden. Sowas ist dann bestimmt auch benutzerfreundlicher als irgendwelche Textuelle Graphen im Chat.

    Nur leider ist die Karte mit 128*128 und einer kleinen Farbauswahl ziemlich begrenzt. Derzeit aktualisiert sich die Karte alle 10 Ticks (~0,5 Sekunden) und ist damit auch wieder angelehnt an den VisualVM-Monitor:

    [​IMG]
     
    #4
    jensIO gefällt das.
  5. HowlyCoding
    Offline

    HowlyCoding

    Registriert seit:
    6. März 2016
    Beiträge:
    2
    Das ist echt eine geniale Idee, danke für die Veröffentlichung!!!
     
    #5