In my system Lowmem of kernel (NORMALZONE) is 597424 kb length. As far as I learn, it should be about 890 MB at max. Why this system uses ~590 MB? Is it tunable?
I a asking this because, I'am facing with lowmem oom conditions on this system time-to-time. So I want to use lowmem as bigger as possible.

Linux 3.10.24-2 #1 SMP Tue Dec 31 07:09:19 EET 2013 i686 i686 i386 GNU/Linux

# free -lk
             total       used       free     shared    buffers     cached
Mem:      37426296    3369432   34056864          0      36048    1373524
Low:        597424     278236     319188
High:     36828872    3091196   33737676
-/+ buffers/cache:    1959860   35466436
Swap:     35318864          0   35318864

# cat /proc/meminfo
MemTotal:       37426296 kB
MemFree:        33971268 kB
Buffers:           36172 kB
Cached:          1383668 kB
SwapCached:            0 kB
Active:          2034844 kB
Inactive:        1036224 kB
Active(anon):    1656904 kB
Inactive(anon):    12716 kB
Active(file):     377940 kB
Inactive(file):  1023508 kB
Unevictable:           0 kB
Mlocked:               0 kB
HighTotal:      36828872 kB
HighFree:       33667168 kB
LowTotal:         597424 kB
LowFree:          304100 kB
SwapTotal:      35318864 kB
SwapFree:       35318864 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:       1653176 kB
Mapped:           138320 kB
Shmem:             18348 kB
Slab:             117464 kB
SReclaimable:      44796 kB
SUnreclaim:        72668 kB
KernelStack:        7704 kB
PageTables:        97184 kB
NFS_Unstable:          0 kB
Bounce:              116 kB
WritebackTmp:          0 kB
CommitLimit:    65259900 kB
Committed_AS:    3876084 kB
VmallocTotal:     122880 kB
VmallocUsed:       27020 kB
VmallocChunk:      23732 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       10232 kB
DirectMap2M:      901120 kB
  • 1
    Again, you really should be running 64-bit Linux. – Michael Hampton Dec 31 '13 at 6:29
  • As mentioned previously, there is no simple way to tune your way out of this problem. The zones sizes are not tunable. – Matthew Ife Dec 31 '13 at 7:48

I'm not sure that I'll be heard this time but I'll try anyway: switching to x86_64 is not as hard as you think it is.

But I guess you still need some kind of explanation. I propose that if you'd have only 4G of memory then a LowTotal would equal to ~850mb, for 16G it would be around ~750mb and for 64G it would be ~378mb.

Let me cite Linux Torvalds:

All your low memory is used for the struct page arrays that describe everything else.

So actually workaround for your problem is to reduce amount of memory server has (physically or possibly via mem boot param but I have not checked).
Also you can change kernel/userspace split via VMSPLIT_2G kernel config option.
But really, switch to x86_64 is just easier, isn't it? =]

PS. You can actually use x86 userland with x86_64 kernel.

  • Thank you. It is now clearly understood that normal zone will be used also for high zone mapping. So more ram less low memory zone. – seaquest Jan 1 '14 at 8:57

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.