
私はいくつかの実験をして、Linuxでメモリがどのように管理されているかを読んでいる間にこの質問をしました。
私は512M RAMと1G SWAPを備えた64ビットCentos 6.5システムを持っています。 1GBファイル "/mytest"(を使用して)を作成してdd
使用しましたvi
。ファイルが完全に開いた後、別の端末を開いてメモリ使用量を確認しました。予想通り、出力がメモリ使用量に基づいてソートされると、vi
一番上に表示されます。top
そこでスワップ使用量が増えると予想して確認しましたが、驚くべきことにfree -m
スワップ使用量はゼロでした。開いたファイルのサイズはRAMサイズの2倍なので、ファイルはどこにメモリに保存されますか?
[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ファイルをスクロールすることもありましたが、スワップ使用量はまだゼロでした。今、私はメモリとスワッピングがどのように機能するかについての全体的な理解が間違っているようです。ファイルサイズがメモリサイズの2倍の場合、誰かがこの大容量ファイルをメモリに保存する方法を教えてください。
答え1
RAMを使用するには、「薄暗い」エディタを使用する必要があります。 VIが「スワッピング」を実行しているようです。通常、Viはバッファを一時停止するためにファイルを使用します。
このサイトで他の回答を確認したい場合があります。例えば。 : 大容量ファイルにviを使用するとどうなりますか?