나는 약간의 실험을 하고 Linux에서 메모리가 어떻게 관리되는지 읽는 동안 이 질문을 하게 되었습니다.
저는 512M RAM과 1G SWAP을 갖춘 64비트 Centos 6.5 시스템을 가지고 있습니다. 1GB 파일 "/mytest"( 를 사용하여)를 만들고 dd
사용했습니다 vi
. 파일이 완전히 열린 후 다른 터미널을 열어 메모리 사용량을 확인했습니다. 예상대로 출력이 메모리 사용량에 따라 정렬되면 vi
맨 위에 표시됩니다. top
그래서 스왑 사용량이 늘어날 것으로 예상하고 확인했는데 free -m
놀랍게도 스왑 사용량이 0이었습니다. 열린 파일의 크기가 RAM 크기의 두 배이므로 파일은 메모리에 어디에 저장됩니까?
[root@server ~]# ps aux | grep mytest
root 18940 8.5 53.3 287880 267156 pts/0 S+ 09:25 0:28 vi /mytest
root 18976 0.0 0.0 364 144 pts/1 R+ 09:31 0:00 grep mytest
[root@server ~]# ll -h /mytest
-rw-r--r-- 1 root root 1000M Oct 24 09:25 /mytest
[root@server ~]# free -m
total used free shared buffers cached
Mem: 489 481 7 0 2 140
-/+ buffers/cache: 337 151
Swap: 1023 0 1023
Swappiness가 켜져 있으며 기본값은 60입니다. top
출력 에서 VIRT 및 RES의 메모리 사용량은 예상한 대로 약 1G에 도달하지 않습니다.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18940 root 20 0 281m 260m 1172 S 0.0 53.3 0:28.85 vi /mytest
sleep
스크롤할 때만(다른 터미널에서 사용) 스왑 사용량이 올라가는지 확인하기 위해 열린 1G 파일을 스크롤하기도 했지만 스왑 사용량은 여전히 0이었습니다. 이제 메모리와 스와핑이 어떻게 작동하는지에 대한 나의 전체적인 이해가 잘못된 것 같습니다. 파일 크기가 메모리 크기의 두 배일 때 누군가 이 대용량 파일을 메모리에 저장하는 방법에 대해 알려줄 수 있습니까?
답변1
RAM을 사용하려면 "투박한" 편집기를 사용해야 할 가능성이 높습니다. VI가 "스와핑"을 수행하는 것 같습니다. 일반적으로 Vi는 버퍼를 일시 중단하기 위해 파일을 사용합니다.
이 사이트에서 다른 답변을 확인하고 싶을 수도 있습니다. 예를 들어. : 대용량 파일에 vi를 사용하면 어떻게 되나요?