2.3 Leistungsoptimierung

Die Leistungsoptimierung ist ein komplexes Thema. Die Identity Manager-Benutzeranwendung beruht auf verschiedenen Technologien mit vielen Interaktionen. Es ist daher nicht möglich, jedes einzelne Konfigurationsszenario oder Benutzerinteraktionsszenario vorherzusehen, das zu einer unzulänglichen Funktionsweise führen könnte. Die Leistung einiger Subsysteme kann jedoch durch Best Practices verbessert werden. Diese werden im Folgenden aufgeführt.

2.3.1 Protokollierung

Die Benutzeranwendung ermöglicht eine Protokollierung sowohl über Novell Audit als auch über das Open-Source-Framework Apache log4j. Die Protokollierung über Novell Audit ist in der Standardeinstellung deaktiviert. Die Datei- und Konsolenprotokollierung über log4j ist jedoch standardmäßig aktiviert.

HINWEIS:In Schnitt 5.0, Einrichten der Protokollierung und Schnitt 12.0, Konfiguration der Protokollierung dieses Handuchs wird beschrieben, welche Ereignistypen protokolliert werden und wie Sie die Protokollierung aktivieren und deaktivieren können.

Die log4j-Konfigurationseinstellungen sind in einer Datei namens log4j.xml unter $IDMINSTALL/jboss/server/IDMProv/conf/ enthalten. Gegen Ende der Datei finden Sie den folgenden Eintrag:


<root>     <priority value="INFO" />     <appender-ref ref="CONSOLE" />     <appender-ref ref="FILE" /> </root>

Wenn Sie root einen Wert zuweisen, wird sichergestellt, dass alle Appender-Einträge, denen kein Protokollierungsumfang speziell zugewiesen wurde, den Wert von root (in diesem Fall INFO) übernehmen. Wenn dem FILE-Appender z. B. standardmäßig kein Wert für den Protokollierungsumfang zugewiesen ist, übernimmt er die Einstellung von „root“.

Die von log4j verwendeten möglichen Protokollierungsumfänge sind DEBUG, INFO, WARN, ERROR und FATAL gemäß der Definition in der Klasse org.apache.log4j.Level. Die Nichtbeachtung der korrekten Verwendung dieser Einstellungen kann zu Leistungseinbußen führen.

Es wird empfohlen, INFO oder DEBUG nur bei der Behebung eines bestimmten Problems zu verwenden.

Bei jedem „root“-Appender mit einem zugewiesenen Protokollierungsumfang sollte dieser ERROR, WARN oder FATAL sein, es sei denn (wie soeben ausgeführt), es wird eine Fehlersuche durchgeführt.

Die Leistungseinbußen bei hohem Protokollierungsumfang hängen weniger mit der Ausführlichkeit der Meldungen als vielmehr mit der einfachen Tatsache zusammen, dass bei der Konsolen- und Dateiprotokollierung in log4j synchrone Schreibvorgänge stattfinden. Es ist die Klasse AsyncAppender verfügbar, allerdings wird durch ihre Verwendung keine bessere Leistung gewährleistet. Die Probleme (die bekannt sind und durch Apache log4j, nicht aber durch Identity Manager hervorgerufen werden) sind unter http://logging.apache.org/log4j/docs/api-1.2.8/org/apache/log4j/performance/Logging.html dargelegt.

Die Standardeinstellung INFO in der Protokoll-Konfigurationsdatei (oben) reicht für die meisten Umgebungen aus. Wenn die Leistungsfähigkeit allerdings von besonderer Wichtigkeit ist, empfiehlt es sich, den oben stehenden Eintrag in log4j.xml wie folgt zu ändern:

<root> <priority value="ERROR"/> <appender-ref ref="FILE"/> </root>

Anders ausgedrückt, entfernen Sie CONSOLE und setzen Sie den Protokollierungsumfang auf ERROR. Für eine vollständig getestete/von Fehlern befreite Produktionseinrichtung ist es nicht notwendig, mit dem INFO-Umfang zu protokollieren oder die CONSOLE-Protokollierung zu aktivieren. Diese Deaktivierung wirkt sich meist erheblich auf die Leistung aus.

