Wissensbasis Einfache Anweisungen zur Arbeit mit dem Profitserver-Dienst
Main Wissensbasis Reduzierung der Serverlast

Reduzierung der Serverlast


In diesem Artikel untersuchen wir die Ursachen für erhöhte Serverlast und diskutieren verschiedene Möglichkeiten zur Optimierung hochbelasteter Prozesse. Besonderes Augenmerk wird auf die Codeoptimierung in Apache/Nginx und MySQL gelegt. Wir sprechen über Caching als Hilfstool und betrachten auch mögliche externe Bedrohungen wie DDOS-Angriffe und deren Abwehr.

Warum Serverlast auftritt

Bevor Sie mit der Serveroptimierung beginnen, ist eine gründliche Analyse der aktuellen Ressourcenauslastung erforderlich. Dazu gehört die Messung der CPU-Auslastung, der RAM-Nutzung, der Netzwerkaktivität und anderer wichtiger Parameter. Das Verständnis der Dynamik und der Spitzenlasten ermöglicht es, Engpässe zu identifizieren und die Ressourcenzuweisung zu optimieren. Dies erhöht die Stabilität und Leistung der Serverinfrastruktur.

Zur ersten Fehlerbehebung bei hoher Serverlast empfehlen wir eine allgemeine Serverdiagnose . Reicht diese nicht aus, ist eine detailliertere Ressourcenanalyse erforderlich. Die Protokolle des Linux- Servers können dabei hilfreich sein, da sich die Problemursache in den meisten Fällen dort befindet.

Optimierung des Apache/Nginx-Servers

Erhöhte Serverlast durch Indizierung

Eine erhöhte Serverlast durch die Indexierung kann beispielsweise auftreten, wenn Suchmaschinen eine große Anzahl von Seiten Ihrer Website scannen. Dies kann zu einer erhöhten Servernutzung und damit zu einer Verlangsamung der Website-Leistung führen. Die Ursache lässt sich relativ einfach ermitteln: Öffnen Sie die Datei unter:

/var/www/httpd-logs/sitename.access.log

Bei der Indexierung durch Suchmaschinen werden dem Benutzer Einträge folgender Art angezeigt:

11.22.33.44 - - [Date and Time] "GET /your-page-path HTTP/1.1" 200 1234 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"

Als erste Möglichkeit zur Reduzierung der Seitenlast können Sie die Meta-Tags „noindex“ und „nofollow“ auf Seiten setzen , die nicht indexiert werden müssen. Die zweite Möglichkeit ist die .htaccess- Datei, in der Einträge für die jeweiligen Suchmaschinen hinzugefügt werden müssen, beispielsweise um Seiten vor Yandex und Google zu verbergen.

SetEnvIfNoCase User-Agent "^Yandex" search_bot
SetEnvIfNoCase User-Agent "^Googlebot" search_bot
Order Allow,Deny
Allow from all
Deny from env=search_bot

Ähnliche Anpassungen sind auch für andere Suchmaschinen erforderlich. Es ist wichtig zu beachten, dass die Funktionen von .htaccess nicht nur die Blockierung der Indexierung umfassen. Wir empfehlen, sich im Artikel näher mit den wichtigsten Funktionen vertraut zu machen.

Verwenden der Caching-Einstellungen

Falsche Caching-Einstellungen auf dem Server können ebenfalls zu hoher Serverlast führen. Um diesen Parameter zu optimieren, müssen entsprechende Änderungen in den Konfigurationsdateien oder der .htaccess- Datei vorgenommen werden . Bei Apache ist die .htaccess-Datei vorzuziehen, bei Nginx die .htaccess-Datei.

Auf einem Apache -Server müssen Sie die .htaccess- Datei öffnen und folgenden Code einfügen:

<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf|doc|docx)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>

Aktivieren Sie anschließend das Expires- Modul mit folgendem Befehl:

sudo a2enmod expires

Starten Sie anschließend den Webserver neu:

sudo service apache2 restart

Und aktivieren Sie das Modul durch Angabe von:

ExpiresActive On

Auf einem Nginx -Server genügt es, den folgenden Code zur Konfigurationsdatei hinzuzufügen:

location ~* .(jpg|jpeg|gif|png|ico|css|swf|flv|doc|docx)$ {
root /var/www/yoursite.com;
}

Und führen Sie einen Service-Neustart durch:

sudo service nginx restart

