nas 上的内存碎片

nas 上的内存碎片

我有一个 qnap nas 单元,我试图在其上创建额外的 iscsi 目标,但创建过程失败。我并没有尝试做我在其他相同单元上没有做过的事情,但这个单元已经运行了很长时间。

ssh 进去看看

dmesg 包含许多其他内容:

[3431220.016334] SLAB: Unable to allocate memory on node 0 (gfp=0xd0)
[3431220.016335]   cache: kmalloc-65536, object size: 65536, order: 4
[3431220.016341]   node 0: slabs: 12/12, objs: 12/12, free: 0

好的,我们找到问题的原因了。

# cat /proc/meminfo 
MemTotal:        3939760 kB
MemFree:          190480 kB
Buffers:         3212476 kB
Cached:           188868 kB
SwapCached:           48 kB

因此所有内存都分配给了缓冲区。在 Linux 机器上,除了阻止 IO 之外几乎不做其他事情,这并不奇怪

# cat /proc/buddyinfo
Node 0, zone      DMA      8      2      1      1      1      1      1      1      2      2      2 
Node 0, zone    DMA32  22614    389      0      1      1      2      3      1      0      0      0 
Node 0, zone   Normal  12150   7683      0      2      5      2      1      1      0      0      0 

哎哟。这显示了一些严重的内存碎片,几乎没有大于 8K 的可用块。除了重新启动机器之外,还有什么方法可以清除内存碎片问题(暂时减少分配给缓冲区的内存或其他方法),这个过程会非常不方便?此外,给这样使用的机器增加更多内存是否有助于解决这个特定问题,升级内存显然还有其他好处。

答案1

尝试发出sync; echo 3 > /proc/sys/vm/drop_caches。这将释放所有缓存/缓冲内存。

如果这不起作用,您可以尝试压缩/碎片整理内存,发出以下命令:echo 1 > /proc/sys/vm/compact_memory

相关内容