打开大小大于 RAM 的文件,不使用交换区。

打开大小大于 RAM 的文件,不使用交换区。

我发现自己在做小实验和阅读 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 会发生什么?

相关内容