의견에서 cgroup을 만들고 memory.swappiness
0으로 설정 하고 (스왑을 최소화하기 위해) 응용 프로그램을 그 내부에서 실행하는 것이 좋습니다. 그렇게했다면 물리적 메모리가 너무 부족하여 해당 cgroup의 프로그램 페이지를 스와핑하는 것이 충분한 물리적 메모리를 사용할 수있는 유일한 방법이 아닌 한 응용 프로그램 이 스왑되지 않을 것 입니다.
RHEL 6.5에서이를 수행하려면 다음을 수행하십시오.
libcgroup
패키지가 설치되어 있는지 확인하십시오 . 그러면 cgcreate
및과 같은 사용자 공간 도구에 액세스 할 수 있습니다 cgexec
.
cgconfig
cgroup 구성에 대한 변경 사항이 재부팅간에 지속적으로 유지되도록 서비스를 시작하고 활성화하십시오 . RHEL에서이 서비스는 필요한 파일 시스템을 /cgroup
트리 아래에 마운트해야합니다 .
로 cgroup 만들기 cgcreate -g memory:thunderbird
이 그룹에서 swappiness를 0으로 설정하십시오. cgset -r memory.swappiness=0 thunderbird
서비스에 cgsnapshot -s > /etc/cgconfig.conf
대한 업데이트 된 영구 구성을 저장하는 데 사용 합니다 cgconfig
(지금까지의 모든 변경은 런타임 변경이었습니다). 기본 구성 파일을 어딘가에 저장하고 영구 구성하기 전에 한 번만 제공하는 것이 좋습니다.
이제 cgroup cgexec
내에서 원하는 응용 프로그램을 시작하는 데 사용할 수 있습니다 thunderbird
.
[root @ xxx601 ~] # cgexec -g 메모리 : Thunderbird LS
anaconda-ks.cfg a.out foreman.log index.html install.log install.log.syslog node.pp sleep sleep.c SSL 빌드 스택 테스트
[root @ xxx601 ~] #
나는이없는 thunderbird
사실, 그렇지 않으면 나는 것을했을 설치. 왜 위의 형식이 엉망인지 잘 모르겠습니다.
하나의 대안 cgexec
은 썬더 버드를 시작 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
그것으로 썬더 버드. 여전히 루트 액세스 권한이 필요하지만 관리자 수준의 해결 방법입니다. 자신의 응용 프로그램을 개발하는 경우 mlock 을 사용 합니다.