Beachten Sie, dass bei diesen Einstellungen die Allow- und Deny -Direktiven umgangen werden.

Verwenden der Datenkomprimierung

Die Aktivierung der Datenkomprimierung mit Gzip auf Apache- und Nginx-Webservern trägt dazu bei, die zwischen Server und Client übertragene Datenmenge zu reduzieren, was die Leistung verbessert und die Ladezeit von Webseiten verkürzt.

Um Gzip auf Apache zu aktivieren , müssen Sie das Modul mod_deflate aktivieren:

sudo a2enmod deflate

Starten Sie anschließend den Webserver neu:

sudo service apache2 restart

Und schließlich fügen Sie der Konfigurationsdatei bzw. .htaccess den folgenden Block hinzu:

<IfModule mod_deflate.c>
# Configure compression for specified file types
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript application/json

# If the browser matches the specified pattern, apply compression only to text/html files
BrowserMatch ^Mozilla/4 gzip-only-text/html

# If the browser matches the specified version patterns of Mozilla 4.0.6, 4.0.7, 4.0.8, disable compression
BrowserMatch ^Mozilla/4\.0[678] no-gzip

# If the browser is MSIE (Internet Explorer), disable compression for all files except text/html
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

# If the request contains the specified pattern (extensions of image files), disable compression
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip
</IfModule>

Diese Konfiguration aktiviert die Komprimierung für bestimmte Dateitypen und deaktiviert sie für Bilder.

Bei Nginx erfolgt die Konfiguration im http- Block der Konfigurationsdatei. Folgender Code muss hinzugefügt werden:

gzip on;
gzip_disable "msie6";

# Adds the Vary header, indicating that the response may change depending on the Accept-Encoding header value
gzip_vary on;

# Enables compression for any proxy servers
gzip_proxied any;

# Sets the compression level. A value of 6 provides a good balance between compression efficiency and resource use
gzip_comp_level 6;

# Sets the size of the buffer for compressed data (16 buffers of 8 kilobytes each)
gzip_buffers 16 8k;

# Specifies that data compression should be used only for HTTP version 1.1 and higher
gzip_http_version 1.1;

# Sets the file types that can be compressed
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

Ähnlich wie bei Apache werden hier die Komprimierungsparameter für bestimmte Dateitypen festgelegt. Nach Änderungen an einem der Webserver ist ein Neustart des Dienstes erforderlich.

sudo service apache2 restart

Or

sudo service nginx restart

DDOS-Angriff auf den Server

Eine hohe Serverauslastung kann durch einen DDoS-Angriff entstehen. Ein DDoS-Angriff lässt sich durch die Überwachung eines plötzlichen Anstiegs des Datenverkehrs, abnormaler Anfragen und Leistungseinbrüche des Servers erkennen. Auch die Überprüfung von Protokollen auf wiederholte Anfragen von einer IP-Adresse oder Port-Scans kann auf einen möglichen DDoS-Angriff hinweisen. Es gibt viele Schutzmaßnahmen, wir werden jedoch nur die Grundlagen erläutern.

Durch den Einsatz eines CDN (Content Delivery Network) kann die Belastung für Ihre Nutzer reduziert werden. Ein CDN fungiert als Vermittler zwischen Ihrem Webserver und den Nutzern, verteilt den Datenverkehr und speichert Inhalte zwischen, um die Auswirkungen eines DDoS-Angriffs abzumildern. CDNs verfügen oft über integrierte DDoS-Schutzmechanismen, darunter Lastverteilung und Datenverkehrsfilterung.

Konfiguration von Firewalls und Intrusion-Detection-Systemen (IDS/IPS) . Firewalls lassen sich so konfigurieren, dass sie den Datenverkehr anhand verschiedener Kriterien wie IP-Adressen und Ports filtern. IDS/IPS erkennen ungewöhnliches Datenverkehrsverhalten und blockieren verdächtige Verbindungen. Diese Tools eignen sich hervorragend, um potenziell schädlichen Datenverkehr zu verfolgen und zu blockieren.

Konfigurieren von Apache- und Nginx-Webservern, um die Auswirkungen von DDoS-Angriffen zu mildern.

Als Lösung für Apache aktivieren wir das Modul mod_evasive . Dazu entfernen Sie die Kommentarzeichen vor der folgenden Zeile in der Konfigurationsdatei httpd.conf oder apache2.conf bzw. fügen diese hinzu:

