共计 853 个字符,预计需要花费 3 分钟才能阅读完成。
如为 oracle 配置了大内存,重启 oracle 实例可在 alter 告警日志中观察是否实例使用了大内存,但是否有其他方式确定某个进程使用了大内存呢,下面以 oracle 为例来说明如何从系统侧获知进程是否使用了大内存。
如 oracle sga 配置为 200G:
SQL> show parameter sga | |
sga_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: 110080 | |
HugePages_Free: 7166 | |
HugePages_Rsvd: 0 | |
HugePages_Surp: 0 |
系统有如下数据库,进程如下所示:
% ps -ef|grep pmon_ | |
grid 111896 1 0 Jan14 ? 00:00:34 asm_pmon_+ASM1 | |
oracle 114732 1 0 Jan14 ? 00:00:54 ora_pmon_db1 | |
grid 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 |
正文完