
top
아래 표시된 출력을 고려하면 (모두free
프로세스가 현재 활성 상태임): 이 가상 서버가 사용된 물리적 메모리가 ~500M(사용됨 - 캐시됨, 에서 확인됨 )로 보고하는 반면 'RES' 합계는 그보다 훨씬 낮다는 것이 어떻게 가능합니까 ? 합계가 RES
항상 사용된 실제 메모리를 초과해서는 안 되나요? 메모리는 무엇을 위해 사용될 수 있습니까?
top - 08:43:23 up 75 days, 5:00, 1 user, load average: 0.08, 0.08, 0.04
Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 0.1%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2400000k total, 713792k used, 1686208k free, 0k buffers
Swap: 0k total, 0k used, 0k free, 200764k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 19232 544 384 S 0.0 0.0 0:00.08 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd/201208
3 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khelper/2012080
323 pdns-rec 20 0 169m 2980 1152 S 0.0 0.1 1:58.98 pdns_recursor
560 root 20 0 6160 200 196 S 0.0 0.0 0:00.00 portreserve
578 dbus 20 0 21536 324 284 S 0.0 0.0 0:00.00 dbus-daemon
598 nobody 20 0 17040 2108 880 S 0.0 0.1 4:48.33 openvpn
607 nobody 20 0 16124 1112 724 S 0.0 0.0 0:41.54 openvpn
1347 root 20 0 78732 592 508 S 0.0 0.0 0:12.35 master
1355 postfix 20 0 78984 612 516 S 0.0 0.0 0:02.63 qmgr
1515 root 20 0 9232 564 396 S 0.0 0.0 0:39.69 gam_server
11077 root 16 -4 10648 272 268 S 0.0 0.0 0:00.00 udevd
12912 root 20 0 168m 57m 3040 S 0.0 2.4 0:56.31 puppetd
13187 root 20 0 11308 1224 1220 S 0.0 0.1 0:00.00 mysqld_safe
13295 mysql 20 0 1348m 44m 4232 S 0.0 1.9 246:49.61 mysqld
13391 root 20 0 66608 516 404 S 0.0 0.0 0:00.00 sshd
13411 root 20 0 20468 740 644 S 0.0 0.0 0:00.71 crond
13452 root 20 0 243m 1428 820 S 0.0 0.1 0:00.36 rsyslogd
16087 app 20 0 14896 1096 880 R 0.0 0.0 0:00.00 top
18993 newrelic 20 0 25764 124 84 S 0.0 0.0 0:00.00 nrsysmond
18994 newrelic 20 0 103m 1540 1036 S 0.0 0.1 0:46.22 nrsysmond
23268 postfix 20 0 81356 3384 2508 S 0.0 0.1 0:00.00 pickup
29550 root 20 0 387m 3516 1088 S 0.0 0.1 2:25.48 fail2ban-server
31434 root 20 0 96264 2408 2376 S 0.0 0.1 0:00.00 sshd
31438 user 20 0 96264 816 640 S 0.0 0.0 0:00.25 sshd
31439 user 20 0 105m 1264 1260 S 0.0 0.1 0:00.00 bash
31456 root 20 0 165m 1768 1764 S 0.0 0.1 0:00.00 sudo
31457 root 20 0 138m 1020 1016 S 0.0 0.0 0:00.00 su
31458 app 20 0 13440 3332 1492 S 0.0 0.1 0:00.07 bash
참고: 내가 묻는 것은 사람들이 일반적으로 묻는 것과 정반대입니다.
요청 cat /proc/memoinfo
:
MemTotal: 2400000 kB
MemFree: 1682660 kB
Cached: 202948 kB
Active: 132988 kB
Inactive: 180704 kB
Active(anon): 19668 kB
Inactive(anon): 91076 kB
Active(file): 113320 kB
Inactive(file): 89628 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 4 kB
Writeback: 0 kB
AnonPages: 110744 kB
Shmem: 2568 kB
Slab: 2268056 kB
SReclaimable: 2260740 kB
SUnreclaim: 7316 kB
저는 가상화 기술이 Virtuozzo라고 믿습니다.
답변1
특히 VM과 관련하여 "밖에서, 들여다보고" 대 "내부, 둘러보고"
VM에서 최대 500MB의 사용을 보고하지만 top
사용 중인 RAM이 훨씬 적게 표시되는 이유는 무엇입니까?
VM이 ~500MB 사용을 보고하지만(VM 관리자에서 가정) 총계가 RES
훨씬 낮은 경우 이는 예상된 것입니다.
VM(VMware, Virtuozzo 컨테이너, Hyper-V 또는 Solaris Zone)은 프로세스에서 사용하는 것보다 더 많은 RAM을 소비합니다. 실제로 VM을 실행하는 데 필요한 "오버헤드"는 해당 측정항목(가상 장치 매핑, 가상 장치 캐시(예: 네트워크 및 디스크), 커널 공간 등)으로 집중됩니다.
완전성을 기하기 위해 대부분의 사람들이 묻는 "반대" 문제에 대해 간략하게 설명하겠습니다(이것이 제가 이 질문을 찾은 방법입니다).
Top의 "Resident Set" 크기( RES
)는 물리적 메모리보다 "더 큼"
MM_ANONPAGES
상주 세트 크기는 "익명"( ) 페이지와 "파일 지원"( MM_FILEPAGES
) 페이지 의 합계로 커널에 의해 계산됩니다 . 단일 페이지가 여러 번 계산될 수 있으므로(여러 프로세스로 인해) 이는 실행 중인 모든 프로세스에서 RES
in이 top
계산되는 이유를 설명하며 가능한 것보다 더 많은 메모리를 소비하는 것처럼 보입니다.