LoadModule evasive20_module modules/mod_evasive.so

In derselben Datei müssen Sie einen Einstellungsblock hinzufügen:

<IfModule mod_evasive20.c>
# Hash table size for storing request information
DOSHashTableSize 3097

# Number of requests to one page before activating protection
DOSPageCount 2
DOSPageInterval 1

# Number of requests to all pages before activating protection
DOSSiteCount 50
DOSSiteInterval 1

# Blocking period in seconds for IP addresses
DOSBlockingPeriod 10
</IfModule>

Analog aktivieren wir das Modul mod_ratelimit :

LoadModule ratelimit_module modules/mod_ratelimit.so

Und fügen Sie die Konfiguration hinzu:

<IfModule mod_ratelimit.c>
# Setting the output filter for rate limiting (Rate Limit)
SetOutputFilter RATE_LIMIT

# Beginning of the settings block for the location "/login"
<Location "/login">

# Setting the environment variable rate-limit with a value of 1
SetEnv rate-limit 1

# Ending of the settings block for the location "/login"
</Location>
</IfModule>

Die Konfiguration von Nginx ähnelt der von Apache . In der Konfigurationsdatei nginx.conf müssen die folgenden Direktiven verwendet werden:

http {
...
# Defining a zone for connection limits
limit_conn_zone $binary_remote_addr zone=addr:10m;

# Defining a zone for request limits
limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;

server {
        ...
        # Configuring connection limits
        limit_conn addr 10;

        # Configuring request limits
        limit_req zone=req_zone burst=5;

        ...
    }
}

Nachdem Sie Änderungen an den einzelnen Diensten vorgenommen haben, müssen diese neu geladen werden:

sudo systemctl restart apache2

Oder:

sudo systemctl restart nginx

Diese Beispiele stellen nur eine Grundkonfiguration dar, die je nach spezifischen Anforderungen und Art der Angriffe weiter angepasst werden kann.

Optimieren von MySQL-Abfragen

Die Optimierung von MySQL-Datenbankabfragen auf einem Webserver kann auf verschiedene Weise erfolgen, unter anderem durch die korrekte Konfiguration der Konfigurationsdatei. Diese Datei heißt üblicherweise my.cnf oder my.ini und befindet sich im Verzeichnis /etc/ oder /etc/mysql/ . Öffnen Sie die Datei und nehmen Sie die folgenden Änderungen vor:

[mysqld]
# Location of the file for recording slow queries. Be sure to replace it with your path
log-slow-queries = /var/log/mariadb/slow_queries.log

# Threshold time for considering slow queries (in seconds)
long_query_time = 5

# Enabling recording of queries that do not use indexes
log-queries-not-using-indexes = 1

# Disabling query caching
query_cache_size = 0
query_cache_type = 0
query_cache_limit = 1M

# Size of temporary tables
tmp_table_size = 16M
max_heap_table_size = 16M

# Size of the thread cache
thread_cache_size = 16

# Disabling name resolving
skip-name-resolve = 1

# Size of the InnoDB buffer pool. Set to 50-70% of available RAM
innodb_buffer_pool_size = 800M

# Size of the InnoDB log file
innodb_log_file_size = 200M

Lassen Sie uns auch zusätzliche Empfehlungen berücksichtigen, die die Interaktion mit der Serverdatenbank erleichtern können:

  1. Verwenden Sie die ERKLÄREN Befehl vor einer SQL-Abfrage, um deren Ausführung zu analysieren. Dadurch erhalten Sie einen Ausführungsplan für die Abfrage und können feststellen, welche Indizes verwendet, welche Tabellen gescannt usw. werden.
  2. Indizes beschleunigen die Datensuche, sodass richtig gestaltete Indizes die Abfrageleistung erheblich verbessern können. Achten Sie auf Spalten, die häufig verwendet werden in WO or JOIN Gesundheitsproblemen.
  3. Vermeide das Benutzen SELECT *. Geben Sie nur die Spalten an, die für Ihre Abfrage wirklich erforderlich sind, anstatt alle Spalten in einer Tabelle auszuwählen.
  4. Vermeiden Sie die Verwendung von Funktionen in WO Bedingungen. Mithilfe von Funktionen (wie NIEDER, UPPER, LINKS, RECHTS) in WO Bedingungen können Indizes unbrauchbar machen. Vermeiden Sie deren direkte Verwendung in Bedingungen.
  5. Arbeiten jederzeit weiterbearbeiten können. Jede Präsentation und jeder KI-Avatar, den Sie von Grund auf neu erstellen oder hochladen, INNER JOIN wo möglich, da dies in der Regel effizienter ist. Stellen Sie außerdem sicher, dass die entsprechenden Spalten zum Verknüpfen über Indizes verfügen.
  6. Arbeiten jederzeit weiterbearbeiten können. Jede Präsentation und jeder KI-Avatar, den Sie von Grund auf neu erstellen oder hochladen, LIMIT um die Anzahl der zurückgegebenen Zeilen zu beschränken, wenn Sie nur eine bestimmte Anzahl von Ergebnissen erhalten müssen.
  7. Erwägen Sie das Zwischenspeichern von Abfrageergebnissen, insbesondere wenn diese sich selten ändern, um die Serverlast zu verringern.

