스왑 영역을 사용하지 않고 RAM보다 큰 파일을 엽니다.

스왑 영역을 사용하지 않고 RAM보다 큰 파일을 엽니다.

나는 약간의 실험을 하고 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를 사용하면 어떻게 되나요?

관련 정보