ユーザー全体をプロセスだけでなく、CPUの10%未満に制限するにはどうすればよいですか?


10

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プロセスはファイルを所有するアカウントで実行されます。

スクリプトが所有者によって実行された場合、/etc/security/limits.confファイルに追加することにより、CPUの使用をアカウントに制限できます。これを使用してCPUパーセンテージを正確に制限することはできませんが、「nice」値を変更して、それらのプロセスの優先順位をサーバー上の他のプロセスよりも低くすることができます。そのため、他のプロセスはそれほど長く待つ必要はありません。

私はこれを自分で使用したことがありません(私はCloudLinuxを実行しています)が、次のエントリ問題の解決に役立つと思います。

username    hard    priority    30

これは、ユーザーが実行するプロセスの最大優先順位を30に設定します。私が理解していることから、より高い優先順位は、実際には(より低い優先順位の)他のプロセスがより多くのCPU時間を取得することを意味します。

cPanelを実行している私のサーバーでは、ほとんどのプロセスの優先度が20であるため、上記のロジックに従って、そのユーザーの優先度を30に設定すると、他のプロセスがこれらのプロセスの前に実行できるようになります。


7

Cgroupsを試しましたか?


  • サービス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は、(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とメモリサブシステムに制限されます。

  • memhogadminグループ内の誰かが実行するプロセスはcgroupに追加さlimitmemれ、メモリサブシステムが制限されます。

    -ユーザーはcpuhogcgroup '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」。

デジタルオーシャンによるチュートリアル。

コントロールグループの概要。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.