47

特定のプロセスのメモリをディスクにスワップアウトしないように Linux に指示する方法はありますか?

これはJavaアプリなので、理想的にはコマンドラインからこれを行う方法を望んでいます.

グローバルな swappiness を 0 に設定できることは承知していますが、これは賢明でしょうか?

4

7 に答える 7

25

これは、Linux ではmlockall(2)システム コールを介して実行できます。これはプロセス全体で機能しますが、渡す必要がある引数について読んでください。

すべてをコア内でプルする必要は本当にありますか? Java アプリの場合、おそらく JVM 全体をコア内でロックします。これを行うためのコマンド ライン メソッドについては知りませんが、簡単なプログラムを作成して、 call fork、 call mlockall、 thenを呼び出すことができますexec

また、 madvise(2)のアクセス パターン通知の 1 つがニーズを満たしているかどうかを確認することもできます。より適切なページング戦略について VM サブシステムにアドバイスすることは、適切であればよりうまくいく可能性があります。

ずっと前に SunOS の下に、vadvise(2)と呼ばれる madvise に似たメカニズムがあったことに注意してください。

于 2009-02-23T16:21:30.453 に答える
15

プロセスのswappinessを変更する場合は、それをcgroupに追加し、そのcgroupの値を設定します。

https://unix.stackexchange.com/questions/10214/per-process-swapiness-for-linux#10227

于 2012-09-10T10:35:32.113 に答える
2

スーパーユーザーとして、それを最高の優先度レベル -20 に「ナイス」して、それがスワップアウトされないようにするのに十分であることを願っています。通常はそうです。正の数を指定すると、スケジューリングの優先順位が低くなります。通常のユーザーは上向き (負の数) にナイスできません。

于 2009-02-23T16:56:07.000 に答える
2

システムコールのmlockファミリーによってそれを行うことができます。ただし、別のプロセスでそれを実行できるかどうかはわかりません。

于 2009-02-23T15:58:56.357 に答える
1

なぜこれをしたいのですか?
このアプリのパフォーマンスを向上させようとしている場合は、おそらく間違った方向に進んでいます。OS はディスク キャッシュ用のメモリを増やすプロセスをスワップ アウトします。空き RAM がある場合でも、カーネルが最もよく知っています (実際には、スケジューラを作成した samrt 担当者が最もよく知っています)。
応答性が必要なプロセス (使用されていないときにスワップアウトされ、すぐに再起動する必要がある) がある場合は、優先度を高くするか、mlock にするか、リアルタイムカーネルを使用すると役立つ場合があります。

于 2009-02-23T17:34:27.423 に答える
1

非常に特殊な状況を除いて、この質問をすることは、あなたが間違ったことをしていることを意味します(tm)。

真剣に、Linux がスワップを望んでいて、プロセスをメモリに保持しようとしている場合、OS に不当な要求を課していることになります。アプリがそれほど重要な場合は、1) 追加のメモリを購入する、2) マシンから他のアプリ/デーモンを削除する、またはマシンをアプリ専用にする、および/または 3) 非常に高速なディスク サブシステムに投資する。これらの手順は、重要なアプリにとって妥当です。それらを正当化できない場合は、メモリを配線して他のプロセスを枯渇させることもおそらく正当化できません。

于 2009-02-23T17:11:45.497 に答える