top - 10:43:31 up 8 days, 1:28, 4 users, load average: 0.72, 0.57, 0.44
Tasks: 180 total, 1 running, 177 sleeping, 0 stopped, 2 zombie
%Cpu(s): 8.9 us, 2.1 sy, 0.0 ni, 88.9 id, 0.0 wa, 0.0 hi, 0.2 si, 0.0 st
KiB Mem: 8078124 total, 3815444 used, 4262680 free, 108300 buffers
KiB Swap: 9437180 total, 2448032 used, 6989148 free, 446248 cached
PID USER PR NI VIRT SWAP RES CODE DATA SHR S %CPU %MEM TIME+ COMMAND
3274 root 20 0 160m 4392 6808 2400 80m 1684 S 13.2 0.1 245:09.29 wicd
3451 root 20 0 79684 4900 2328 2400 6124 764 S 7.9 0.0 150:21.43 wicd-monitor
2804 messageb 20 0 30200 232 856 392 756 408 S 6.6 0.0 128:20.46 dbus-daemon
3856 cifer 20 0 411m 7524 28m 2400 150m 5904 S 1.3 0.4 20:34.23 wicd-client
4226 cifer 20 0 1499m 197m 52m 86m 1.0g 6504 S 1.3 0.7 227:24.62 chromium
1087 cifer 20 0 1556m 458m 166m 86m 1.2g 9980 D 2.3 2.1 4:27.35 chromium
보시다시피 물리 메모리는 8G인데 3.8G만 사용하고 있어서 8G 공간을 넘은 적은 없을 거라 확신하는데 2.4G 스왑 공간을 사용하는 것은 단지 최대 절전 모드 때문인 것 같습니다.
이제 최상위 명령에서 VIRT 및 SWAP 열은 모든 프로세스가 스왑 공간을 사용한다는 것을 보여줍니다. 모든 프로세스에 대해 SWAP 열을 추가했는데 2.4G보다 약간 작아 보입니다.
내가 맞나요? 최대 절전 모드로 인해 스왑 사용이 발생합니까?
또한 질문이 있습니다. 두 크롬 프로세스의 VIRT DATA 열이 너무 높아 보이는데 이것이 가능합니까?
답변1
top
매뉴얼 페이지를 살펴보십시오 .
o: VIRT -- Virtual Image (kb)
The total amount of virtual memory used by the task. It includes all code,
data and shared libraries plus pages that have been swapped out. (Note: you
can define the STATSIZE=1 environment variable and the VIRT will be
calculated from the /proc/#/state VmSize field.)
VIRT = SWAP + RES.
p: SWAP -- Swapped size (kb)
The swapped out portion of a task's total virtual memory image.
또한 다음은 ArchLinux Wiki의 설명입니다.일시 중지 및 최대 절전 모드.
발췌
- RAM 일시 중지 방법은 시스템 상태를 복원하는 데 필요한 RAM을 제외하고 시스템 대부분의 부분에 대한 전원을 제거합니다. 상당한 절전 효과로 인해 컴퓨터가 배터리로 실행 중이고 덮개가 닫혀 있을 때(또는 사용자가 일정 기간 동안 활동하지 않을 때) 랩톱이 자동으로 이 모드로 들어가는 것이 좋습니다.
- 디스크 일시 중지 방법은 시스템 상태를 저장하여 공간을 교환하고 시스템 전원을 완전히 끕니다. 기기의 전원을 켜면 상태가 복원됩니다. 이전에는 전력 소비가 0이었습니다.
이 의견을 바탕으로 귀하의 논리가 정확하다고 생각합니다. 나는 일반적으로 최대 절전 모드를 사용하지 않고 RAM 일시 중지 방법만 사용하기로 선택하므로 스왑 사용량이 급증한 것을 본 적이 없습니다. 이는 위의 내용을 고려하면 의미가 있습니다.
예
$ top
top - 23:40:12 up 15:33, 5 users, load average: 2.49, 2.62, 2.70
Tasks: 307 total, 3 running, 304 sleeping, 0 stopped, 0 zombie
Cpu(s): 47.6%us, 4.6%sy, 0.0%ni, 47.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 7987492k total, 7528920k used, 458572k free, 161664k buffers
Swap: 5963772k total, 40156k used, 5923616k free, 1100816k cached
답변2
난 그렇게 생각하지 않아. 최대 절전 모드는 스왑 공간을 데이터 저장 영역으로 사용하는 것 외에는 스왑과 관련이 없습니다. 스왑을 비활성화하고(모든 스왑 파티션/파일 마운트 해제) 시스템이 최대 절전 모드로 전환될 때(작은 창 사용)에만 다시 마운트할 수도 있습니다. 코스 조건의 경쟁).
즉, 최대 절전 모드 이전 어느 시점에서 커널은 현재 실행되지 않는 프로그램의 특정 코드 페이지(또는 실행되지 않는 부분)를 교체하는 것이 성능 측면에서 더 합리적이라고 결정할 가능성이 더 높다고 생각합니다. 최근에 사용되지 않음) 일부 메모리를 데이터에 사용할 수 있도록 합니다(메모리를 할당하거나 malloc()
파일 memmap()
시스템의 캐시만 사용하여). 이는 귀하의 사용 패턴에 따라 다르며 교환 추세를 조정하여 제어할 수 있습니다 /proc/sys/vm/swappiness
.
답변3
VIRT는 프로세스가 할당한 가상 메모리의 크기입니다. 여기에는 RAM의 페이지, 스왑의 페이지, 다른 프로세스와 공유되는 페이지, 메모리 매핑된 파일 및 기타 몇 가지 유형 등 프로세스 매핑된 모든 것이 포함됩니다.
최대 절전 모드는 모든 프로세스 데이터를 스왑 공간에 기록하여 작동합니다. 최대 절전 모드 메커니즘(Linux에서는 일부 과정을 거침)에 따라 재개할 때 데이터의 일부 또는 대부분이 스왑 영역에 남아 있을 수 있습니다. 페이지는 필요할 때만 로드되므로 복구 속도가 빨라집니다.
프로세스가 전체 RAM을 사용하지 않는 경우에도 스와핑이 발생할 수 있습니다. RAM은 프로세스 메모리뿐만 아니라 디스크 캐시 및 버퍼에도 사용됩니다. 사용 가능한 RAM의 양이 작업 부하에 필요한 양과 거의 비슷한 일반적인 시스템에서는 RAM의 약 절반을 프로세스에서 한 번에 사용해야 하고 나머지 절반은 캐시에서 사용해야 합니다. 여기서는 방금 복원했으므로 캐시가 거의 비어 있고 빨리 채워질 것입니다.