当社には、Ubuntu LTS を実行するオンプレミス Xeon サーバーがあり、これは数人の開発者間で共有されています。各開発者は自分のユーザーでログインし、さまざまなワークロードを実行します。当社が経験する問題は、CPU またはストレージを大量に消費するワークロードを実行すると、他のユーザーが実際にマシンで作業できず、シェルが応答しなくなることです。
ビルド時に CPU 使用率を制限するようユーザーに依頼したところ、CPU の問題は解決しましたが、どうやらディスク IO 使用率は依然として問題となっています。私たちは SSD ストレージを使用しています。
リソースを厳しく制限したくないため、サーバー上で仮想マシンを使用することはできません。他のユーザーのリソースが不足しないようにしたいだけです。
どのような選択肢がありますか?
答え1
ワークロードの変更はどの程度柔軟ですか? プロセスの優先順位を制限し、取得できるスライスの量を制限できる nice などのユーティリティがあります。
https://www.geeksforgeeks.org/nice-and-renice-command-in-linux-with-examples/#
しかし、すでに指摘されているように、この解決策は完璧ではありません。なぜなら、ここでの問題は、1 人のユーザーだけがログインしている場合、システムを最大限に活用できない可能性があるからです。そして、それは単なる新しい問題かもしれません。
ディスクIO、他の人が質問し、ここでの回答のような解決策を考え出しましたhttps://unix.stackexchange.com/questions/536007/cgroups-throttle-per-user-disk-io-bandwidth-on-linux
完璧な解決策はおそらく存在しないと思いますが、共有リソースをより効率的に使用するために仮想化などが普及したのはそのためです。
Linux のあらゆるものと同様に、他にも多くの作業が存在する可能性があります (そして、それらを活用するように設計されたシステムもあるかもしれません)
私見ですが、これを正しく行うには、カーネル レベルでのスケジューリング、または既存のスケジューリング オプションを使用するためのインターフェイスが必要になる可能性がありますが、私はそのようなものについて知りません。...しかし、私は以前に間違ったことがあるので、他の誰かが解決策を提案してくれたら、私も学びます。したがって、譲歩を受け入れなければ答えはないというのが答えかもしれません。