为什么内存没有完全用于缓存数据

时间:2018-02-09 06:57:26

标签: linux memory-management

在CentOS 7.3.1611(linux内核3.10)上,我的程序是使用缓冲区I / O 读取磁盘设备的I / O绑定,一般linux内核可能会使用完整内存来缓存磁盘数据作为缓冲区,但它总是留下大约20G未使用的内存,并且kswapd守护程序始终保持回收页面。

top - 14:11:47 up 16 days,  2:42,  5 users,  load average: 2.92, 3.18, 3.37
Tasks: 329 total,   2 running, 327 sleeping,   0 stopped,   0 zombie
%Cpu(s):  3.3 us,  7.7 sy,  0.0 ni, 83.3 id,  4.7 wa,  0.0 hi,  1.1 si,  0.0 st
KiB Mem : 13175558+total, 22444704 free, 26496388 used, 82814488 buff/cache
KiB Swap:        0 total,        0 free,        0 used. 10222934+avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                                                                                   
   181 root      20   0       0      0      0 S  13.0  0.0   1395:34 kswapd0

cat / proc / meminfo

MemTotal:       131755580 kB
MemFree:        21335956 kB
MemAvailable:   102232248 kB
Buffers:        75100216 kB
Cached:          6990768 kB
SwapCached:            0 kB
Active:         69447392 kB
Inactive:       38154608 kB
Active(anon):   26890392 kB
Inactive(anon):   709920 kB
Active(file):   42557000 kB
Inactive(file): 37444688 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:               180 kB
Writeback:             0 kB
AnonPages:      25511156 kB
Mapped:            35036 kB
Shmem:           2090184 kB
Slab:            1835540 kB
SReclaimable:    1684472 kB
SUnreclaim:       151068 kB
KernelStack:       15536 kB
PageTables:        59556 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    65877788 kB
Committed_AS:    5750772 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      551220 kB
VmallocChunk:   34358888444 kB
HardwareCorrupted:     0 kB
AnonHugePages:  21006336 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      294840 kB
DirectMap2M:    11159552 kB
DirectMap1G:    124780544 kB

cat / proc / buddyinfo

Node 0, zone      DMA      1      0      1      0      2      1      1      0      1      1      3 
Node 0, zone    DMA32    785    898    869    489    260    227    442    316    142      0      0 
Node 0, zone   Normal  71568 1575732 446338     39      9      0      0      0      0      0      0

sar -B -r 1

Linux 3.10.0-514.el7.x86_64 (PZ-R-01)   02/09/2018  _x86_64_    (32 CPU)

02:13:57 PM  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff
02:13:58 PM 139388.00     48.00   4622.00      0.00 399474.00      0.00  17844.00  17908.00    100.36

02:13:57 PM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
02:13:58 PM  20986792 110768788     84.07  75421044   7021576   5743480      4.36  69832168  38119340       200

似乎免费的内存页面已经足够了,为什么kswapd仍在回收页面?

// 2018/3/13更新

当更新linux内核从3.10到4.4时,它可以使用几乎完整的内存来缓存磁盘数据,因此它必须由kswapd行为引起,并且linux内核3.11改进了页面回收行为。

查看详情: Linux_3.11#Memory_management

0 个答案:

没有答案