프로세스가 스왑 공간을 사용하고 있는지 어떻게 알 수 있습니까?


10

9GB의 스왑 사용에 대한 Linux 서버 최고 보고서가 있습니다. 상단

그러나 스왑을 사용하는 곳을 알 수는 없지만 일부 Google 결과에 따르면 맨 위로 Ocommad p가 프로세스별로 스왑 사용량을 보여줍니다. 그러나 위의 이미지에서 볼 수 있듯이 SWAP 열을 간단히 합하면 10GB보다 큰 스왑이 사용된다는 것을 알 수 있으므로 스왑 사용량의 9GB 수치는 어디에서 오는가?

최고 보고서에 따르면 약 96492kb의 램이 버퍼에 사용됩니다. 스왑을 사용하는 대신 이것을 활용할 수있는 방법이 있습니까?


1
top (man page 당)은 SWAP를 VIRTUAL-PHYSICAL ram 사용량으로 계산합니다. 내 실험에서 완전히 정확하지는 않습니다.
lornix

답변:


6

여러 프로그램이 동일한 스왑 영역을 사용하고있을 가능성이 있으므로 두 번보고됩니다.

스왑 대신 버퍼링 된 영역을 사용하도록 Linux에 지시 할 필요가 없습니다. 이미 수행중인 작업에 대해 매우 현명합니다. 9GB의 스왑과 9GB의 버퍼를 사용하는 경우 좋은 일입니다. 즉, Linux는 메모리에로드 된 9GB의 물건이 적극적으로 사용되지 않는다는 것을 인식하므로 디스크로 스왑하는 것이 더 효율적입니다. 버퍼가 커지고 성능이 향상 될 수 있습니다.


편집 : 각 프로세스에서 사용하는 모든 메모리를 추가하면 실제 RAM보다 훨씬 많은 것을 얻을 수 있습니다. 이는 여러 프로그램에서 공유 라이브러리를 사용하고 Linux가 포크를 처리하는 방식 때문입니다. 전체 프로그램을 메모리에 복제하지 않고 두 인스턴스간에 다른 부분 만 복제합니다. 어떤 경우에는 비디오 메모리가 X 프로세스의 일부로 표시 될 수 있습니다. 기존 Voodoo3 카드가이 작업을 수행 한 것 같습니다. "팬텀"메모리가 맨 위에 표시 될 수있는 다른 경우가있을 수 있습니다.


시스템을 시작할 때 스왑을 사용하지 않지만 이미로드 된 공유 라이브러리가 많기 때문에 공유 라이브러리가 스왑으로 계산되어야한다고 생각하지 않습니다. 어쨌든, 내 시스템이 약 9GB의 스왑 파티션을 사용한다는 것을 알았습니다. 스왑을 가장 많이 사용하는 프로세스를 찾고 싶습니다 (공유 라이브러리, 메모리 맵 파일 제외 ...)
secmask

3

/ proc 하위 디렉토리를 구문 분석하면 작동합니다.

bash 스크립트로 :

for PROCESS in /proc/*/; do
  swapused=$(awk 'BEGIN { total = 0 } /^Swap:[[:blank:]]*[1-9]/ { total = total + $2 } END { print total }' ${PROCESS}/smaps 2>/dev/null || echo 0)
  if [ $swapused -gt 0 ]; then
    /bin/echo -e "${swapused}k\t$(cat ${PROCESS}/cmdline)"
  fi
done

파이프를 정렬하여 출력을 Hi-Lo로 정렬 할 수 있습니다.

{blah}| sort -rn

물론 원하는대로 원하는 언어로 다시 작성하십시오. 나의 Awk-fu는 강하지 않다.

(잘라 내기 불가)

#!/bin/bash
#
# show swap used by processes
#
(for PROCESS in /proc/*/; do
  swapused=$(awk 'BEGIN { total = 0 } /^Swap:[[:blank:]]*[1-9]/ { total = total + $2 } END { print total }' ${PROCESS}/smaps 2>/dev/null || echo 0)
  if [ $swapused -gt 0 ]; then
    /bin/echo -e "${swapused}k\t$(cat ${PROCESS}/cmdline)"
  fi
done ) | sort -nr


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