ITPub博客

首页 > 数据库 > Oracle > [20191204]hugepage相关参数含义.txt

[20191204]hugepage相关参数含义.txt

原创 Oracle 作者:lfree 时间:2019-12-06 08:49:11 0 删除 编辑

[20191204]hugepage相关参数含义.txt

--//别人问题的问题,就是grep -i pages /proc/meminfo输出的HugePages_Total,HugePages_Free,HugePages_Rsvd,HugePages_Surp含义.

#  grep -i pages /proc/meminfo
AnonPages:      31476112 kB
HugePages_Total:   78600
HugePages_Free:     3092
HugePages_Rsvd:     3085
HugePages_Surp:        0
Hugepagesize:       2048 kB

--//为了更好说明,我修改脚本加入asm实例分析:
#  cat huge.sh
#! /bin/bash
total_shmsize=0
total_hugepagesize=0

for pid in `ps -ef | egrep "ora_pmon_|asm_pmon" |egrep -v "grep"|  awk '{print $2}'`
do
        echo
        echo "-----------------------------------------------------------"
        echo
#       ps -ef | grep $pid | grep -v grep
        ps v $pid
        echo

        shmsize=`grep -A 1 'SYSV00000000' /proc/$pid/smaps | grep "^Size:" | awk 'BEGIN{sum=0}{sum+=$2}END{print sum/1024}' |  awk -F"." '{print $1}'`
        hugepagesize=`grep -B 11 'KernelPageSize:     2048 kB' /proc/$pid/smaps | grep "^Size:" | awk 'BEGIN{sum=0}{sum+=$2}END{print sum/1024}' | awk -F"." '{print $1}'`

        echo "INSTANCE SGA (SMALL/HUGE page)"  : $shmsize "MB"
        echo "INSTANCE SGA (HUGE PAGE)" $hugepagesize "MB"

        echo "Percent Huge page :"  $(( $hugepagesize *100 / $shmsize  )) "%"


        total_shmsize=$(( $shmsize + $total_shmsize ))
        total_hugepagesize=$(( $total_hugepagesize + $hugepagesize ))

done

echo
echo "-----------------------------------------------------------"
echo "-----------------------------------------------------------"
echo

echo "SGA TOTAL (SMALL/HUGE page)"  : $total_shmsize "MB"
echo "SGA TOTAL (HUGE PAGE)" $total_hugepagesize "MB"
echo "Percent Huge page :"  $(( $total_hugepagesize *100 / $total_shmsize  )) "%"

#  . /usr/local/bin/huge.sh
-----------------------------------------------------------
   PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
 21310 ?        Ss   419:59      4 168518 2147781 13812  0.0 asm_pmon_+ASM1

INSTANCE SGA (SMALL/HUGE page) : 2044 MB
INSTANCE SGA (HUGE PAGE) 2046 MB
Percent Huge page : 100 %
-----------------------------------------------------------

   PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
 23988 ?        Ss   2304:27     7 189443 79487228 26248  0.0 ora_pmon_dbcn1

INSTANCE SGA (SMALL/HUGE page) : 77568 MB
INSTANCE SGA (HUGE PAGE) 77570 MB
Percent Huge page : 100 %

-----------------------------------------------------------
   PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
 27535 ?        Ss   579:31      0 189443 79485216 18832  0.0 ora_pmon_dben1

INSTANCE SGA (SMALL/HUGE page) : 77568 MB
INSTANCE SGA (HUGE PAGE) 77570 MB
Percent Huge page : 100 %

-----------------------------------------------------------
-----------------------------------------------------------

SGA TOTAL (SMALL/HUGE page) : 157180 MB
SGA TOTAL (HUGE PAGE) 157186 MB
Percent Huge page : 100 %

--//3个实例使用HUGEpages内存157186,157186/2 = 78593.

#  grep -i pages /proc/meminfo
AnonPages:      30329756 kB
HugePages_Total:   78600
HugePages_Free:     3092
HugePages_Rsvd:     3085
HugePages_Surp:        0
Hugepagesize:       2048 kB

--//我的理解
--//HugePages_Total表示总量.
--//HugePages_Free表示没有使用的数量.
--//HugePages_Rsvd表示reserved,保留未用的数量
--//HugePages_Surp表示surplus剩余; 盈余; 结余的数量.

--//HugePages_Total-HugePages_Free+HugePages_Rsvd=78600-3092+3085 = 78593 ,就是当前全部实例使用hugepages的数量.

--//HugePages_Surp表示surplus剩余; 盈余; 结余的数量.实际上设置vm.nr_overcommit_hugepages参数就可以看到.
--//并且vm.nr_hugepages不足的情况下就可以看到.注意测试这样的情况必须设置use_large_pages=only.

--//看我的测试环境:

$ grep "^vm.nr" /etc/sysctl.conf
vm.nr_hugepages = 104
vm.nr_overcommit_hugepages = 1000

SYS@book> show parameter use_large
NAME            TYPE   VALUE
--------------- ------ -----
use_large_pages string ONLY

$ grep -i pages /proc/meminfo
AnonPages:        236260 kB
AnonHugePages:         0 kB
HugePages_Total:     309
HugePages_Free:       68
HugePages_Rsvd:       68
HugePages_Surp:      205
Hugepagesize:       2048 kB

--//我设置vm.nr_hugepages = 104,而实际需求总量是309.这样需要从vm.nr_overcommit_hugepages借用
--//HugePages_Total-vm.nr_hugepages  309-104 = 205.HugePages_Surp表示就是这个含义.

$ . huge.sh
-----------------------------------------------------------
oracle   19367     1  0 15:59 ?        00:00:00 ora_pmon_book
INSTANCE SGA (SMALL/HUGE page) : 616 MB
INSTANCE SGA (HUGE PAGE) 618 MB
Percent Huge page : 100 %
-----------------------------------------------------------
SGA TOTAL (SMALL/HUGE page) : 616 MB
SGA TOTAL (HUGE PAGE) 618 MB
Percent Huge page : 100 %

--//表达能力有限,但愿通过前面的例子能理解这些参数的含义.

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2667178/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4017
  • 访问量
    7991896