Real Memory Consumption = Total – (free + buffers + cached)
# free -m
total used free shared buffers cached
Mem: 15943 15678 265 6 511 3706
-/+ buffers/cache: 11460 4483
Swap: 8159 0 8159
# cat /proc/meminfo|grep -i huge
AnonHugePages: 0 kB
HugePages_Total: 4916
HugePages_Free: 3413
HugePages_Rsvd: 35
HugePages_Surp: 0
Hugepagesize: 2048 kB
The total memory reserved for huge pages is approximately 10 G ((4916 * 2048) /1024/1024)
This is approximately equal to 'used' on the second line of the 'free -m' command 11460/1024 = 11G
On an Oracle database server, the Huge Pages should be about 70-80% of the physical RAM - varies with size, not a hard rule.
On an Oracle database server, the ulimits for the oracle user should be set accordingly - this means that the Oracle user
hard and soft limits for memory should be set high enough
Following files are modified to enable Huge Pages and disable transparent huge pages
/etc/grub.conf
kernel …… transparent_hugepage=never
--> reboot
Example:
8G RAM --> set 70% for Huge Pages = 5.6G --> set vm.nr_hugepages=2688 in /etc/sysctl.conf --> 5.55G HugePages
--> 2 databases with SGA_TARGET set to 2.6G or 1 database with SGA_TARGET set to 5.5G
MEMORY_TARGET set to 0 (AMM should be disabled when Huge Pages are configured)
/etc/sysctl.conf
vm.nr_hugepages=2688
(a number representing the number of pages – no unit)
Multiply by 2048 (K) and divide by 1024*1024 to get the number of GB of memory --> 5.55 G in this case
vm.hugetlb_shm_group=3000
/etc/security/limits.conf
e.g set 7G = 7*1024*1024 = 7340032 --> for a server with 8G of memory
Another example for memlock ulimits:
Set the value (in KB) slightly smaller than installed RAM. e.g. If you have 64GB RAM installed, you may set
soft memlock 60397977
hard memlock 60397977
(works out to 57G)