Weitere Informationen zu log4j finden Sie in der Dokumentation, die unter http://logging.apache.org/log4j/docs zur Verfügung steht.

Weitere Informationen zur Verwendung von Novell Audit mit Identity Manager finden Sie im Novell Identity Manager-Administrationshandbuch.

2.3.2 Identitätsdepot

LDAP-Abfragen können zu einem Engpass in einer stark ausgelasteten Verzeichnisserver-Umgebung führen. Damit auch bei einer großen Anzahl von Objekten ein hoher Leistungsgrad aufrechterhalten werden kann, zeichnet Novell eDirectory (die Basis des Identitätsdepots in Identity Manager) fortlaufend angeforderte Informationen auf und speichert diese in Indizes. Dadurch werden bei einer komplexen Abfrage über Objekte mit indizierten Attributen die Abfrageergebnisse viel schneller ausgegeben.

Im Lieferzustand sind folgende Attribute von eDirectory bereits indiziert:

Aliased Object Name cn dc Equivalent to Me extensionInfo Given Name GUID ldapAttributeList ldapClassList Member NLS: Common Certificate Obituary Reference Revision Surname uniqueID uniqueID_SS 

Wenn Sie Identity Manager installieren, wird das Standardverzeichnisschema mit neuen Objektklassentypen und neuen Attributen, die die Benutzeranwendung betreffen, erweitert. Spezifische Attribute der Benutzeranwendung werden (standardmäßig) nicht indiziert. Zur Erzielung einer besseren Leistung ist es nützlich, einige dieser Attribute (und eventuell auch einige der herkömmlichen LDAP-Attribute) zu indizieren. Dies empfiehlt sich besonders dann, wenn Ihr Benutzercontainer mehr als 5.000 Objekte enthält.

Man sollte nur die Attribute indizieren, die regelmäßig abgefragt werden. (Diese Attribute können je nach Produktionsumgebung sehr unterschiedlich sein.) Die einzige Möglichkeit, herauszufinden, welche Attribute häufig abgefragt werden, besteht darin, während der Laufzeit Prädikatstatistiken zu sammeln. (Dieser Erfassungsvorgang führt jedoch zu Leistungseinbußen.)

Das Verfahren zum Erfassen von Prädikatstatistiken wird im eDirectory-Administrationshandbuch ausführlicher beschrieben. Die Indizierung wird ebenfalls dort ausführlicher behandelt. In der Regel müssen Sie folgende Schritte ausführen:

  • Verwenden Sie Console One zur Aktivierung der Erfassung von Prädikatstatistiken für die gewünschten Attribute.
  • Setzen Sie das System unter Last.
  • Deaktivieren Sie die Statistikerfassung und analysieren Sie die Ergebnisse.
  • Erstellen Sie für jeden Attributtyp, für den es sinnvoll sein könnte, einen Index.

Wenn Sie bereits wissen, welche Attribute Sie indizieren möchten, ist die Verwendung von Console One nicht erforderlich. In iManager können Sie Indizes über „eDirectory-Wartung > Indizes“ erstellen und verwalten. Wenn Sie z. B. wissen, dass die Benutzer Ihres Organigramms sehr wahrscheinlich Suchvorgänge basierend auf dem Attribut isManager ausführen, können Sie versuchen, dieses Attribut zu indizieren und überprüfen, ob die Leistung dadurch positiv beeinflusst wird.

HINWEIS:Als Best Practice wird empfohlen, zumindest die Attribute manager und isManager zu indizieren.

Das Indizieren von Attributen und die Auswirkungen auf die Leistung werden im Kapitel „Tuning eDirectory“ (Optimierung von eDirectory) in Novell's Guide to Troubleshooting eDirectory von Peter Kuo und Jim Henderson (QUE Books, ISBN 0-7897-3146-0) eingehender behandelt.

Weitere Informationen finden Sie außerdem im Kapitel über die Wartung von Novell eDirectory (das Ratschläge zur Leistungsoptimierung umfasst) im eDirectory-Administrationshandbuch.

2.3.3 JVM

