web-dev-qa-db-ja.com

単一のMYSQLプロセスのCPUを制限する

これは比較的単純な質問であり、うまくいけば簡単な答えがあります。全能のグーグルはこれまでのところこれについてはあまり役に立たない。

私はかなり活発なウェブホスティングビジネスを運営しています。 PHPスクリプトを使用してvbulletinデータベースからすべてを取得し、それをipbソフトウェアにスラップする、やや大きなデータベース(vbulletinからipbへの変換〜4gb)をインポートしているクライアントがいます。

それは本質的にそれが実行されている間私のサーバーを不自由にします。

今、私は良いホストになり、彼にこれをさせたいのですが、私のボックスの他のユーザーの結果ではありません。

何か案は?

2
Tim

[re] Niceを使用して、プロセスの優先度を調整できます。これにより、それ自体が「制限」されることはありませんが、サーバー上の他の操作は引き続き実行されます。コマンドreniceは、実行中のプロセスの優先度を変更します。fromman renice "有用な優先度は次のとおりです。20(影響を受けるプロセスは、システム内の他の何も実行したくない場合にのみ実行されます)、0(「基本」スケジューリング優先度)、その他ネガティブ(物事を非常に速く進めるため)。」

renice N PID

例:renice +5 987これにより、プロセス987はスケジューリングに不利になります。

編集:確かに他のユーザーに影響を与えるので、私はあなたのmysqlサーバープロセスを放棄しません-代わりにmysqlクライアントプロセスを探してそれを放棄します。

6
DisabledLeopard

問題のリソースがプロセッサの場合は、cpulimitを試してください。 cpulimitは、プロセスのCPU使用率を制限しようとする単純なプログラムです。

参照する

http://webupd8.blogspot.com/2009/05/limit-cpu-usage-by-process-linux.html

または

http://www.cyberciti.biz/faq/cpu-usage-limiter-for-linux/

お役に立てば幸いです

2
Viky

アカウントごとのリソース制限 を使用して、クライアントが確立できる接続の数を制限することはできません。したがって、使用されるシステムリソースを制限します。 MySQL 5.0では、個々のアカウントに対して次のサーバーリソースを制限できます。

  • アカウントが1時間あたりに発行できるクエリの数
  • アカウントが1時間あたりに発行できる更新の数
  • アカウントが1時間あたりにサーバーに接続できる回数
  • アカウントが持つことができるサーバーへの同時接続の数(MySQL 5.0.3以降)
1
Coops

他の人が示唆しているように、「ニース」は知っておくとよいでしょう。

しかし、ここに問題があります。mysqlサーバー自体以外のものを「いい」とすると、すべての挿入はMysqlの優先度で実行されます。これはかなり高いです。

たとえば、「Nice」phpスクリプトが低優先度で大量のINSERTステートメントを生成し、それをmysqlサーバーに送信すると、mysqlサーバーは、=の「niceness」に関係なく、通常の高優先度モードでその挿入を実行します。 PHPスクリプト。これは、Mysqlサーバーが独自の優れた機能とPRIを備えた別個のプロセスであるためです。

一方、mysqlサーバー自体を「ニース」にすると、すべてのDB操作が遅くなります。他の回答で述べられているように、良くありません。

最善の解決策は、この顧客にPHPスクリプトを設定して(ループ上で)小さなビットで挿入を行い、sleep()ステートメントをループ内に配置するように指示することです。 。挿入は完全に優先されますが、サイズは管理可能であり、sleepステートメントは他のプロセスを実行させ、データベースに追いつく機会を与える必要があります。

RAMの使用法にこだわりがある場合は、sleepステートメントの直前に不要な変数を「設定解除」するように顧客に依頼できます。

お客様がこのスクリプトをコマンドラインから実行する場合は、上記に加えて「ニッキング」することをお勧めします。

1
teleclimber

あなたが探しているコマンドはニースです。

1
resonator
0
Amit Kumar

Niceは、プロセスに未使用のリソースのみを使用させるのに適しています。実際にそれ以上に制限したい場合は、web/dbサーバーのユーザーの「ulimit」が探している可能性があります。

編集:これは結局のところそれほど良い考えではないかもしれません。 ulimitを設定すると、プロセスが制限を超えた場合にkillになると思います。

0
A B

これは、将来的に考慮すべきことかもしれません-仮想化。

OpenVZやVServerのようなものを使用する場合、基本的に、各仮想サーバーによって消費されるCPU時間の量に上限を設けることができます。 MySQLを実行するだけの仮想サーバーを作成し、それを制限することができます。それ以外はあまり変わりません。

0
sybreon