Lösung für die langsame Reaktion des Tomcat-Servers

Lösung für die langsame Reaktion des Tomcat-Servers

1. Analytisches Denken

1. Beseitigen Sie die eigenen Gründe der Maschine

2. Server-Leistungsanalyse

3. Analyse des Projekts selbst (nicht detailliert)

4. Analyse virtueller Maschinen

5. Datenbankanalyse

2. Detaillierte Analysemethode

1. Beseitigen Sie die eigenen Gründe der Maschine

Sie können Webmaster-Tools verwenden, um die Geschwindigkeit Ihrer Website zu testen.

2. Server-Leistungsanalyse

Verwenden Sie den Befehl top, um die Ressourcennutzung des Servers anzuzeigen. Analysieren Sie hauptsächlich die CPU- und Speichernutzung (der Befehl top ist ein häufig verwendetes Leistungsanalysetool unter Linux, mit dem die Ressourcennutzung jedes Prozesses im System in Echtzeit angezeigt werden kann. Die Prozessliste wird standardmäßig alle 5 Sekunden aktualisiert und ähnelt daher dem Windows Task-Manager.):

Die dritte Zeile zeigt die CPU-Auslastung, die detaillierte Bedeutung ist wie folgt:

us – der Prozentsatz der CPU, der durch Benutzerspeicher belegt ist, sy – der Prozentsatz der CPU, der durch Kernelspeicher belegt ist, ni – der Prozentsatz der CPU, der durch Prozesse belegt ist, deren Priorität geändert wurde, id – der Prozentsatz der inaktiven CPU, wa – der Prozentsatz der CPU, der durch IO-Wartezeiten belegt ist, hi – der Prozentsatz der CPU, der durch Hard-Interrupts (Hardware-IRQ) belegt ist, si – der Prozentsatz der CPU, der durch Soft-Interrupts (Software-Interrupts) belegt ist, st – Steal Time, die tatsächliche CPU-Zeit, die Aufgaben zugewiesen ist, die auf anderen virtuellen Maschinen auf dem Host ausgeführt werden, im Allgemeinen nur im Betriebssystem der virtuellen Maschine.

Die 4. Zeile zeigt die aktuelle Speichersituation. Der gesamte Serverspeicher beträgt 8054352 KB, 2879468 KB werden verwendet, 5174884 KB sind übrig und 265728 KB sind gepuffert.

Mein persönliches Verständnis ist: Wenn der US-Prozentsatz weniger als 50 % beträgt, besteht kein Grund, das Serverkonfigurationsproblem zu berücksichtigen. Wenn der US-Prozentsatz des Servers über einen längeren Zeitraum über 70 % liegt, können Sie eine Verstärkung der Hardwarekonfiguration des Servers in Betracht ziehen. Darüber hinaus müssen Sie auch den Netzwerkstatus des Servers überprüfen. Sie können den Netzwerkstatus grundsätzlich ermitteln, indem Sie eine große Datei herunterladen.

3. Analyse des Projekts selbst

Wenn Sie einen JDBC-Verbindungspool verwenden, müssen Sie die Konfiguration des Verbindungspools analysieren (maximale Anzahl von Thread-Pools, Freigabezeit usw. analysieren).

Hier wird C3P0 als Beispiel verwendet. Nachfolgend sehen Sie die Konfiguration eines Projekts, an dem ich einmal gearbeitet habe:

Dies war ursprünglich nur ein Konfigurationsplan für lokale Tests. Aus Unachtsamkeit habe ich vergessen, ihn zu ändern, nachdem ich online gegangen war. Wenn mehrere Personen den Server besuchen, tritt ein Timeout für die Wartezeit auf. Wir müssen die entsprechenden Konfigurationsdaten entsprechend der tatsächlichen Situation des Projekts festlegen.

Es ist auch möglich, dass die langsame Reaktion durch eine unangemessene Projektgestaltung verursacht wird, was ich hier nicht im Detail erläutern werde.

