21

大きなメモリ フットプリント (ある種のデータベース エンジン) を持つプロセスを実行している LINUX サーバーがあります。このプロセスによって割り当てられたメモリは非常に大きいため、その一部をスワップ (ページアウト) する必要があります。

私がやりたいことは、他のすべてのプロセス (または実行中のプロセスのサブセット) のメモリ ページをメモリ内でロックして、データベース プロセスのページだけがスワップ アウトされるようにすることです。たとえば、スワッピングによってプロセスが影響を受けることなく、引き続きリモートで接続してマシンを監視できるようにしたいと考えています。つまり、sshd、X、top、vmstat などにすべてのページのメモリを常駐させたいと考えています。

Linux には mlock()、mlockall() システム コールがあり、ピン留めを行うための適切なノブを提供しているようです。残念ながら、すべてのプロセス内で明示的な呼び出しを行う必要があり、別のプロセスまたは親から mlock() を呼び出すことができないようです (mlock() は fork() または evecve() の後に継承されません)。

どんな助けでも大歓迎です。仮想ピザとビールが提供されます:-)。

4

4 に答える 4

14

これを行ってからしばらく経っているため、いくつかの手順を見逃している可能性があります。

次のような内容を含む GDB コマンド ファイルを作成します。

call mlockall(3)
detach

次に、コマンド ラインで、mlock するプロセスの PID を見つけます。タイプ:
gdb --pid [PID] --batch -x [command file]

あなたがそれに夢中になったらpgrep
gdb --pid $(pgrep sshd) --batch -x [command file]

于 2012-09-20T20:42:12.047 に答える
7

システム上のほとんどのもののページを実際にロックすることは、少し粗雑で抜本的なように思えます。メカニズムの悪用であることは言うまでもなく、他の予期しない問題を引き起こす可能性があるようです.

理想的には、おそらく実際に必要なのは、プロセスのグループの「スワップ性」を制御して、データベースが最初にスワップされ、重要なシステム管理ツールが最後にスワップされるようにすることです。これを行う方法があります。

于 2012-09-20T20:58:21.837 に答える
3

情報を検索してmlockallいるときに、このツールに出くわしました。あなたのディストリビューションでそれを見つけることができるかもしれません。マニュアルページしか見つかりませんでした。

http://linux.die.net/man/8/memlockd

于 2012-09-20T20:49:58.627 に答える