free -lh 명령을 사용하여 메모리 사용량을 확인하고 있는데 다음과 같은 결과가 표시됩니다.
total used free shared buffers cached
Mem: 62G 29G 33G 278M 335M 19G
Low: 62G 29G 33G
High: 0B 0B 0B
-/+ buffers/cache: 9.1G 53G
Swap: 15G 0B 15G
보시다시피 사용된 메모리는 29GB이고 사용 가능한 메모리는 33GB이지만 top
명령을 사용하여 동일한 것을 확인하면 다음과 같은 출력이 표시됩니다.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
23555 glassfi+ 20 0 19.896g 5.270g 55092 S 0.0 8.4 121:16.24 java
2457 hg+ 20 0 20.294g 981344 20588 S 0.0 1.5 6:00.18 java
2615 hg+ 20 0 20.294g 950520 20560 S 0.0 1.4 0:22.18 java
1992 tomcat6 20 0 5783768 518860 20976 S 0.0 0.8 8:05.15 java
.................................................
위의 결과를 보면 glassfish는 19GB RAM을 사용하고 hg+는 20GB RAM을 사용한다는 것을 알 수 있는데, 이는 39GB 이상의 RAM이 사용된다는 의미입니다.
내 질문은 왜 free -lh 명령이 29GB RAM만 사용되었는지 표시하는 것입니다.
답변1
"VIRT" 열은 프로세스에 있는 메모리 양을 보여줍니다.할당된, 실제로 사용하는 양보다는. 프로세스는 사용하는 것보다 더 많은 메모리를 할당할 수 있습니다. 이는 큰 힙을 할당하는 경향이 있지만 반드시 모든 것을 사용하지는 않는 Java 프로세스의 경우 특히 그렇습니다. "RES" 열에는 사용한 공간의 양이 표시됩니다. 즉, 프로세스에서 사용하는 공간은 5GiB 이상 glassfish
이고 각각 1GiB 미만입니다 hg
.