|
Eine gute Performance ist bei betriebswirtschaftlichen Systemen in der Regel keine Zauberei. Der Schlüssel zu einer akzeptablen oder nur zu einer besseren Performance ist der, sich einfach ein wenig darum zu kümmern. Betriebswirtschaftliche Anwendungen sind deshalb relativ einfach in den Griff zu bekommen, weil der Hauptanteil von betriebswirtschaftlichen Systemen Tausende von Aufträgen, Reklamationen und Dienstleistungen zu erledigen hat. Sofern diese nicht alle voneinander abhängig sind, sind diese leicht verteilbar.
Natürlich stößt man auch bei betriebswirtschaftlichen Systemen irgendwann auf Situationen, die bei steigender Datenmenge immer mehr Zeit oder Systemressourcen benötigen, oder gar ein kombinatorisches Problem darstellen. Diese Situationen sind mitunter leider nicht leicht zu verbessern.
An dieser Stelle sammle ich interessante Informationen und Links zum Thema Performance. Diese Sammlung werde ich im Laufe der Zeit um weitere Einträge ergänzen und sicher mehrmals restrukturieren. Kleines Einmaleins1 * 1 = KümmernEine hinreichend performante Software bekommt man genauso selten geschenkt, wie eine funktionierende Software.
2 * 1 = Arbeit für den ComputerFür die Abarbeitung einer Aufgabe durch einen Computer sind primär der Mikroprozessor zusammen mit dem Speicher und verschiedenen Input- und Outputsystemen beschäftigt. Ist eine Aufgabe zweimal abzuarbeiten oder ist sie sinngemäß doppelt so groß, dann muss beispielsweise der Mikroprozessor doppelt so viel arbeiten. Jeder Verarbeitungsschritt, jeder Aufruf der Datenbank und jeder Aufruf eines entfernten Systems bedeutet einfach Arbeit für den Computer, die sich summiert oder sogar multipliziert. Das gilt insbesondere auch für Arbeiten, die der Computer unnötigerweise erledigen soll. Unnötige Arbeiten sind beispielsweise unnötige Aufrufe der Datenbank oder unnötige Aufrufe von entfernten Systemen oder unnötig umfangreicher Datenabruf. Ja selbst das unnötige Erzeugen von Objekten stellt trotz mittlerweile deutlich verbesserter Speicherverwaltung immer noch unnötige Arbeit für einen Computer dar, die wohl abgewogen sein will.Solange die Aufgabe nicht eine der Kategorie "praktisch nicht in endlicher Zeit berechenbar" ist, gibt es unterschiedliche Wege, die Situation zu verbessern:
3 * 1 = Das schwächste GliedFür die Verfügbarkeit und die Performance eines Gesamtsystems sind alle beteiligten Komponenten von Bedeutung. Irgendwie findet sich jede Komponente irgendwo in einer Verarbeitungskette wieder. Eine Beispielkette: CPU, Busse, IO-Schnittstelle, Festplatte, Plattencache, Magnetscheiben. Oder eine andere Beispielkette: Web-Browser des Anwenders, Javascript-Interpreter im Web-Browser, Netzwerk, Web-Server, Application-Server, Datenbank, Festplatten.Wodurch zeichnet sich ein schwaches Glied aus? Seine Auslastung ist im Vergleich zu den anderen Komponenten signifikant höher, oder es benötigt von der Gesamtverarbeitungszeit einen signifikanten Anteil. Wurde das schwächste Glied identifiziert und optimiert, dann ist damit zu rechnen, dass nun andere Glieder aufgrund der besseren Inanspruchnahme einen Engpass haben. 4 * 1 = LastestsLasttests sind ein wichtiges Mittel, zu konkreten Erkenntnissen bezüglich der Leistungsfähigkeit eines Systems oder eines konkreten Service zu kommen.Anwendungsgebiete von Lasttests:
5 * 1 = MesswerteEs gibt nur wenige Messwerte, die für Aussagen rund um die Leistungsfähigkeit herangezogen werden. Um zur Charakterisierung der aktuellen Leistung eines Systems oder Service zu kommen, werden über die Messungen statistische Kennzahlen wie Mittelwert, Streuung, uvam. gebildet. In der Regel ist es sinnvoll, gewisse Abhängigkeiten zu suchen und in Diagrammen darzustellen. Die typischen Messwerte zur einfachen Skizzierung der Leistungsfähigkeit eines Systems oder auch seiner Komponenten sind:
6 * 1 = Kein Diagramm ist gleichbedeutend mit: Es gibt keine nützliche AussageSollte man nach einem Lasttest nicht in der Lage sein, ein oder mehrere Diagramme zu erstellen, die jeweils eine nachvollziehbare Aussage transportieren, dann stimmt irgendwas mit der Art und Weise mit der Durchführung des Lasttests oder seinen Messdaten nicht. Was nicht heißen muss, dass man keine wertvolle Hinweise für weiterführende Lasttests oder Analysen erhält.7 * 1 = Auslastung der CPUDie Serviceleistung einer CPU ist Rechenzeit zur Verfügung zu stellen. Bei der Auslastung der CPU geht es darum, wie viel Rechenzeit für eine Aufgabe benötigt wird.Auf jedem Betriebssystem gibt es Möglichkeiten, die Auslastung der CPU über die Zeit hinweg zu beobachten. Die Auslastung wird in Prozent angegeben. Bei einer Auslastung von 30% über 15 Sekunden hinweg war die CPU 30%*15s = 5s mit Rechnen beschäftigt. Das heißt, dass die CPU 10 Sekunden lang nichts zu tun hatte. Möchte man den Anteil der Rechenzeit einer bestimmten Funktionalität ermitteln, dann bildet man die Differenz der Auslastung mit der Funktionalität zu der Auslastung ohne die betreffende Funktionalität. Am leichtesten lässt sich Last in einer Schleife erzeugen. ![]() 9 * 1 = ...10 * 1 = ...1 * 2 = VerfügbarkeitMit Verfügbarkeit bezeichnet man das Verhältnis der Zeit (TUP), welche ein System verwendbar ist, zu der Gesamtzeit, in der das System verwendbar sein sollte; also inklusive der ungeplanten Ausfallzeiten (TUP+TDOWN).Ein System setzt sich selbst wiederum aus mehreren Teil- oder Subsystemen zusammen. Wie die Teilsysteme im Gesamtsystem zusammenarbeiten, lässt sich in einer Kombination von Parallel- und Reihenschaltung darstellen. Beispiele für eine Reihenschaltung sind der Aufruf von entfernten Systemen über das Netzwerk und die Verkettung von Schichten, die sogar noch verteilt sein können. Ein Beispiel für eine Parallelschaltung ist ein Cluster von mehreren Systemen mit derselben Funktionalität. Generell ist die Gesamtverfügbarkeit bei Reihenschaltung kleiner als das schlechteste Teilsystem. Bei der Parallelschaltung ist die Gesamtverfügbarkeit besser als das beste Teilsystem. Insbesondere sinkt zunächst automatisch die Verfügbarkeit in einer serviceorientierten Infrastruktur, bei der Serviceaufrufe über die Verkettung verschiedener Systeme realisiert sind, im Vergleich zu einer Anwendung, die nicht in Services zerlegt und verteilt wurde. 2 * 2 = Skalierbarkeit...WerkzeugePerformance Monitoring GuideBrendan Gregg erklärt in Videos die Benutzung der Analysetools: uptime, prstat, vmstat und mpstat. Analyse der Speicher- und CPU-Auslastung mittels vmstat dynaTrace AJAX Edition Yahoo Yslow Google Page Speed CSS Sprite Generator Java Modelling Tools (JMT) inspectIT - Kostenfreie Performance Diagnose AppDynamics Lite - Kostenfreie Performance Diagnose Google - jdbcdslog Google - log4jdbc Apache JMeter Tipps zur Bekämpfung von PerformanceproblemenJson Java parsers / generators microbenchmark Homepage von Steve Souders Blog von dynaTrace CSS Sprites Vaadin - Optimizing Sluggish UI Use a better mechanism to parse config files JBoss AS 5 Performance Tuning Flush and Clear: O/R Mapping Pitfalls Tuning von Hibernate- und JPA-Anwendungen Folien zu JPA mit Hibernate Hibernate Fetching Plans and Fetching Strategies Optimierung von JPA-Anwendungen (Folien) Optimizing JPA Performance: An EclipseLink, Hibernate, and OpenJPA Comparison JPA comparison: Hibernate, Toplink, OpenJPA, Eclipselink Theorie bis zum AbwinkenAnalyzing Computer System Performance with Perl::PDQ Performancemanagement für serviceorientierte Java-Anwendungen: Werkzeug- und Methodenunterstützung im Spannungsfeld von Entwicklung und Betrieb The Home of Guerrilla Capacity Planning for Enterprise Datacenters and Websites Guerrilla Capacity Planning: A Tactical Approach to Planning for Highly Scalable Applications and Services Software Performance Testing Handbook - A Comprehensive Guide for Beginners The Operational Analysis of Queueing Network Models Quantitative System Performance Performanceanalyse von SOAP- und REST- basierten Services in einer Linguistic Resources Umgebung Performance Analysis of Computer Systems |