checkoutTimeout---Wenn der Verbindungspool erschöpft ist, wartet der Client nach dem Aufruf von getConnection() auf eine neue Verbindung. Nach Ablauf des Timeouts wird eine SQLException ausgelöst. Wenn der Wert auf 0 gesetzt ist, wird unbegrenzt gewartet. Die Einheit ist Millisekunden. Standardmäßig: 0
minPoolSize --- Die Mindestanzahl der im Verbindungspool beibehaltenen Verbindungen. Der Standardwert ist: 3
maxPoolSize: Die maximale Anzahl der im Verbindungspool beibehaltenen Verbindungen. Standardwert: 15
maxIdleTime---Maximale Leerlaufzeit. Wenn die Verbindung nicht innerhalb der eingestellten Zeit verwendet wird, wird sie verworfen. Wenn der Wert 0 ist, wird er nie verworfen. Standardwert: 0
maxIdleTimeExcessConnections---Standard: 0 Einheiten Diese Konfiguration wird hauptsächlich verwendet, um die Belastung des Verbindungspools zu reduzieren. Beispielsweise kann die Anzahl der Verbindungen im Verbindungspool aufgrund eines Spitzenwerts beim Datenzugriff viele Datenverbindungen erzeugen, aber die Anzahl der im darauffolgenden Zeitraum erforderlichen Datenbankverbindungen ist sehr gering. Zu diesem Zeitpunkt muss der Verbindungspool nicht so viele Verbindungen aufrechterhalten. Daher ist es notwendig, einige Verbindungen zu trennen und zu verwerfen, um die Belastung zu reduzieren. Der Wert muss kleiner als maxIdleTime sein. Wenn die Konfiguration ungleich 0 ist, wird die Anzahl der Verbindungen im Verbindungspool auf minPoolSize gehalten. Wenn der Wert 0 ist, wird acquireIncrement nicht verarbeitet – die Anzahl der Verbindungen, die c3p0 gleichzeitig erwirbt, wenn der Verbindungspool erschöpft ist. Standardwert: 3

4. Analyse virtueller Maschinen

Verwenden Sie den Befehl top, um die Speichernutzung der virtuellen Maschine anzuzeigen. Manchmal können Sie feststellen, dass der von der virtuellen Maschine belegte Speicheranteil zwar nicht groß ist, es aber eine offensichtliche Obergrenze gibt. Wir müssen die Konfiguration der virtuellen Maschine überprüfen.

Lösung (am Beispiel von Tomcat):

Der konkrete Wert hängt von der tatsächlichen Situation ab.

5. Datenbankanalyse (MySql)

Bei der Analyse einer Datenbank müssen viele Aspekte berücksichtigt werden. Hier sind nur einige der Situationen, die ich erlebt habe:

a. Maximale Anzahl von Verbindungen

Variablen wie „%max_connections%“ anzeigen; Maximale Anzahl an Verbindungen anzeigen; Status wie „Threads%“ anzeigen; Aktuelle Verbindungsnutzung

Threads_connected --- Anzahl offener Verbindungen

Threads_running --- Dieser Wert bezieht sich auf die Anzahl der aktiven Verbindungen, die im Allgemeinen viel niedriger ist als der verbundene Wert

Wenn der Wert für die maximale Anzahl von Verbindungen zu klein ist, können Sie ihn entsprechend der tatsächlichen Situation ändern. Im Allgemeinen kann er auf 1000 geändert werden. Es gibt zwei Möglichkeiten, ihn einzustellen:

1. Temporäre Einstellungen, werden nach einem Neustart des Dienstes ungültig

2. Ändern Sie die Datenbankkonfigurationsdatei

Fügen Sie in der Datei /etc/my.cnf unter [mysqld] eine Zeile hinzu oder löschen Sie sie: max_connections = 1000

b. Timeout-Steuerung

MySQL hat eine Eigenschaft namens „wait_timeout“, der Standardwert beträgt 28800 Sekunden (8 Stunden), der Wert von wait_timeout kann festgelegt werden, der Maximalwert kann jedoch nur 2147483 betragen, nicht größer. Dies entspricht ungefähr 24,85 Tagen, die mit dem Befehl „globale Variablen wie ‚wait_timeout‘ anzeigen“ angezeigt werden können.

Die Bedeutung von wait_timeout ist: Wenn eine Verbindung länger als 8 Stunden inaktiv ist, trennt Mysql die Verbindung automatisch. Einfach ausgedrückt: Wenn eine Verbindung 8 Stunden lang inaktiv ist, wird sie automatisch getrennt. Da dbcp nicht überprüft, ob die Verbindung gültig ist, treten bei der Verwendung zur Durchführung von Datenoperationen Ausnahmen auf.

Wenn das Problem durch die Timeout-Steuerung verursacht wird, ist es nicht empfehlenswert, den wait_timeout-Wert zu ändern. Das Problem kann gelöst werden, indem nach der Datenbankverbindungs-URL „&autoReconnect=true&failOverReadOnly=false“ hinzugefügt wird.

c. DNS-Rückwärtsauflösung

