스왑 (우분투)을 사용하는 것은 무엇입니까?


30

데이터베이스와 많은 Java 응용 프로그램 서버를 실행하는 Ubuntu 8.04 서버가 있습니다. 메모리 구성 및 사용법은 다음과 같습니다.

             total       used       free     shared    buffers     cached
Mem:      16456176   15930028     526148          0      81372    9674196
-/+ buffers/cache:    6174460   10281716
Swap:      1951888     366100    1585788

나는 스왑이 매일 오후에 일어나고 밤에 언젠가는 풀리는 것을 알아 차렸다. 수요는 하루 종일 같지 않으며 다른 시간에 시작됩니다. 퍼지 "오후 밤"경계를 제외하고는 매우 임의적입니다.

이 기계의 하중은 낮 동안 달라집니다. 자정과 오전 6-7시 사이에는 매우 낮으며 오후 6시 ~ 오후 8 시까지는 훨씬 높지만 (안정적) 점진적으로 떨어집니다.

이제 다음과 같은 질문이 있습니다.

  1. 스왑을 사용하는 프로세스를 어떻게 알 수 있습니까?
  2. 캐시에서 메모리를 가져 오는 대신 스왑 아웃을 선호하는 이유는 무엇입니까?

답변:


25

설명하는 스왑 사용 패턴은 놀랍지 않습니다. 거의 사용하지 않는 페이지가있는 영구적으로 실행되는 일부 프로세스와 일치합니다. 낮에는 활동량이 많기 때문에 거의 사용하지 않는 페이지가 거의 항상 교체됩니다. 밤에는 RAM에 더 많은 공간이 있습니다.

각 프로세스에서 사용하는 다양한 종류의 메모리 양을 엿볼 얻을 수 있습니다 top또는 htop. 기본적으로 스왑 사용량을 표시하지 않지만 둘 다를 구성 할 수 있습니다 (맨 위 : 열을 누르고 f스위치를 켜십시오 SWAP. htop :를 누르고 열을 F2추가하십시오 NSWAP). 당신이 가진 특정 프로세스에 대한 자세한 정보를 얻을 수있는 cat /proc/12345/vmstat12345프로세스 ID입니다. 일부 페이지는 여러 프로세스에서 공유되므로 "프로그램이 얼마나 많은 스왑을 사용하고 있는지"는 완전히 정의되지 않았습니다.

RAM과 경쟁하는 두 가지 주요 경쟁 업체는 프로세스 메모리 (스왑 가능)와 디스크 캐시 (파일에서 다시 읽을 수 있음)입니다. 디스크 캐시보다 항상 프로세스 메모리의 우선 순위를 정할 이유가 없습니다. 파일을 계속해서 메모리로 읽는 것보다 거의 사용하지 않는 프로세스 메모리 부분을 교체하는 것이 좋습니다. 디스크 캐시 전용 메모리의 약 절반 (예 : 30 % -70 %)을 제공하는 수치는 수행해야하는 작업에 적당한 양의 RAM이있는 시스템에서 일반적입니다.


6
NSWAP열을 찾을 수 없습니다 (Ubuntu 16.04 : /).
jjmontes

1
@jjmontes 삭제되었습니다 . 이유를 모르겠습니다.
Gilles 'SO- 악마 그만

htop 자주 묻는 질문 저자가 정확하게 스왑 사용량을보고하는 것이 가능하다고 생각하지 않으며, 그 상단의 메트릭 정확하지 않은 상태.
Oliver Evans

0

StackOverflow에는 첫 번째 질문에 대한 훌륭한 답변이 이미 있습니다 ( "실제로 스왑을 사용하는 프로세스는 무엇입니까?").

https://stackoverflow.com/a/7180078/1442301

간단히 말해, 도구 는 스왑 사용에 대한 정확한 정보를 제공 top하거나 htop제공하지 않습니다. 더 정확한 정보를 얻으려면 ( /proc의사 파일 /proc/$PID/smaps) 폴더 로 다이빙해야 합니다.

위에서 언급 한 좋은 방식으로 반향이 정보를 얻을 수있는 간단한 쉘 스크립트가 포함되어 있습니다.



0

폴링 및 도구의 출력을 구문 분석하지 않고 좋아하는 vmstat, free그리고 top보기에 가장 좋은 장소는 시스템의 루트 사용자 또는 다른 사용자의 크론 탭 수 있습니다. 특정 시간에 시스템의 일반적인로드가 안정적으로 급증하면 cron에 리소스가 필요한 프로세스가있을 수 있습니다. 그렇지 않으면 항상 scriptSTDOUT에 전달되는 모든 것을 기록하는 유틸리티를 사용하여 빈민가 버리기 로깅 유틸리티를 만들 수 있습니다 .

따라서 나중에 검사를 위해 출력을 포착하기 위해 일회용 스크립트를 수행해야하는 경우 한 터미널에 다음을 입력합니다.

script /tmp/free.txt

그리고

while (true); do date; free; sleep 30; done

그리고 다른 터미널에서

script /tmp/top.txt

그리고

while (true); do date; top -n 1; sleep 30; done

그리고 다음날 아침, 두 script호출 을 모두 종료 top하고free

다시 한번 이것은 빈민가 접근 방식이지만 일회성 만 필요한 것처럼 들립니다.

우분투 스왑 가이드 를 읽고 싶을 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.