我有点奇怪的Linux内存使用情况我想弄清楚。
我有两个流程:nxtcapture
& nxtexport
。这些进程中没有一个真正分配了大量内存,但它们每个都mmap
个1 TB文件。 nxtexport
没有堆分配(除了在启动期间)。 nxtcapture
按顺序写入文件,nxtexport
按顺序读取。由于nxtexport
从nxtcapture
的尾部读取,因此我没有任何读取IO。
ing992:~# iostat -m
Linux 4.4.52-nxt (ing992) 05/25/17 _x86_64_ (32 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
29.17 1.99 0.96 0.06 0.00 67.82
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
loop0 0.02 0.00 0.00 2 0
sdf 16.47 0.06 0.85 4207 61442
sdf1 0.00 0.00 0.00 5 0
sdf2 0.01 0.00 0.00 77 0
sdf3 16.45 0.06 0.85 4115 61442
sdf4 0.00 0.00 0.00 7 0
sde 15.45 0.01 0.85 1032 61442
sde1 0.00 0.00 0.00 5 0
sde2 0.00 0.00 0.00 0 0
sde3 15.44 0.01 0.85 1017 61442
sde4 0.00 0.00 0.00 7 0
sdb 43.08 0.00 15.72 22 1136368
sda 43.07 0.00 15.72 21 1136406
sdc 43.42 0.04 15.72 2711 1136332
sdd 43.07 0.00 15.72 20 1136301
md127 0.01 0.00 0.00 77 0
md126 23.77 0.07 0.85 5132 61145
这一切都很棒。但是,查看内存使用情况,我可以看到以下内容:
这表明超过一半的内存不可用?!这怎么可能?我了解mmap
将保持页面缓存。但是这些(非脏)页面不应该算作可用吗?这里发生了什么?我该怎么调试呢?
free -m
total used free shared buffers cached
Mem: 32020 31608 412 221 13 9655
-/+ buffers/cache: 21939 10081
Swap: 0 0 0