SYSTEM INFORMATION
Betriebssystemtyp und -version
*Ubuntu Linux 20.04.4
Virtualmin Version 6.17-3*
Ich bin alleiniger Eigentümer meines Servers und aller virtuellen Server. Ich möchte die von den Servern verwendeten Ressourcen begrenzen. Derzeit richte ich die RAM-Nutzung ein, indem ich die Datei limits.conf wie folgt bearbeite:
einer meiner Benutzer hat einen harten Speichersperrcode 1024
Jetzt bin ich verwirrt wegen der CPU-Option in den Beispielcodes -
#Where:
#<domain> can be:
# - a user name
# - a group name, with @group syntax
# - the wildcard *, for default entry
# - the wildcard %, can be also used with %group syntax,
# for maxlogin limit
# - NOTE: group and wildcard limits are not applied to root.
# To apply a limit to the root user, <domain> must be
# the literal username root.
#
#<type> can have the two values:
# - "soft" for enforcing the soft limits
# - "hard" for enforcing hard limits
#
#<item> can be one of the following:
# - core - limits the core file size (KB)
# - data - max data size (KB)
# - fsize - maximum filesize (KB)
# - memlock - max locked-in-memory address space (KB)
# - nofile - max number of open file descriptors
# - rss - max resident set size (KB)
# - stack - max stack size (KB)
# - cpu - max CPU time (MIN)
# - nproc - max number of processes
# - as - address space limit (KB)
# - maxlogins - max number of logins for this user
# - maxsyslogins - max number of logins on the system
# - priority - the priority to run user process with
# - locks - max number of file locks the user can hold
# - sigpending - max number of pending signals
# - msgqueue - max memory used by POSIX message queues (bytes)
# - nice - max nice priority allowed to raise to values: [-20, 19]
# - rtprio - max realtime priority
# - chroot - change root to directory (Debian-specific)
Wie kann ich meinen Benutzer auf die Nutzung von nur 1 oder 2 Kernen beschränken? Es gibt einen Kernwert, aber der sollte in KB angegeben werden? Ich möchte beispielsweise auf 2 Kerne beschränken? Also wie viele KB? Auch für die CPU? Was sind die idealen Werte für diese Optionen für einen normalen Server mit einer normalen WordPress-Site?
Antwort1
Unter Linux können Sie einen Prozess mit einer CPU anheften taskset
. (Siehe man taskset
). (Siehe auchhttps://unix.stackexchange.com/questions/425065/linux-wie-erkennt-man-welche-prozesse-an-welchem-kern-festgemacht-werden)
Sie können auch cpulimit
(siehe man cpulimit
) verwenden. Dabei werden Kontrollgruppen verwendet, um ein CPU-Auslastungslimit festzulegen, wobei 100 einer CPU entspricht.
Um eines davon zu verwenden, müssen Sie herausfinden, welcher Prozess für den Benutzer gestartet wird, und die obigen Befehle anhängen. Ich kenne mich mit Virtualmin nicht aus, aber da es Open Source ist, gehe ich davon aus, dass Sie durch Greppen des Quellcodes relativ leicht herausfinden können, wo diese Prozesse gestartet werden.
Die CPU-Zeit limits.conf
ist die CPU-Zeit in Minuten, wie in der Spalte „Zeit“ angezeigt. top
Sie ist also nur ein Maß dafür, wie lange der Prozess exklusiv ausgeführt werden darf.
Der „Core“-Wert in limits.conf (siehe man limits.conf
) bezieht sich auf die Größe einer Core-Dump-Datei. Das ist ein Dump, den Sie von einem Prozess aktivieren können, wenn dieser abstürzt, zum Debuggen.
Der Hintergrund hierfür ist, dass Linux genau für das Gegenteil entwickelt wurde - nämlich für die Verteilung von Aufgaben auf mehrere CPUs - und das kann es außerordentlich gut. Der einzige Grund, Aufgaben auf einer Multi-Core-Maschine sinnvoll auf eine CPU zu beschränken, besteht darin, etwas mit perfektem Timing zu tun - oder Timing-Angriffe.
Andere Optionen bestehen darin, das Betriebssystem vom Bootloader aus auf bestimmte Kerne zu beschränken, einzelne CPUs zu emulieren oder Container auszuführen, die an bestimmte CPUs gebunden sind.