Die Größe des Heap-Speichers, der der Java Virtual Machine zugeordnet ist, kann die Leistung beeinflussen. Wenn Sie zu niedrige oder zu hohe Mindest- oder Maximalwerte für den Speicher festlegen („zu hoch“ im Sinne von höher als der physische Arbeitsspeicher des Computers) besteht die Möglichkeit, dass übermäßig viele Daten in die Auslagerungsdatei verschoben werden.

Sie können die maximale JVM-Größe für den JBoss-Server festlegen, indem Sie die Datei run.conf oder run.bat (die erstere für Linux, die letztere für Windows) unter [IDM]/jboss/bin/in einem Texteditor bearbeiten. Erhöhen Sie „-Xmx“ von 128m auf 512m oder möglicherweise höher. Experimentieren Sie ein wenig, um die optimale Einstellung für Ihre spezielle Umgebung zu ermitteln.

HINWEIS:Tipps für die Leistungsoptimierung von JBoss und Tomcat finden Sie unter http://wiki.jboss.org/wiki/Wiki.jsp?page=JBossASTuningSliming.

2.3.4 Sitzungszeitüberschreitung

Der Wert für die Sitzungszeitüberschreitung (der Zeitraum, in dem ein Benutzer eine Seite in seinem Webbrowser unbeaufsichtigt lassen kann, bevor der Server eine Warnmeldung für die Sitzungzeitüberschreitung erzeugt) kann in der Datei web.xml im Archiv IDM.war geändert werden. Dieser Wert sollte so angepasst werden, dass er optimal auf die Serverumgebung und die bestehende Auslastung abgestimmt ist. In der Regel empfiehlt es sich, den Wert für die Sitzungszeitüberschreitung so niedrig wie möglich zu wählen. Wenn es die geschäftlichen Erfordernisse erlauben, sollte der Wert auf 5 Minuten eingestellt werden, denn dies würde dem Server ermöglichen, ungenutzte Ressourcen doppelt so schnell freizugeben als bei einem Wert von 10 Minuten. Dadurch wird die Webanwendung schneller und skalierbarer.

Folgende Aspekte sollten Sie bei der Anpassung des Werts für die Sitzungszeitüberschreitung beachten:

  • Ein höherer Wert für die Sitzungszeitüberschreitung kann unter Umständen dazu führen, dass der JBoss-Server über unzureichenden Arbeitsspeicher verfügt, wenn sich mehrere Benutzer innerhalb eines kurzen Zeitraums anmelden. Dies gilt für alle Anwendungsserver mit zu vielen geöffneten Sitzungen.
  • Wenn sich ein Benutzer bei der Benutzeranwendung anmeldet, wird für den Benutzer eine LDAP-Verbindung erstellt und an die entsprechende Sitzung gebunden. Das bedeutet, je mehr Sitzungen offen sind, desto höher ist die Anzahl der bestehenden LDAP-Verbindungen. Je höher der Wert für die Sitzungszeitüberschreitung gewählt wird, desto länger werden diese Verbindungen aufrechterhalten. Zu viele offene Verbindungen zum LDAP-Server (selbst wenn diese ungenutzt sind) können eine Verminderung der Systemleistung mit sich bringen.
  • Wenn auf dem Server OutOfMemoryErrors auftreten und die Tuning-Parameter für den JVM-Heap und die Speicherbereinigung bereits optimal an die Serverumgebung und die bestehende Auslastung angepasst wurden, sollte das Herabsetzen des Werts für die Sitzungszeitüberschreitung in Erwägung gezogen werden.

Um den Wert für die Sitzungszeitüberschreitung anzupassen, öffnen Sie das Archiv IDM.war und bearbeiten Sie in der Datei web.xml den folgenden Abschnitt (insbesondere den numerischen Wert, hier 20 für 20 Minuten, den Standardwert):

<session-config>     <session-timeout>20</session-timeout> </session-config>

Speichern Sie anschließend die Datei und das Archiv und starten Sie den Server neu.

HINWEIS:Die manuelle Bearbeitung von Webarchivdateien sollte nur von einer Person vorgenommen werden, die über Erfahrung bei der Entwicklung und Implementierung der Java-Webanwendung verfügt.