Centos、cpanel/whmを実行していて、cpulimitがインストールされています。
私が抱えている問題は、ユーザーの1人が極端な量のCPUを使用していることです。 100%以上一貫していて、サーバーの速度が低下しています。
さらに問題は、彼らは友達で悪意がないので、私は彼らを一時停止したくないということです。
さらに問題は、このプロセスは1秒ごとに変化するため、プロセスで制限できないことです。それは毎回異なるプロセスです。
以下を試しましたが動作しません。
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について知っていますが、今はできません。それができるまでは、サーバーの再起動を必要としない何かを手動で実行するのに助けが必要です。
プロセス(PID)を使用して友達を制限することはできませんが、Apacheは受信するすべてのリクエストに対して新しいプロセス(ワーカー)を生成し、毎回新しいPIDを割り当てます。
PHPハンドラーをWHM -> MultiPHP Manager -> PHP Handlers
で設定したハンドラーに応じて、ApacheはPHPスクリプト自体を実行するか、またはスクリプトを所有するユーザーとして実行しますsuPHP
をハンドラーとして使用する場合、PHPプロセスはファイルを所有するアカウントと同じように実行されます。
スクリプトが所有者によって実行される場合、/etc/security/limits.conf
ファイルに追加することで、CPUの使用をアカウントに制限できます。これを使用してCPUパーセンテージを正確に制限することはできませんが、「Nice」の値を変更して、サーバー上の他のプロセスよりもプロセスの優先順位を低くすることができます。そのため、他のプロセスはそれほど長く待つ必要はありません。
私はこれを自分で使用したことがありませんが(CloudLinuxを実行しています)、次のエントリshouldが問題の解決に役立つと思います。
username hard priority 30
これは、ユーザーが実行するプロセスの最大優先度を30に設定します。私が理解していることから、より高い優先度は、実際には(より低い優先度を持つ)他のプロセスがより多くのCPU時間を取得することを意味します。
CPanelを実行している私のサーバーでは、ほとんどのプロセスの優先度は20なので、上記のロジックに従って、そのユーザーの優先度を30に設定すると、他のプロセスがこれらのプロセスの前に実行できるようになります。
Cgroups を試しましたか?
Sudo yum install libcgroup
をインストールしてSudo service cgconfig start
を開始します。Sudo ls /cgroup
を実行してcgroupのサブシステム構成を表示しますlimitcpu
という名前のcgroupを作成します。 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は、(cgrulesengdサービスを開始する)サービスであり、/ etc/cgrules.confファイルで設定されたパラメーターに従ってタスクをcgroupに移動します。 /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サービスはこのディレクトリを検索し、存在しない場合は、cgredがディレクトリを作成し、プロセスをusers/adminstaff/peter/tasksに割り当てます。
テンプレートルールは設定ファイル内のテンプレートの定義にのみ適用されるため、「グループユーザー/ adminstaff/peter」が/etc/cgconfig.confで定義されていても無視され、「テンプレートユーザー/%g /%」が優先されます。 u」。
おそらく/etc/security/limits.confをセットアップして、ユーザーが消費できるCPU時間とメモリの量を調整できるはずです。詳細は https://linux.die.net/man/5/limits.conf を参照してください