コメントでは、cgroupを作成し、memory.swappiness
ゼロに設定して(スワッピングを最小限に抑えるため)、その中でアプリケーションを実行することをお勧めします。その場合、物理メモリが非常に少ない状態で実行されていない限り、アプリケーションはスワップしないでしょう。そのcgroup内のプログラムのページをスワップすることが、十分な物理メモリを利用できる唯一の方法でした。
RHEL 6.5でこれを行うには:
libcgroup
パッケージがインストールされていることを確認します。これによりcgcreate
、やなどのユーザー空間ツールにアクセスできます cgexec
。
cgconfig
サービスを開始して有効にし、cgroup構成への変更が再起動後も維持されるようにします。RHELでは、このサービスは/cgroup
ツリーの下に必要なファイルシステムもマウントする必要があります。
でcgroupを作成する cgcreate -g memory:thunderbird
このグループでswappinessをゼロに設定します cgset -r memory.swappiness=0 thunderbird
サービスのcgsnapshot -s > /etc/cgconfig.conf
更新された永続的な構成を保存するために使用しますcgconfig
(これまでのすべての変更は実行時の変更でした。おそらく、デフォルトの構成ファイルをどこかに保存し、永続的な構成にする前にもう一度やり直すことをお勧めします。
これcgexec
で、thunderbird
cgroup 内で目的のアプリケーションを起動することができます。
[root @ xxx601〜]#cgexec -g memory:thunderbird ls
anaconda-ks.cfg a.out foreman.log index.html install.log install.log.syslog node.pp sleep sleep.c ssl-buildスタックテスト
[root @ xxx601〜]#
私は持っていないthunderbird
私はそれをやっているだろう、実際にそうでない場合はインストールされています。上記のフォーマットがめちゃくちゃになっている理由がわかりません。
の1つの代替方法は、cgexec
thunderbirdを起動tasks
して、アプリケーションのファイルにPIDを追加することです。例えば:
[root @ xxx601〜]#cat / cgroup / memory / thunderbird / tasks
[root @ xxx601〜]#pidof httpd
25926 10227 10226 10225 10163 10162 10161 10160 10159 10157 10156 10155 10152 10109
[root @ xxx601〜]#echo 25926> / cgroup / memory / thunderbird / tasks
[root @ xxx601〜]#cat / cgroup / memory / thunderbird / tasks
25926
繰り返しになりますが、これは技術的にはスワップを妨げるものではありませんが、アプリケーション自体を変更するのではなく、おそらく最善の策です。私は今、スワッピングmemory.memsw.limit_in_bytes
を強制しないようにすることのより直接的な制御であると思われることがわかりましたが、問題を完全に修正すると言って本当に安心できるほど十分に遊んでいません。とはいえ、今後検討する必要があるかもしれません。
本当の答えはmlock
、この種の懸念を回避するためにアプリケーションの機密情報を用意することです。私はThunderbirdのようなアプリケーションを賭けても構わないと思っていますが、そうすることはできますが、内部についてそれについてコメントするのに十分な知識がありません。
cgexec
それにサンダーバード。それでもrootアクセスが必要ですが、それは管理者レベルの解決策です。独自のアプリケーションを開発している場合は、mlockを使用します。