Das CloudLinux-Betriebssystem unterstützt die Begrenzung folgender Ressourcen:
| Limit | Einheit | Standardwert | Beschreibung |
|---|---|---|---|
| SPEED | ein Prozent eines Kerns oder Hz | 100% | CPU-Geschwindigkeitsbegrenzung, bezogen auf einen einzelnen Kern oder angegeben in Hz. |
| PMEM | KB | 1024 MB | Physikalische Speichergrenze (RSS ps/RES top). Umfasst sowohl den gemeinsam genutzten Speicher als auch den Festplatten-Cache. |
| VMEM1 | KB | 0 | Grenzwert für den virtuellen Speicher (VSZ in der Ausgabe von „ps“ oder VIRT in der Ausgabe von „top“) |
| IO | KB/s | 1024 KB/s | IO-Geschwindigkeit – die Kombination aus Lese- und Schreibvorgängen |
| IOPS | Operationen pro Sekunde | 1024 | Begrenzen Sie die Anzahl der Lese-/Schreibvorgänge pro Sekunde. |
| NPROC | Stück | 100 | Maximale Anzahl von Prozessen innerhalb der LVE |
| EP | Stück | 20 | Begrenzung der Zugangsvorgänge. In der Regel bezieht sich dies auf die maximale Anzahl gleichzeitiger Verbindungen für dynamische Apache-Skripte sowie für SSH und gleichzeitig ausgeführte Cron-Jobs. |
Im Folgenden finden Sie Empfehlungen für typische Einstellungen bei Shared Hosting-Konten. Diese Empfehlungen sind nicht von der Serverleistung abhängig. Sie hängen lediglich davon ab, wie „schnell“ Ihre Hosting-Konten sein sollen.
| Limit | Durchschnittliches Webhosting-Konto | Konto mit höherer Leistung |
|---|---|---|
| SPEED | 100% | 200% |
| PMEM | 1 GB | 2 GB |
| VMEM | 0 | 0 |
| IO | 1024 KB/s | 4096 KB/s |
| IOPS | 1024 | 1024 |
| NPROC | 100 | 150 |
| EP | 20 | 40 |
Erläuterung der Limits
LVE ist eine Technologie auf Kernel-Ebene, die vom CloudLinux-Team entwickelt wurde. Die Technologie hat ihre Wurzeln in der containerbasierten Virtualisierung und nutzt in ihrer neuesten Version cgroups. Sie ist ressourcenschonend und transparent. Das Ziel von LVE ist es, zu verhindern, dass eine einzelne Website Ihren Webserver zum Absturz bringt.
Ohne LVE kann bereits eine einzige Website die gesamten CPU-, E/A- und Speicherressourcen sowie alle Apache-Prozesse beanspruchen – und den Server zum Absturz bringen. LVE verhindert dies. Dies geschieht durch das Zusammenspiel des Apache-Moduls, des PAM-Moduls und des Kernels.
mod_hostinglimits ist ein Apache-Modul, das:
- erkennt den VirtualHost, von dem die Anfrage stammt;
- erkennt, ob es sich um ein CGI- oder PHP-Skript handelt;
- Der zur Bearbeitung der Anfrage verwendete Apache-Prozess wird für den durch die Anweisung „SuexecUserGroup“ festgelegten Benutzer in die LVE des jeweiligen virtuellen Hosts verschoben;
- Lassen Sie Apache die Anfrage bearbeiten;
- Entfernt den Apache-Prozess aus dem LVE des Benutzers.
Der Kernel sorgt dafür, dass jede LVE einen angemessenen Anteil an den Serverressourcen erhält und dass kein einzelner Kunde mehr als die für den jeweiligen Kunden festgelegten Grenzwerte in Anspruch nehmen kann. Die CPU-Leistung, der Arbeitsspeicher (virtuell und physisch), die E/A-Leistung, die Anzahl der Prozesse sowie die Anzahl der eingehenden Prozesse (gleichzeitige Verbindungen zu Apache) können begrenzt werden.
Jedes LVE begrenzt die Anzahl der eingehenden Prozesse (Apache-Prozesse, die in das LVE eintreten), um zu verhindern, dass eine einzelne Website alle Apache-Prozesse beansprucht. Wird das Limit erreicht, kann mod_hostinglimits keine Apache-Prozesse mehr in der LVE unterbringen und gibt den Fehlercode 508 zurück. Auf diese Weise werden sehr ressourcenintensive Websites verlangsamt und beginnen, Fehler 508 zu senden, ohne dass dies Auswirkungen auf die übrigen Nutzer hat.
- Wenn die Website durch die CPU- oder E/A-Leistung eingeschränkt wird, reagiert sie langsamer.
- Wenn die Website durch den Arbeitsspeicher oder die Anzahl der Prozesse eingeschränkt ist, erhält der Benutzer einen 500- oder 503-Fehler, der darauf hinweist, dass der Server das Skript nicht ausführen kann.
Überprüfung der LVE-Installation
Für die Nutzung von LVE sind ein installiertes CloudLinux-Betriebssystem mit Shared-Kernel sowie ein geladenes LVE-Modul erforderlich. Sie können den Kernel überprüfen, indem Sie den folgenden Befehl ausführen:
uname -r
Sie sollten etwas Ähnliches wie „4.18.0-425.3.1.lve.1.el8.x86_64“ sehen. Im Namen des Kernels muss „lve“ enthalten sein. Wenn Sie überprüfen möchten, ob das lve-Kernelmodul geladen wurde, führen Sie folgenden Befehl aus:
$ lsmod|grep lve
kmodlve 34320384 11
LVE-Limits festlegen
Die beste Methode zur Überprüfung der LVE-Werte ist die Verwendung des LVE-Managers, den Sie in Ihrem bevorzugten Control Panel (z. B. cPanel) finden. Alternativ können Sie auch das Befehlszeilentool „lvectl“ zur Steuerung der Grenzwerte verwenden. Die Grenzwerte werden in der Datei „/etc/container/ve.cfg“ gespeichert.
<?xml version="1.0" ?>
<lveconfig>
<defaults>
<cpu limit="25"/>
<ncpu limit="1"/>
<io limit="1024"/>
<mem limit="262144"/>
<other maxentryprocs="200"/>
<pmem limit="262144"/>
<nproc limit="0"/>
</defaults>
<lve id="532">
<cpu limit="30"/>
<ncpu limit="5"/>
</lve>
</lveconfig>
Die oben genannten Werte begrenzen die CPU-Auslastung auf 25 %, die E/A-Rate auf 1024 KB/s und den virtuellen Speicher auf 1 GB (die Speicherbegrenzung ist als Anzahl von 4096-Byte-Seiten festgelegt, daher muss der Wert mit 4096 multipliziert werden), die physische Speicherbegrenzung auf 1 GB, die Anzahl der CPU-Kerne pro LVE auf 1, die maximale Anzahl der Entry-Prozesse auf 200 und die Anzahl der Prozesse wird für alle LVEs nicht begrenzt. Für das LVE mit der Kennung 532 werden eine CPU-Begrenzung von 30 % und 5 CPU-Kerne festgelegt.
Hinweis: Die im Beispiel genannten Grenzwerte für CPU (cpu) und CPU-Kerne (ncpu) sind veraltet; an ihrer Stelle wird nun der SPEED-Grenzwert verwendet.
Geschwindigkeitsbegrenzung
Mit der Option „CPU SPEED limit“ können Sie die CPU-Auslastung als Prozentsatz eines Kerns oder als festen Hz-Wert festlegen.
Mit „--speed=XX%“ würden Sie die Leistung im Verhältnis zu einem Kern festlegen.
Beispiel:
- –speed=50% Dies entspräche 1/2 CPU-Kern.
- –speed=100% Dies entspräche 1 Kern,
- –speed=150% Dies entspräche 1,5 Kernen.
- –speed=XXmhz erkennt automatisch die CPU-Geschwindigkeit der einzelnen Kerne und passt den CPU-Scheduler so an, dass der Nutzer diese Grenze nicht überschreiten kann.
Bei einer 1-GHz-CPU würde die Einstellung „–speed=2ghz“ beispielsweise 2 Kerne bedeuten, während dieselbe Einstellung bei einer 4-GHz-CPU 1/2 Kern bedeuten würde.
Dies würde es Hosting-Anbietern ermöglichen, für unterschiedliche Hardwarekonfigurationen mit einer einzigen Einstellung annähernd identische Leistungsgrenzen festzulegen.
Hinweis: Wir empfehlen dringend, die CPU-Geschwindigkeitsbegrenzungen nicht auf weniger als 100 % einzustellen. Denn solche Begrenzungen verursachen CPU-Kontextwechsel, was zu einem erhöhten %sys-Wert führt.
Physikalische Speichergrenze
Die physische Speichergrenze entspricht der tatsächlich von den Endbenutzerprozessen genutzten Speichermenge. Die physische Speichernutzung der einzelnen Prozesse können Sie anhand der Spalte „RES“ im oberen Bereich der Prozessausgabe einsehen. Da sich ähnliche Prozesse (z. B. PHP) viel Speicher teilen, ist die physische Speichernutzung oft deutlich geringer als die virtuelle Speichernutzung.
Darüber hinaus umfasst der physische Arbeitsspeicher sowohl den vom Kunden genutzten gemeinsam genutzten Speicher als auch den Festplatten-Cache. Im Falle des Festplatten-Caches wird – wenn einem Nutzer der physische Arbeitsspeicher ausgeht – der für den Festplatten-Cache verwendete Speicher freigegeben, ohne dass dies zu Speicherfehlern führt.
Wenn die LVE die Grenze des physischen Arbeitsspeichers überschreitet, gibt das CloudLinux OS Shared zunächst den für den Cache verwendeten Speicher frei; reicht dies nicht aus, werden einige Prozesse innerhalb der betreffenden LVE beendet und der fPMEM-Zähler erhöht. Dies führt in der Regel dazu, dass der Webserver die Fehler 500 und 503 ausgibt. Die physische Speicherbegrenzung ist eine weitaus bessere Methode zur Speicherbegrenzung bei Shared Hosting.
IO
Die E/A-Beschränkungen begrenzen die Zugriffsleistung auf die Festplatte des Kunden. Diese werden in KB/s angegeben. Wenn der Grenzwert erreicht wird, werden die Prozesse gedrosselt (in den Ruhezustand versetzt). Dadurch wird sichergestellt, dass die Prozesse innerhalb der LVE das Limit nicht überschreiten. Sie werden jedoch weder unterbrochen noch beendet – sie arbeiten lediglich langsamer, sobald die Grenze erreicht ist.
Die IO-Beschränkungen betreffen ausschließlich die DISK-IO und haben keine Auswirkungen auf das Netzwerk. Auch Zugriffe auf den Festplatten-Cache werden nicht berücksichtigt. Selbst wenn eine Datei also 1.000 Mal aus dem Festplatten-Cache geladen wird, wird dies nicht auf die IO-Beschränkungen angerechnet.
IOPS
Die IOPS-Beschränkungen begrenzen die Gesamtzahl der Lese- und Schreibvorgänge pro Sekunde. Bei Erreichen des Grenzwerts werden die Lese- und Schreibvorgänge bis zum Ablauf der aktuellen Sekunde unterbrochen.
Eintragsprozesse
Die Begrenzung der „Zugriffsprozesse“ (Entry processes) regelt die Anzahl der Zugriffe auf die LVE. Jedes Mal, wenn ein Prozess in die LVE „eintritt“, erhöht sich der Zähler; beim Verlassen der LVE verringert er sich. Prozesse, die innerhalb der LVE erstellt werden, werden nicht mitgezählt. Diese Begrenzung ist auch als „Apache concurrent connections“ (gleichzeitige Apache-Verbindungen) bekannt.
Der Prozess wird in die LVE aufgenommen, sobald eine neue HTTP-Anfrage für CGI/PHP eingeht.
Diese Beschränkung wurde eingeführt, um DoS-Angriffe auf den Webserver zu verhindern. Eine besonders verbreitete Angriffsmethode besteht darin, alle Apache-Verbindungen zu blockieren, indem eine der langsamen Seiten des Servers aufgerufen wird. Sobald alle Apache-Sockets belegt sind, kann niemand mehr eine Verbindung zum Webserver herstellen, sodass dieser als ausgefallen erscheint. Das Problem wird durch CPU-Beschränkungen noch verschärft, denn wenn die Seite aufgrund der CPU-Beschränkung langsamer wird, reagiert sie immer langsamer auf Anfragen, was dazu führt, dass immer mehr Sockets belegt werden.
Um dieses Problem zu beheben, wurde eine Begrenzung der Anmeldevorgänge (oft als parallele Verbindungen bezeichnet) eingeführt. Diese begrenzt die Anzahl der gleichzeitigen Verbindungen zu Apache, was dazu führt, dass der Webserver die Fehlermeldung 508 („Resource Limit Reached“) ausgibt, sobald die Anzahl der gleichzeitigen Anfragen an die Website das Limit überschreitet.
Bei der Arbeit mit dem LiteSpeed-Webserver unterscheidet sich die Umsetzung der Zugriffsbeschränkungen von der in Apache.
Wenn also bei gleicher Auslastung durch gleichzeitige Anfragen für Apache und LiteSpeed die Begrenzung der gleichzeitigen Verbindungen je nach Webserver unterschiedlich ausfallen kann.
Bei LiteSpeed steigt die „Entry processes limit“-Einstellung mit der Anzahl der lsphp-Master-Prozesse. Wenn der Webserver beispielsweise im Cluster-Modus nur einen lsphp-Master-Prozess startet, erzeugt dieser Prozess zur Bearbeitung der Anfragen Kindprozesse, ohne dass sich die „Entry processes limit“-Einstellung erhöht.
Wenn Sie die Begrenzung der gleichzeitigen Verbindungen mithilfe von LiteSpeed einrichten möchten, können Sie die standardmäßigen Webserver-Tools verwenden, wie beispielsweise „https://docs.litespeedtech.com/cp/cpanel/antiddos/#connection-throttling“.
Anzahl der Prozesse
NPROC regelt die Gesamtzahl der Prozesse und Threads innerhalb der LVE. Nach Erreichen des Limits kann kein neuer Prozess mehr erstellt werden (solange nicht ein anderer beendet wird). Wenn dies geschieht, erhöht sich der NPROC-Zähler. Apache kann in einem solchen Fall einen 500- oder 503-Fehler zurückgeben.
Inodes
Das Plugin „LVE Manager – Inode-Limits“ ermöglicht es den Kunden, die Inode-Limits festzulegen. Ein Inode ist eine Datenstruktur eines Dateisystems, die zur Speicherung der Informationen einer Datei oder eines Ordners dient. Die Anzahl der Inodes gibt an, wie viele Dateien und Ordner sich in einem Konto befinden. Das Inode-Limit funktioniert auf der Ebene der Festplattenkontingente und ist nur auf der /home-Partition aktiviert. Die Funktion ist in den Control Panels cPanel, Plesk und DirectAdmin verfügbar.
Mit dem LVE-Manager können Sie das Soft- und Hard-Inode-Limit einstellen.
- Das Hard-Limit verhindert, dass der Benutzer Daten auf die Festplatte schreibt.
- Das Soft-Limit darf für einen bestimmten Zeitraum überschritten werden. Die Toleranzfrist beträgt standardmäßig sieben Tage und kann mit dem Befehl „
edquota -t“ angepasst werden. Nach Ablauf der Toleranzfrist darf der Nutzer keine neuen Dateien mehr erstellen.
Die Inode-Limits lassen sich im LVE-Manager genauso einstellen wie jedes andere LVE-Limit.
Kompatibilitätsmatrix
| Webserver / PHP | CPU | Virtueller und physischer Arbeitsspeicher | EP | NPROC | IO | CageFS | PHP-Auswahl |
|---|---|---|---|---|---|---|---|
| Apache / suPHP | Ja | Ja | Ja | Ja | Ja | Ja | Ja |
| Apache / FCGID | Ja | Ja | Ja | Ja | Ja | Ja | Ja |
| Apache / CGI | Ja | Ja | Ja | Ja | Ja | Ja | Ja |
| Apache / PHP-FPM | Ja2 | Ja | Ja | Ja | Ja | Ja2 | Nein |
| Apache / mod_php (DSO) | Ja | Nein | Ja | Ja | Ja | Nein | Nein |
| Apache / mod_ruid2 | Ja | Nein | Ja | Ja | Ja | Nein | Nein |
| Apache / MPM ITK | Ja | Nein | Ja | Ja | Ja | Ja3 | Nein |
| LiteSpeed | Ja | Ja | Ja | Ja | Ja | Ja | Ja |
| NGINX / PHP-FPM | Ja2 | Ja | Nein | Ja | Ja | Ja | Nein |
| SSH | Ja | Ja | Ja | Ja | Ja | Ja2 | Ja |
| Cron | Ja | Ja | Ja | Ja | Ja | Ja | Ja |
| Apache / mod_lsapi | Ja | Ja | Ja | Ja | Ja | Ja | Ja |
Hinweis: Bitte beachten Sie, dass mod_lsapi nicht funktioniert, wenn php-fpm aktiviert ist, da php-fpm ebenso wie mod_lsapi ein PHP-Handler ist.
Anmerkung: mod_lsapi ist ein Apache-Modul, während LiteSpeed eine eigenständige Lösung ist und kein einziges Apache-Modul verwendet (da es eine eigene Implementierung dieser Module bereitstellt). Darüber hinaus ist es ratsam, die Apache-Konfiguration unverändert zu lassen, für den Fall, dass Sie sich entscheiden sollten, von LiteSpeed wieder zurückzuwechseln.
-
Es ist immer besser, die VMEM-Grenzwerte in Ihrem System vollständig zu deaktivieren (auf 0 zu setzen), da es sich hierbei um eine veraltete Einstellung handelt, die zu unerwarteten Fehlern führen kann. ↩
-
PHP-Binärdateien, die nicht aus dem DirectAdmin/CloudLinux-Betriebssystem stammen, müssen mit den CloudLinux-Patches neu kompiliert werden. ↩ ↩2 ↩3 ↩4
-
Die gepatchte Version von MPM-ITK ist erforderlich. Das CL-httpd-RPM enthält den ITK-Worker zusammen mit der entsprechenden Änderung. ↩
