web-dev-qa-db-ja.com

他のプロセスに大きな影響を与えることなく、CPU /ディスク集中型の操作を実行する方法は?

Ubuntu 12.04でサーバーを実行しています。実行しようとしている操作はgit clone、私が実装している新しいバックアップシステムの一部として。ソースと宛先は両方ともローカルなので、クローンに関与するネットワークアクティビティはありません。

このサーバーはMinecraftをホストしており、サーバーの実行中にこのようなことをバックグラウンドで実行できるようにしたいと考えています。ただし、リソースの使用量への影響を制限するための最善の努力にもかかわらず、試行するたびにサーバーをロックし、全員を開始します。

これがうまくいくと確信していたコマンドです:

Nice -n 19 ionice -c 3 git clone bukkit backup

私が読んだことから、これはプロセスに最低のCPU優先度と「アイドルのみ」のディスク優先度を与えるはずです。ただし、Minecraftサーバーに接続しているすべてのユーザーをロックしてタイムアウトにするという同じ効果があります。明確にするために、gitリポジトリはアクティブなサーバーフォルダーにないため、ファイルアクセスの競合はありません。

必要に応じて、ハードウェアの仕様に関する詳細を提供できます。ありがとう。

5
Parker Kemp

主にプロセスを並行して実行しようとはしませんが、システムの使用量は可能な限り少ないことがわかります
だから、まず、サーバー上に何もない(またはたぶん数個)とき、たとえば月曜日の2時に時刻を見つける必要があります。

コマンドを将来一度だけ実行するには、atd(at-daemon)を使用します。

$ at 0200 monday
     /home/your_home/name_of_the_script.sh
<Ctrl-D>

詳細については、man atおよびman atd、必ず入力を終了してください Ctrl+D

  • スクリプトが有効で実行可能であることを確認してください!
2
LittleByBlue

強制平均使用率(たとえば、仮想CPUの20%)で短時間(バースト)に100%CPUしか使用できないAmazon EC2インスタンスで実行している場合、 cpulimit で処理します。そうしないと、すべてのCPUクレジットが使い果たされ、インスタンスが調整されます。チュートリアルは here にあります。

編集:ネットワークが関与していないようです。もしあれば、プロセスごとのトラフィックシェーパーを試すこともできます:

いくつかの良い提案を見つけることができます here 、最も簡単な方法は次のようです:

  • trickle を使用します。 Herehere は、使用方法に関する2つの優れた記事です。ルートは必要ありません。
  • iptables--pid-ownerフラグとともに使用する
0
jmiserez