Centos、cpanel/whm を実行しており、cpulimit がインストールされています。
私が抱えている問題は、ユーザーの 1 人が CPU を極端に多く使用していることです。常に 100% を超えており、サーバーの速度が低下しています。
さらに問題なのは、彼らは友人であり悪意がないので、アカウントを停止したくないということです。
さらに問題なのは、プロセスが毎秒変化するため、プロセスによって制限できないことです。毎回異なるプロセスになります。
以下のことを試しましたが、うまくいきませんでした。
cpulimit -l 10 -e /home/[username]/public_html/theirwebsite.org/index.php
ただ返されるだけ、
No process found
No process found
No process found
No process found
No process found
No process found
等
極端な CPU 使用率を発生させているものが 2 つあります。
まず、その場所にあるファイルですindex.php
。他には [php] があります。WHM でそれが何を意味するかはわかりませんが、主に がindex.php
問題です。
そのファイルをその場所に制限できればindex.php
、この問題を軽減できるかもしれません。
ちなみに、-P
フラグを試してみましたが、ドキュメントとは異なり、オプションとして利用できません。
cpulimit -l 10 -P /home/[username]/public_html/theirwebsite.org/index.php
戻り値
cpulimit: invalid option -- 'P'
Usage: cpulimit [OPTIONS...] TARGET
OPTIONS
-l, --limit=N percentage of cpu allowed from 0 to 1600 (required)
-v, --verbose show control statistics
-z, --lazy exit if there is no target process, or if it dies
-i, --include-children limit also the children processes
-h, --help display this help and exit
TARGET must be exactly one of these:
-p, --pid=N pid of the process (implies -z)
-e, --exe=FILE name of the executable program file or path name
COMMAND [ARGS] run this command and limit it (implies -z)
どうやら旗を使ってやる必要があるようです-e
。
しかし理想的には、ユーザー アカウント全体を制限したいと思います。
はい、cloudlinux については知っていますが、今はそれができません。それができるようになるまでは、サーバーの再起動を必要としない方法で手動で行うための支援が必要です。
答え1
プロセス (PID) を使用してフレンドを制限することはできないというのは正しいです。Apache は受信するリクエストごとに新しいプロセス (ワーカー) を生成し、そのたびに新しい PID を割り当てます。
で設定した PHP ハンドラに応じてWHM -> MultiPHP Manager -> PHP Handlers
、Apache は PHP スクリプトを自身として実行するか、ファイルを所有するユーザーとして実行します。 をsuPHP
ハンドラとして使用すると、PHP プロセスはファイルを所有するアカウントとして実行されます。
スクリプトが所有者によって実行される場合、ファイルにそのスクリプトを追加することで、アカウントの CPU 使用率を制限できます/etc/security/limits.conf
。これを使用して CPU 使用率を正確に制限することはできませんが、そのプロセスの優先度をサーバー上の他のプロセスよりも低く設定できるように、そのプロセスの「nice」値を変更することができます。これにより、他のプロセスはそれほど長く待機する必要がなくなります。
私はこれを自分で使ったことはありませんが(私はCloudLinuxを使っています)、次のエントリはすべき問題の解決に役立ちます:
username hard priority 30
これにより、ユーザーが実行するプロセスの最大優先度が 30 に設定されます。私の理解では、優先度が高いということは、実際には他のプロセス (優先度が低い) がより多くの CPU 時間を取得することを意味します。
cPanel を実行している私のサーバーでは、ほとんどのプロセスの優先度は 20 なので、上記のロジックに従って、そのユーザーの優先度を 30 に設定すると、これらのプロセスの前に他のプロセスを実行できるようになります。
答え2
やってみましたCグループ?
- サービスをインストールし
sudo yum install libcgroup
て起動しますsudo service cgconfig start
。 - その後、cgroupのサブシステム構成を表示するには、次のコマンドを実行します。
sudo ls /cgroup
という名前の cgroup を作成しますlimitcpu
。group で始まる行は cgroup を作成し、サブシステム パラメータを設定します。
/etc/cgconfig.conf の例:
group limitcpu{
cpu {
cpu.shares = 200;
# cpu.cfs_period_us
# cpu.cfs_quota_us
}
memory {
}
}
CPU制限にはいくつかあります調整可能なパラメータ過度なCPU使用率を制限するために使用できる
cgroup 内のタスクが 1 秒あたり 0.1 (10%) 秒間単一の CPU にアクセスできるようにする場合は、cpu.cfs_quota_us を 100000 に設定し、cpu.cfs_period_us を 1000000 に設定します。
Cgred は、/etc/cgrules.conf ファイルに設定されたパラメータに従ってタスクを cgroup に移動するサービスです (cgrulesengd サービスを起動します)。/etc/cgrules.conf ファイル内のエントリは、次の 2 つの形式のいずれかになります。
user subsystems control_group
user:command subsystems control_group
user
ユーザー名またはグループ名の前に「@」文字が付きます。はsubsystems
、サブシステム名のコンマ区切りリストに置き換え、control_group
cgroup へのパスを表し、command
プロセス名またはプロセスの完全なコマンド パスを表します。
etc/cgrules.conf の例:
*:firefox cpu,memory browsers/
@admin:memhog memory limitmem/
cpuhog cpu limitcpu/
firefox
任意のユーザーによって実行されるプロセスは自動的にブラウザに追加されcgroup
、CPU およびメモリ サブシステムに制限されます。memhog
グループ内の誰かが実行したプロセスはadmin
cgroup に追加されlimitmem
、メモリ サブシステム内で制限されます。- ユーザーは
cpuhog
cgroup 'limitcpu' に追加され、CPU サブシステムが制限されます。
事前の使用例では、代わりにテンプレートを利用してみることもできます。
たとえば、/etc/cgconfig.conf に次のテンプレートを指定します。
template users/%g/%u {
cpuacct{
}
cpu {
cpu.shares = "1000";
}
}
次に、/etc/cgrules.conf エントリの 3 行目にある users/%g/%u テンプレートを使用します。これは次のようになります。
peter:ftp cpu users/%g/%u
上記で使用された変数%g and %u
は、ftp プロセスの所有者に応じて、グループとユーザー名に自動的に置き換えられます。
プロセスが adminstaff グループの peter に属している場合、上記のパスは に変換されますusers/adminstaff/peter
。
次に、cgred サービスはこのディレクトリを検索し、存在しない場合はディレクトリを作成し、プロセスを users/adminstaff/peter/tasks に割り当てます。
テンプレート ルールは構成ファイル内のテンプレートの定義にのみ適用されることに注意してください。そのため、/etc/cgconfig.conf で「group users/adminstaff/peter」が定義されている場合でも、これは無視され、「template users/%g/%u」が優先されます。
答え3
おそらく、/etc/security/limits.conf を設定して、ユーザーが消費できる CPU 時間とメモリの量を調整できるはずです。詳細については、参考: