
時々、私はmake
すべてのサーバープールで実行できる時間とリソースを大量に消費するタスク()を実行します。
問題は私だけを実行するのではなくmake
、疑わない2人以上のユーザーがmake
同時に実行すると時間がかかり、時にはサーバーがクラッシュすることもあるということです。だから私たちは誰かが実行したいときはいつでもmake
サーバーの1つに入り、(Linuxを使って)他のユーザーがすでにそのサーバーで実行されていないことをssh
確認してから起動できることを決めました。make
w
make
サーバーの選択を自動化しようとしたときに、サーバープールを繰り返してssh
各サーバーに移動し、出力w
のない最初のサーバーを選択する簡単なスクリプトを作成しましたが、make
このアプローチは次の点を無視するため、あまりにも素朴です。
- 各サーバーには異なる属性があります。たとえば、あるサーバーには12個のCPUがあり、別のサーバーには80個のCPUがあります。
make
このサーバーが実行する唯一の操作ではありませんw
ログインしたユーザープロセスのみが表示され、ssh
ほとんどの時間make
実行中に誰かがサーバー自体で実行しssh
ている可能性があります。make
サーバーの選択基準を変更したいのですが、どうすればいいかわかりません。
オンラインでコマンドを見つけtop
ましたが、何を考慮するのかわかりません。
たとえば、次の基準を使用することを検討しました。$(top -bn 1 | grep 'Cpu\(s\)' | gawk '{print $2+$3+$4+$6+$7+$8}')
現在の使用量が最も少ないサーバーを決定しますが、これはサーバーの属性を無視します。より多くのCPUを持つより忙しいサーバーがあるかもしれません。
答え1
分散ジョブ/タスクスケジューラ、クラスタ管理システム、またはクラウド管理を見つける必要があります。これらの多くはすでに存在し、Casは彼の意見でいくつかを指摘しており、Googleはより多くを見つけるでしょう。
一度展開すると、両方の人がより幸せになり、もはや常にお互いのつま先を踏むことを心配する必要はないと確信しています。また、エラーが原因でシステムが壊れず、ジョブが失敗するようにサーバーを修正する必要があります。
独自のリソースを構築する必要があると主張する場合(15年前のことですが、すでにそうしたことを認めています)、広く言えば、タスクはいくつかの異なるタイプのリソースを消費するので、タスクが占めるリソースは何かを検討することをお勧めします。
- メモリ(RAM)[実行速度が非常に遅いか、クラッシュが発生しているように見え、
make
作業に大きな問題になるようです。] - ディスクI/O帯域幅
- 1秒あたりのディスクI / O操作(照会)
- ディスク容量
- CPU時間
- GPU時間
- ネットワーク帯域幅
を使用してメモリ使用量を確認しfree
、経由でディスクI / Oを確認し、経由でスペースを確認し、iostat
(Linux上)を介してfree
CPU使用率を確認するなどのタスクを実行できます。cat /proc/loadavg
uptime
top
ps
しかし、もちろん、現在の数値を確認するには問題があります。make
最初にいくつかの簡単なタスクを実行するのに数分かかり、数十億のRAMを必要とする大規模なプロセスを開始することもできます。これが発生する可能性があります:
- Aliceはスクリプトを実行して「make」操作を開始します。
- スクリプトはserverAをチェックし、空きRAMが多くCPU使用率が低いことを確認した後、serverAで作業を開始します。
- しばらくして、Bobはスクリプトを実行してRAMを大量に使用する別のタスクを開始します。
- アリスの使命はまだ資源集約的な段階に入っていない。したがって、スクリプトがserverAをチェックするとき、まだ利用可能なRAMがたくさんあります。また、serverAでBobの作業を開始します。
- BobのタスクはserverAで利用可能なRAMの大部分を使用します。
- アリスの仕事はついにRAM集中的な部分に入りましたが、現在利用可能なRAMはありません。ああ! ServerAが死亡しました。
はい、上記は1つを書いた経験からのものです(私のものを使った場合はCPU時間でした)。