free -m
내 시스템에는 다음이 표시됩니다.
total used free shared buffers cached
Mem: 3954 3842 111 0 248 2585
-/+ buffers/cache: 1008 2945
Swap: 3811 4 3807
따라서 메모리가 소진된 것처럼 보이지만 top
메모리별로 정렬하면 다음과 같은 상위 프로세스가 표시됩니다.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8891 minecraf 20 0 2374m 277m 9.9m S 1 7.0 0:12.21 java
8704 root 39 19 2802m 272m 11m S 0 6.9 0:28.73 java
Java에서 사용하는 가상 메모리는 엄청날 것 같지만 온라인에서 읽어보니 이는 문제가 되지 않습니다. 그래서 제 질문은 이렇습니다. free
그렇게 말이 안 된다면 왜 가상 메모리를 표시합니까?
답변1
"Mem" 줄에는 free
가상 메모리 사용량이 표시되지 않고 실제 메모리 사용량이 표시됩니다.
의 "RES"(주민용) 및 "%MEM" 열은 top
동일한 내용을 보여줍니다.물리적각 프로세스에서 사용되는 메모리입니다.
free
하다사용 가능한 스왑 공간과 사용된 스왑 공간을 표시하고 top
"VIRT" 열이 있습니다. 두 가지 모두 중요합니다. 대략적으로 말하자면, 스왑 공간에 물리적 메모리를 더한 것이 가능한 총 가상 메모리 공간입니다. 해당 한계에 도달하면 프로세스가 종료되거나 메모리 할당에 실패하기 시작하고 상황이 나빠질 것입니다.
답변2
가상 메모리를 파일이나 라이브러리에 매핑할 수 있으므로 VIRT 양이 매우 클 수 있습니다. 저는 ~6g VIRT 메모리를 사용하지만 RESident가 59m인 작은 Java 애플리케이션을 실행하고 있습니다.
Java에서 사용하는 가상 메모리가 엄청 큰 것 같은데 온라인에서 읽어보니 문제가 되지 않는다고 합니다.
가상 메모리가 그다지 중요하지 않은 이유는 사용되지 않거나 사용 가능한 상주 메모리가 필요할 때 스왑 공간(하드 디스크 저장소)으로 페이지 아웃되기 때문입니다. 스왑 공간에 있는 것들은 거의 사용되지 않거나 전혀 사용되지 않지만 어딘가에서 참조되기 때문에 거기에 있습니다. 64비트 운영 체제를 사용하는 경우 사용하는 것보다 더 많은 주소를 처리할 수 있으므로 가상 메모리 관리자가 걱정하지 않아도 됩니다.
이 블로그 게시물에는 프로그래밍의 가상 메모리에 대한 몇 가지 의견이 있습니다.http://antirez.com/post/what-is-wrong-with-2006-programming.html
우선, 자주 사용하는 데이터를 RAM에서 HDD로 바꾸면 안 된다. 그래서 자바가 많은 양의 메모리를 할당하는 것은 문제가 되지 않는다는 말을 듣는다.