Wenn die MySQL-Datenbank eine Netzwerkverbindung empfängt, erhält sie zuerst die IP-Adresse der anderen Partei und führt dann eine umgekehrte DNS-Auflösung für die IP-Adresse durch, um den der IP-Adresse entsprechenden Hostnamen zu erhalten. Über den Hostnamen können Sie die Berechtigungen im Berechtigungssystem festlegen. Die umgekehrte DNS-Auflösung ist zeitaufwändig und kann dem Benutzer langsam erscheinen. Manchmal verweist der durch die umgekehrte Analyse aufgelöste Hostname nicht auf diese IP-Adresse und die Verbindung kann nicht erfolgreich sein. Sie können MySQL daran hindern, eine umgekehrte DNS-Auflösung in der Konfigurationsdatei durchzuführen, indem Sie dem Abschnitt [mysqld] von my.cnf die folgende Zeile hinzufügen:

skip-name-resolve (dasselbe für Windows und Linux)

d. Tabellen-Cache

globalen Status wie „open%tables%“ anzeigen; Anzahl der offenen Tische anzeigen:

open_tables: ist die Anzahl der derzeit im Cache geöffneten Tabellen.

opened_tables: ist die Anzahl der Tabellen, die seit dem Start von MySQL geöffnet wurden.

Wenn der Opened_tables-Wert sehr groß ist, bedeutet dies, dass der Cache zu klein ist, was zu häufigen Tabellenöffnungen führt. Sie können die aktuelle table_open_cache-Einstellung überprüfen:

Variablen wie 'table_open_cache' anzeigen; Obergrenze des Cache anzeigen

Es gibt zwei Möglichkeiten, den Wert von table_open_cache festzulegen (wenn der Server über etwa 4 GB Speicher verfügt, wird empfohlen, ihn auf 2048 festzulegen):

1. Temporäre Einstellungen, werden nach einem Neustart des Dienstes ungültig

setze globalen table_open_cache=2048;

2. Ändern Sie die Datenbankkonfigurationsdatei

Fügen Sie in der Datei /etc/my.cnf unter [mysqld] eine Zeile hinzu oder löschen Sie sie: table_open_cache = 2048

e. Langsames Abfrageprotokoll

Der Zweck der Aufzeichnung langsamer Abfrageprotokolle besteht darin, zu bestätigen, ob die langsame Antwort des Servers durch die langsame Ausführung bestimmter Anweisungen verursacht wird.

Ich werde nicht näher auf langsame Abfragen eingehen, davon gibt es im Internet eine Menge.

Letztendlich gibt es jedoch laut meiner tatsächlichen Projektanalyse kein Problem damit. Es ist die CPU von MongoDb, die direkt voll ist. Kommentieren Sie es einfach aus.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Detailliertes Tutorial zur Installation von Tomcat8.5 in einer Centos8.2-Cloud-Serverumgebung
  • Auf den Alibaba Cloud Server Tomcat kann nicht zugegriffen werden
  • Detaillierte Schritte zum Konfigurieren des Tomcat-Servers in IDEA 2020
  • Detaillierte Schritte zur Installation von JDK und Tomcat auf einem Linux-Cloud-Server (empfohlen)
  • Tomcat Server Erste Schritte Super ausführliches Tutorial

<<:  Verstehen Sie einfach die Unterschiede in den Prinzipien gängiger SQL-Delete-Anweisungen

>>:  Singleton-Entwurfsmuster in JavaScript

Artikel empfehlen

Pycharm2017 realisiert die Verbindung zwischen Python3.6 und MySQL

In diesem Artikel erfahren Sie, wie Sie Python3.6...

Detaillierte Analyse des Linux-NFS-Mechanismus anhand von Fällen

In Fortsetzung des vorherigen Artikels erstellen ...

Implementierungsschritte zum Erstellen eines FastDFS-Dateiservers unter Linux

Inhaltsverzeichnis 1. Softwarepaket 2. Installier...

So ändern Sie den Speicherort von Datendateien in CentOS6.7 mysql5.6.33

Problem: Die Partition, in der MySQL Datendateien...

Detailliertes Beispiel zum Beheben der Tablespace-Fragmentierung in MySQL

Detailliertes Beispiel zum Beheben der Tablespace...

Grafisches Beispiel für die Verwaltung von Datenträgerkontingenten unter Linux

Das Datenträgerkontingent ist die Speichergrenze ...

Detaillierter Installationsprozess der MySQL 8.0 Windows-ZIP-Paketversion

Der Installationsprozess von MySQL 8.0 Windows Zi...

Vue-Handschrift-Ladeanimationsprojekt

Wenn die Seite nicht reagiert, ist die Anzeige de...

So installieren und konfigurieren Sie den SSH-Dienst in Ubuntu 18.04

Installieren Sie das SSH-Tool 1. Öffnen Sie das T...

Probleme mit Join-Abfragen und Unterabfragen in MySQL

Inhaltsverzeichnis Grundlegende Syntax für Multi-...

Wissen Sie, wie Sie das Flash-Wmode-Attribut in Webseiten verwenden?

Bei der Webentwicklung kann es vorkommen, dass Fl...