web-dev-qa-db-ja.com

RAMと、Ubuntuサーバーに手動の変更が適用されていない場合のCPUの割り当て方法

統計シミュレーションを行うR-Studio Serverを実行するUbuntu Server(16.04)があります。これらのシミュレーションは、RAMとCPUで重い場合があるため、メモリとRAMが2人のユーザーがログインしていて、それらのそれぞれは、メモリとCPUについて「競合」する個別のRセッションを実行します。

私たちの誰もサーバー管理者ではないので、手動での変更を適用したくありませんが、RAMであり、CPU割り当てがすべてのユーザーに等しくない場合に関心があります。

注意:R-Studio Server Proバージョンでは、特定の量のメモリを非常に簡単な方法でシングルユーザーに割り当てることができますが、Proバージョンがないため、これらの設定を変更することはできません。

6
joaoal

RAMは先着順です。 userAがそれぞれ10%のメモリを割り当てる9つのプロセスを実行し、userBがログオンした場合、userBは残りの10%のメモリしか表示しません。メモリが使い果たされた場合、Linuxはプロセスの強制終了を開始します。 OOMキラーは、私の知る限り、マルチユーザー向けに調整されていないため、このシナリオでは不当である可能性があります。

CPU時間は通常、ユーザーごとではなく、プロセスごとに割り当てられます(ただし、以下を参照)。

実行の準備ができているプロセス(スリープ状態ではない、I/Oで待機していないなど)は、スケジューリングの対象と見なされます。 (実行の準備ができていないプロセスは無視されるため、「カウントしないでください。」(これは少し単純化していますが、十分に近いものです。))

最も単純なモデルでは、2人のユーザーがそれぞれ1つのプロセスを実行している場合、各ユーザーは使用可能なCPU時間の約半分を取得します。ただし、userAが10個のプロセスを実行していて、userBが1個のプロセスを実行している場合、userAは90%のCPUを取得し、userBは10%のCPUを取得します(他のすべての条件は同じです)。

ただし、Linuxスケジューラーは、プロセスをグループ化し、それらのグループ間でCPU時間を割り当てることにより、これを調整できます。

さらに、Linuxには、セッションID(通常、端末、端末ウィンドウ、Xログインセッションに関連付けられている)に基づいてプロセスを自動的にグループ化する機能があります。これは「自動グループ化」と呼ばれます。目標は、1つのウィンドウで重いバックグラウンドタスクを実行している1人のユーザーと、別のウィンドウでインタラクティブタスクを実行している場合でも、レスポンシブインタラクティブパフォーマンスが表示されることです。

これらの機能はどちらも、私が確認できる限り、Ubuntuではデフォルトで有効になっています。

マルチユーザーワークロードでのタスクグループや自動グループ化の動作に関する情報が見つかりません。理論的には、スケジューラが各ユーザーを個別のタスクグループに入れると、ユーザーは常にCPUへのバランスのとれたアクセスを取得します(2人のユーザーで50/50)。しかし、これが自動的に行われると言うことは何も見つかりません。

参考文献:

5
Ben Scott

同じサーバーでのメモリ使用量を制限する必要がある場合、最善の策は次のいずれかです。

  1. 2つの仮想マシン、理想的にはKVMを使用して、既存のUbuntuサーバーを使用してVMをホストできるようにします。ただし、これにより、あるユーザーの未使用のメモリを別のユーザーと簡単に共有できなくなります。
  2. Cgroupを使用してリソースの使用を制限する
    2.1。 https://askubuntu.com/questions/510913/how-to-set-a-memory-limit-for-a-specific-process 2.2 http://www.fernandoalmeida .net/blog/how-to-limit-cpu-and-memory-usage-with-cgroups-on-debian-ubuntu /
5
zymhan

デフォルトでは、Ubuntuのユーザーはメモリに関して無制限であり、この場合は「先着順」です。つまり、ユーザーAはすべてのメモリを使い果たして、2番目のユーザーに何も残さない可能性があります。

ただし、制限を構成すると、制限は常に同じになり、現在のユーザーの数に依存しないため、マシン上でユーザーが1人でも、ユーザーを制限できます。

CPUに関しては、状況は少し良くなり、カーネルスケジューラはプロセス間でCPU時間を分散します(ユーザーではありません!)。

3
Sven