Der Mailserver verursacht eine hohe Belastung des Servers

In diesem Abschnitt erfahren Sie, wie Sie eine hohe Auslastung Ihres Mailservers feststellen und wie Sie dessen Betrieb optimieren können. Dazu gehören die Überprüfung der Nachrichtenwarteschlange und die Konfiguration der Serverparameter. Beginnen Sie mit der Überprüfung der Nachrichtenwarteschlange. Das Dienstprogramm mailq kann Ihnen dabei helfen. Um es zu aktivieren, geben Sie den entsprechenden Befehl im Terminal ein:

mailq

Dadurch wird eine Liste der Nachrichten in der Warteschlange angezeigt, sofern vorhanden. Jede Nachricht wird mit ihrer eindeutigen Kennung und Informationen zum Sendestatus angezeigt. Ein ähnliches Ergebnis erhalten Sie durch die Überprüfung der E-Mail-Client-Protokolle.

In den meisten Fällen entsteht eine hohe Auslastung, wenn der Server kompromittiert wird und Spam versendet wird. Wenn der Administrator jedoch nach der Überprüfung sicher ist, dass der Server nicht von außen angegriffen wurde und die Benutzer den Spam nicht vernachlässigen, ist es an der Zeit, den Mailserver zu optimieren. Hier sind die Schritte, die dabei helfen:

  1. Stellen Sie sicher, dass die DNS-Einträge Ihrer Domäne korrekt konfiguriert sind, einschließlich SPF, DKIM und DMarc Datensätze zur Verbesserung der E-Mail-Zustellung und zum Schutz vor Spam. Die korrekte Konfiguration der Parameter finden Sie im Artikel über Mailserver-Diagnose.
  2. Überprüfen Sie die Netzwerkeinstellungen, einschließlich der Firewall-Konfiguration und Routing-Regeln, um Blockierungen zu vermeiden und die E-Mail-Zustellung zu beschleunigen.
  3. Konfigurieren Sie die Parameter der Nachrichtenwarteschlange entsprechend der Serverauslastung. Dies kann das Festlegen der maximalen Warteschlangengröße und von Timeouts umfassen.
  4. Berücksichtigen Sie die Lösungen, die wir zuvor in diesem Artikel besprochen haben. Optimieren Sie regelmäßig die Mailserver-Datenbank, um die Leistung zu verbessern, und nutzen Sie Caching-Mechanismen, um die Datensuche und -verarbeitung zu beschleunigen, beispielsweise DNS-Abfragen.
  5. Wenn der Mailserver immer noch regelmäßig stark ausgelastet ist, sollten Sie Skalierungsoptionen in Betracht ziehen, beispielsweise die Verwendung eines Mailserver-Clusters oder von Cloud-Lösungen.

Fazit

Eine erhöhte Serverlast wirkt sich direkt auf die Ladegeschwindigkeit der Website aus und beeinträchtigt letztendlich das Benutzererlebnis und die Reputation in Suchmaschinen. Daher spielt die effektive Verwaltung dieser Last eine Schlüsselrolle, um die kontinuierliche Funktionalität der Ressource sicherzustellen und ihre Zugänglichkeit für Besucher zu verbessern.

❮ Vorheriger Artikel Certbot: Installieren des Let’s Encrypt-Zertifikats
Nächster Artikel ❯ Serverlastdiagnose

Fragen Sie uns nach VPS

Wir stehen Ihnen jederzeit und rund um die Uhr für Ihre Fragen zur Verfügung.