我发现自己在做小实验和阅读 Linux 中的内存管理方式时问了这个问题。
我有一台 64 位 Centos 6.5 机器,512M RAM 和 1G SWAP。我创建了一个 1GB 文件“/mytest”(使用dd
)并使用vi
.文件完全打开后,我打开另一个终端来查看内存使用情况。正如预期的那样,当输出按内存使用情况排序vi
时, 会显示在顶部。top
所以我检查了一下free -m
,希望看到交换使用率上升,但令我惊讶的是,交换使用率为零。由于打开的文件大小是 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
我什至滚动浏览打开的 1G 文件,看看仅当我滚动时(sleep
在另一个终端中使用)交换使用率是否会上升,但交换使用率仍然为零。现在看来我对内存和交换如何工作的整个理解是错误的。当文件大小是内存大小的两倍时,有人可以阐明如何在内存中保存这个巨大的文件吗?
答案1
最有可能的是,您需要使用“笨拙”编辑器来使用 RAM,我认为是 VI 为您进行“交换”。通常 Vi 使用文件来挂起其缓冲区。
您可能想查看该网站上的其他答案。例如。: 如果我对大文件使用 vi 会发生什么?