如为oracle配置了大内存,重启oracle实例可在alter告警日志中观察是否实例使用了大内存,但是否有其他方式确定某个进程使用了大内存呢,下面以oracle为例来说明如何从系统侧获知进程是否使用了大内存。

如oracle sga配置为200G:

SQL> show parameter sgasga_target                           big integer 200G

系统配置大内存情况:

% cat /etc/sysctl.conf vm.nr_hugepages                       = 110080 vm.hugetlb_shm_group                  = 5001

当前大内存使用情况:(110080-7166)*2/1024=201G

% grep HugePages_ /proc/meminfo HugePages_Total:   110080HugePages_Free:     7166HugePages_Rsvd:        0HugePages_Surp:        0

系统有如下数据库,进程如下所示:

% ps -ef|grep pmon_grid     111896      1  0 Jan14 ?        00:00:34 asm_pmon_+ASM1oracle   114732      1  0 Jan14 ?        00:00:54 ora_pmon_db1grid     248262      1  0 Jan14 ?        00:00:18 mdb_pmon_-MGMTDB

那么,我们可使用如下命令或者进程使用的大内存情况:

# db1实例使用了200G大内存:% grep -B 11 'KernelPageSize:     2048 kB' /proc/114732/smaps \  | grep "^Size:" | awk 'BEGIN{sum=0}{sum+=$2}END{print "gb: "sum/1024/1024}'gb: 200.002# MGMTDB实例使用了1G大内存:% grep -B 11 'KernelPageSize:     2048 kB' /proc/248262/smaps \  | grep "^Size:" | awk 'BEGIN{sum=0}{sum+=$2}END{print "gb: "sum/1024/1024}'gb: 1.00195