Amazon EC2 マイクロ インスタンスの JVM で Play Framework Scala アプリケーションを実行しています。アプリケーションは、多くのテキストを索引付けすることがあります。ただし、仮想マシンの CPU が常に高い負荷にさらされている場合、ハイパーバイザーは仮想マシンから時間を盗み、そのハイパーバイザーによって管理されている他の仮想マシンに与えることで、仮想マシンを罰します。
現在盗まれている時間を測定することを考えています。それが高すぎる場合 (たとえば 5% を超える場合) は、インデックス作成をしばらく一時停止します。質問:
これはまったく良い考えですか?(それはクレイジーですか?または、より良いアプローチがありますか?)
Scala / Javaから盗まれた時間を測定するにはどうすればよいですか?
現在、私は外部プロセス呼び出しを行うことを考えています(たとえば
Seq("bash", "-c", "echo")!!vmstat、出力をorに日付を付け/proc/statて解析し、盗まれた時間を見つけます。しかし、これはエラーが発生しやすい可能性がありますか?たとえば、新しいバージョンのvmstat出力データが別の形式である場合はどうなるでしょうか。ただし、 の出力は/proc/stat後方互換性のない方法で変更されることはありません。(?)
これらすべてが Windows で動作する必要はありません。Ubuntu や CentOS などの Linux のフレーバーのみ。そして、外部プロセスの呼び出しが失敗した場合は、単に Scala のNone代わりにSome(percentage).
更新:適切な機能getStolenを備えたSigar という名前のライブラリを見つけました。「合計システムCPU非自発的待機時間double」を表すaを返しますが、どの単位でしょうか? そして残念ながら申請開始からの累計なのかな。とにかく、盗まれた時間を印刷するために実際にそれを使用している人がいます: https://forums.oracle.com/thread/1301532