(Oracle)HugePage Size 计算脚本

Posted 特立独行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(Oracle)HugePage Size 计算脚本相关的知识,希望对你有一定的参考价值。

HugePage计算需要SGA等生效,需要先配置好内存

#!/bin/bash
#
# hugepages_settings.sh
#
# Linux bash script to compute values for the
# recommended HugePages/HugeTLB configuration
# on Oracle Linux
#
# Note: This script does calculation for all shared memory
# segments available when the script is run, no matter it
# is an Oracle RDBMS shared memory segment or not.
#
# This script is provided by Doc ID 401749.1 from My Oracle Support
# http://support.oracle.com

# Check for the kernel version
KERN=`uname -r | awk -F. \'{ printf("%d.%d\\n",$1,$2); }\'`

# Find out the HugePage size
HPG_SZ=`grep Hugepagesize /proc/meminfo | awk \'{print $2}\'`
if [ -z "$HPG_SZ" ];then
    echo "The hugepages may not be supported in the system where the script is being executed."
    exit 1
fi

# Initialize the counter
NUM_PG=0

# Cumulative number of pages required to handle the running shared memory segments
for SEG_BYTES in `ipcs -m | cut -c44-300 | awk \'{print $1}\' | grep "[0-9][0-9]*"`
do
    MIN_PG=`echo "$SEG_BYTES/($HPG_SZ*1024)" | bc -q`
    if [ $MIN_PG -gt 0 ]; then
        NUM_PG=`echo "$NUM_PG+$MIN_PG+1" | bc -q`
    fi
done

RES_BYTES=`echo "$NUM_PG * $HPG_SZ * 1024" | bc -q`

# An SGA less than 100MB does not make sense
# Bail out if that is the case
if [ $RES_BYTES -lt 100000000 ]; then
    echo "***********"
    echo "** ERROR **"
    echo "***********"
    echo "Sorry! There are not enough total of shared memory segments allocated for
HugePages configuration. HugePages can only be used for shared memory segments
that you can list by command:

    # ipcs -m

of a size that can match an Oracle Database SGA. Please make sure that:
 * Oracle Database instance is up and running
 * Oracle Database 11g Automatic Memory Management (AMM) is not configured"
    exit 1
fi

# Finish with results
case $KERN in
    \'2.4\') HUGETLB_POOL=`echo "$NUM_PG*$HPG_SZ/1024" | bc -q`;
           echo "vm.hugetlb_pool = $HUGETLB_POOL" ;;
    \'2.6\' | \'3.8\' | \'3.10\' | \'4.1\' | \'4.14\' | \'4.18\' | \'5.4\') echo "vm.nr_hugepages = $NUM_PG" ;;
    *) echo "Kernel version $KERN is not supported by this script (yet). Exiting." ;;
esac

# End

以上是关于(Oracle)HugePage Size 计算脚本的主要内容,如果未能解决你的问题,请参考以下文章

LINUX下为ORACLE数据库设置大页--hugepage

LINUX下为ORACLE数据库设置大页--hugepage

Linux配置hugepage

linux 多大内存 才启用 hugepage

Linux 关闭透明大页(transparent_hugepage)和 NUMA

Linux 关闭透明大页(transparent_hugepage)和 NUMA