重庆思庄Oracle、Redhat认证学习论坛

标题: 使用hugepages_settings.sh的脚本来计算vm.nr_hugepages的值 [打印本页]

作者: jiawang    时间: 2018-5-3 17:29
标题: 使用hugepages_settings.sh的脚本来计算vm.nr_hugepages的值
使用Oracle提供的脚本hugepages_settings.sh的脚本来计算vm.nr_hugepages的值
首先要创建hugepages_settings.sh脚本
[oracle@strong ~]$ vi hugepages_settings.sh
  
[oracle@strong ~]$ more hugepages_settings.sh
  
#!/bin/bash
  
#
  
# hugepages_settings.sh
  
#
  
# Linux bash script to compute values for the
  
# recommended HugePages/HugeTLB configuration
  
#
  
# 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
  
  
# Welcome text
  
echo "
  
This script is provided by Doc ID 401749.1  from My Oracle Support
  
(http://support.oracle.com) where it is  intended to compute values for
  
the recommended HugePages/HugeTLB  configuration for the current shared
  
memory segments. Before proceeding with the  execution please note following:
  
* For ASM instance, it needs to configure  ASMM instead of AMM.
  
* The 'pga_aggregate_target' is outside the  SGA and
  
you should accommodate this while calculating  SGA size.
  
* In case you changes the DB SGA size,
  
as the new SGA will not fit in the previous  HugePages configuration,
  
it had better disable the whole HugePages,
  
start the DB with new SGA size and run the  script again.
  
And make sure that:
  
* Oracle Database instance(s) are up and running
  
* Oracle Database 11g Automatic Memory  Management (AMM) is not setup
  
(See Doc ID 749851.1)
  
* The shared memory segments can be listed by  command:
  
# ipcs -m
  
  
  
Press Enter to proceed..."
  
  
read
  
  
# 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 "Recommended setting:  vm.hugetlb_pool = $HUGETLB_POOL" ;;
  
'2.6') echo "Recommended setting:  vm.nr_hugepages = $NUM_PG" ;;
  
*) echo "Unrecognized kernel version  $KERN. Exiting." ;;
  
esac
  
  
# End
  
[oracle@strong ~]$ chmod +x hugepages_settings.sh
[oracle@strong ~]$ sh hugepages_settings.sh
This script is provided by Doc ID 401749.1 fromMy Oracle Support
(http://support.oracle.com) where it isintended to compute values for
the recommended HugePages/HugeTLB configurationfor the current shared
memory segments. Before proceeding with theexecution please note following:
* For ASM instance, it needs to configure ASMMinstead of AMM.
* The 'pga_aggregate_target' is outside the SGAand
you should accommodate this while calculatingSGA size.
* In case you changes the DB SGA size,
as the new SGA will not fit in the previousHugePages configuration,
it had better disable the whole HugePages,
start the DB with new SGA size and run thescript again.
And make sure that:
* Oracle Database instance(s) are up andrunning
* Oracle Database 11g Automatic MemoryManagement (AMM) is not setup
(See Doc ID 749851.1)
* The shared memory segments can be listed bycommand:
# ipcs -m
Press Enter to proceed...
Recommended setting: vm.nr_hugepages = 1028
[oracle@strong ~]$ ipcs -m
------ Shared Memory Segments --------
key       shmid      owner      perms     bytes      nattch     status     
0x00000000 3342351    oracle    640        16777216   26                     
0x00000000 3375120    oracle    640        2130706432 26                     
0x8c6b104c3407889    oracle     640       2097152    26                                                      






欢迎光临 重庆思庄Oracle、Redhat认证学习论坛 (http://bbs.cqsztech.com/) Powered by Discuz! X3.2