システムインフォメーション
OSの種類とバージョン
*Ubuntu Linux 20.04.4
Virtualmin バージョン 6.17-3*
私は自分のサーバーとすべての仮想サーバーの唯一の所有者です。サーバーが使用するリソースを制限したいと考えています。現在、limits.conf ファイルを次のように編集して RAM 使用量を設定しています。
oneofmyuser ハード メモリ ロック 1024
今、サンプルコードのCPUオプションに困惑しています -
#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)
ユーザーが 1 コアまたは 2 コアのみを使用するように制限するにはどうすればよいですか? コア値はありますが、KB 単位である必要があります。たとえば、2 コアに制限したいのですが、KB はいくつですか? CPU の場合も? 通常の WordPress サイトを持つ通常のサーバーの場合、これらのオプションの理想的な値は何ですか?
答え1
Linux では、 を使用してプロセスを CPU に固定できますtaskset
(を参照man taskset
)。( も参照)。https://unix.stackexchange.com/questions/425065/linux-how-to-know-which-processes-are-pinned-to-which-core)
また、コントロール グループを使用して CPU 使用量制限を設定するcpulimit
(を参照man cpulimit
) を使用することもできます。この場合、100 は 1 つの CPU に相当します。
これらのいずれかを使用するには、ユーザーに対してどのプロセスが起動されるかを調べ、上記のコマンドを追加する必要があります。私は Virtualmin に詳しくありませんが、これはオープン ソースなので、ソース コードを grep することで、これらのプロセスがどこで起動されるかを簡単に見つけることができると思います。
CPU 時間は、limits.conf
時間列に表示される分単位の CPU 時間であり、top
プロセスが排他的に実行できる時間の長さのみを測定します。
limits.conf の「core」値 (を参照man limits.conf
) は、コア ダンプ ファイルのサイズを示します。コア ダンプ ファイルとは、プロセスがクラッシュした場合にデバッグ用に有効にできるダンプです。
この背景には、Linux がまさにその逆、つまり CPU 間でタスクを分散するように設計されており、その点で非常に優れているということがあります。マルチコア マシンでタスクを CPU に制限することが合理的である唯一の理由は、完璧なタイミングで何かを実行する場合、またはタイミング攻撃を行う場合です。
その他のオプションとしては、ブートローダから特定のコアに OS をロックしたり、単一の CPU をエミュレートしたり、特定の CPU に固定されたコンテナを実行したりすることができます。