W komentarzach zasugerowałem utworzenie cgroup, ustawienie memory.swappiness
na zero (aby zminimalizować zamianę) i uruchomienie aplikacji wewnątrz tego. Gdybyś to zrobił, aplikacja prawdopodobnie nie zamieniłaby się, gdybyś nie miał tak niewiarygodnie małej ilości pamięci fizycznej, że zamiana stron na programy w tej grupie była jedynym sposobem na udostępnienie wystarczającej ilości pamięci fizycznej.
Aby to zrobić w RHEL 6.5:
Upewnij się, że libcgroup
pakiet jest zainstalowany. Daje to dostęp do narzędzi przestrzeni użytkownika, takich jak cgcreate
i cgexec
.
Uruchom i włącz cgconfig
usługę, aby zmiany konfiguracji cgroup były powtarzane między restartami. Na RHEL ta usługa powinna również zamontować wymagane systemy plików pod /cgroup
drzewem.
Utwórz grupę roboczą za pomocą cgcreate -g memory:thunderbird
Ustaw swapiness na zero w tej grupie za pomocą cgset -r memory.swappiness=0 thunderbird
Służy cgsnapshot -s > /etc/cgconfig.conf
do zapisywania zaktualizowanej trwałej konfiguracji cgconfig
usługi (wszystkie dotychczasowe zmiany były zmianami w środowisku wykonawczym. Prawdopodobnie zechcesz gdzieś zapisać domyślny plik konfiguracyjny i dać mu jeszcze raz, zanim zmienisz go w trwałą konfigurację.
Teraz możesz użyć cgexec
do uruchomienia żądanych aplikacji w thunderbird
grupie:
[root @ xxx601 ~] # cgexec -g memory: thunderbird ls
anaconda-ks.cfg a.out foreman.log index.html install.log install.log.syslog node.pp uśpienie uśpienia. c test stosu kompilacji ssl
[root @ xxx601 ~] #
W thunderbird
rzeczywistości nie zainstalowałem inaczej, zrobiłbym to. Nie jestem pewien, dlaczego formatowanie powyższego jest pomieszane.
Alternatywą cgexec
byłoby uruchomienie Thunderbirda i dodanie PID do tasks
pliku aplikacji. Na przykład:
[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
Ponownie należy wspomnieć, że technicznie nie zapobiega to zamianie, ale nie modyfikuje samej aplikacji, to prawdopodobnie najlepszy wybór. Właśnie znalazłem, memory.memsw.limit_in_bytes
co wydaje się, że może to być bardziej bezpośrednia kontrola wymuszania braku zamiany, ale nie bawiłem się wystarczająco, aby naprawdę czuć się komfortowo, mówiąc, że całkowicie rozwiązuje twój problem. To powiedziawszy, może to być coś do rozważenia po tym.
Prawdziwą odpowiedzią byłoby posiadanie mlock
informacji wrażliwych na aplikację w celu obejścia tego rodzaju problemów. Jestem skłonny założyć się, że aplikacja taka jak Thunderbird to robi, ale nie wiem wystarczająco dużo o wewnętrznych elementach, aby to skomentować.
cgexec
piorun w to. Nadal potrzebujesz dostępu do konta root, ale taka jest rozdzielczość na poziomie administratora. Jeśli tworzysz własną aplikację, skorzystaj z mlock .