Heute habe ich einem Klassenkameraden geholfen, ein Problem zu lösen – Tomcat startete sehr langsam, etwa fünf oder sechs Minuten. Sobald das Problem behoben ist, dauert das Hochfahren nur 3 Sekunden. Wie kann das Problem gelöst werden? Suchen Sie catalina.sh im Bin-Verzeichnis von Tomcat, öffnen Sie es und fügen Sie an der folgenden Stelle eine Codezeile hinzu:
Nachtrag vom 12.02.2019: Viele Freunde möchten das Prinzip wissen, deshalb erkläre ich es kurz. Tomcat 7 und Tomcat 8 rufen beim Start org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom auf, um eine Zeichenfolge sicherer Zufallszahlen zu generieren. In der Linux-Umgebung (CentOS) können Zufallszahlen aus zwei speziellen Dateien generiert werden, eine ist /dev/urandom und die andere ist /dev/random. Das Prinzip der Zufallszahlengenerierung besteht darin, den Entropiepool des aktuellen Systems zu nutzen, um eine feste Anzahl von Zufallsbits zu berechnen und diese Bits dann als Bytestrom zurückzugeben. Der Entropiepool ist das Umgebungsrauschen des aktuellen Systems. Entropie bezieht sich auf den Grad des Chaos in einem System. Systemrauschen kann anhand vieler Parameter bewertet werden, wie z. B. Speichernutzung, Dateinutzung, Anzahl unterschiedlicher Prozesstypen usw. /dev/random blockiert das Programm, wenn es keine neuen Zufallszahlen generieren kann, und kehrt nicht zurück, bis entsprechend dem Entropiepool neue Zufallsbytes generiert wurden. /dev/urandom tut dies nicht (ublock) und natürlich sind die generierten Zufallszahlen nicht sehr gut. Daher zwingen wir Tomcat, zum Generieren von Zufallszahlen /dev/urandom anstelle von /dev/random zu verwenden. Dadurch verbessert sich die Geschwindigkeit erheblich – von mehreren Minuten auf nur wenige Sekunden. Zusätzliches Wissen: Lösung für den Tomcat-Start ist sehr langsam und es gibt keine Fehler im Protokoll 1. Problem Als ich das Projekt einmal in der Alibaba Cloud bereitgestellt habe, gab es kein Problem mit dem Projekt. Als ich jedoch Tomcat startete, dauerte es einen halben Tag, bis ich reagierte und den Tomcat-Startvorgang abschloss. Tomcat startet sehr langsam und es gibt keine Fehler im Protokoll. Die folgenden Informationen finden sich im Protokoll:
2. Gründe Tomcat 7/8 verwenden beide die Klasse org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom, um eine Instanz der sicheren Zufallsklasse SecureRandom als Sitzungs-ID zu generieren, was 342 Sekunden oder fast 6 Minuten dauert. Der SHA1PRNG-Algorithmus ist ein auf dem SHA-1-Algorithmus basierender Pseudozufallszahlengenerator mit starker Vertraulichkeit. In SHA1PRNG gibt es einen Seed-Generator, der je nach Konfiguration verschiedene Operationen ausführt. 1) Wenn die Eigenschaft java.security.egd oder die Eigenschaft securerandom.source „file:/dev/random“ oder „file:/dev/urandom“ angibt, verwendet die JVM den nativen Seed-Generator NativeSeedGenerator, der die Methode super() aufruft, d. h. die Methode SeedGenerator.URLSeedGenerator(/dev/random) zur Initialisierung. 2) Wenn die Eigenschaft java.security.egd oder die Eigenschaft securerandom.source eine andere vorhandene URL angibt, wird zur Initialisierung die Methode SeedGenerator.URLSeedGenerator(url) aufgerufen. Aus diesem Grund funktioniert es, den Wert auf „file:///dev/urandom“ oder „file:/./dev/random“ festzulegen. In dieser Implementierung wertet der Generator die Menge an Rauschen im Entropiepool aus. Zufallszahlen werden aus einem Entropiepool erstellt. Beim Lesen gibt das Gerät /dev/random einfach zufällige Bytes aus dem Rauschen im Entropiepool zurück. /dev/random eignet sich gut für Szenarien, die eine sehr hohe Zufälligkeitsqualität erfordern, wie etwa einmalige Zahlungen oder Schlüsselgenerierung. Wenn der Entropiepool leer ist, werden Lesevorgänge von /dev/random blockiert, bis der Entropiepool genügend Umgebungsgeräuschdaten gesammelt hat. Der Zweck besteht darin, einen kryptografisch sicheren Pseudozufallszahlengenerator zu schaffen und der Entropiepool sollte eine möglichst große Ausgabe haben. Dies ist wichtig für die Generierung hochwertiger Verschlüsselungsschlüssel oder für Szenarien, die einen langfristigen Schutz erfordern. 3. Lösung Es gibt zwei Lösungen: 1) Gelöst in TOMCAT-Umgebung Sie können eine nicht blockierende Entropiequelle verwenden, indem Sie die JRE konfigurieren. Fügen Sie diese Zeile zu catalina.sh hinzu:
Das ist es. Nach dem Hinzufügen verringerte sich die gesamte Startzeit beim Starten von Tomcat auf 2912 ms für den Serverstart. 2) In JVM-Umgebung lösen Öffnen Sie die Datei $JAVA_PATH/jre/lib/security/java.security. Sie können im vi-Befehl danach suchen:
Finden Sie die folgenden Inhalte:
Ersetzen Sie es dann durch:
Der obige Artikel handelt davon, wie man das Problem des langsamen Tomcat-Starts schnell lösen kann. Er ist super einfach und das ist alles, was der Herausgeber mit Ihnen geteilt hat. Ich hoffe, er kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Das könnte Sie auch interessieren:
|
<<: Beispiel für ein JavaScript-Meldungsfeld
>>: SQL Left Join und Right Join - Prinzip und Beispielanalyse
Beim Importieren von Daten mit falscher MySQL-Zei...
Inhaltsverzeichnis Stabilisierung Drosselung: Ant...
Das Span-Tag wird häufig beim Erstellen von HTML-...
Überblick Da wir die Daten normalerweise nicht di...
Ergebnisse erzielen Implementierungscode html <...
Vorwort: Ich habe das geschrieben, weil ich meine...
Es gibt wahrscheinlich ebenso viele modulare Lösu...
Inhaltsverzeichnis 1. Funktionsdefinition 1.1 Fun...
Ideen: Eine äußere Box legt den Hintergrund fest;...
[LeetCode] 197.Steigende Temperatur Schreiben Sie...
Inhaltsverzeichnis Vorwort Keep-Avlive-Hook-Funkt...
Inhaltsverzeichnis JavaScript-Ereignisse: Häufig ...
Screenshots der Effekte: Implementierungscode: Cod...
Standardmäßig wird die Konfiguration /etc/default...
Vorwort Die Schlüsselwörter von MySQL und Oracle ...