Main Menu

Search

Oracle Virtual Server (OVS): SHELL SCRIPT for printing Memory (in GB) & CPU of Running Guest VM's on Dom0 Hypervisor

Create shell script .sh extension with below content. For e.g. lets assume shell script name is printMemCPU.sh inside /tmp.
#!/bin/bash
#set -x

USAGE="usage: $0 [-t (print total values only)] [-m <additional Memory in GB/MB (see -m)>] [-c <additional cpus>] [-m (print mem in MB instead of GB)]"

ADDCPU=0
ADDMEM=0
VMS_USED_MEM=0
VMS_USED_CPU=0
TOTALSONLY=0
UNITMB=0
MEMDIVISOR=1024
MEMUNIT="GB"
while getopts tma:c: name
do
     case $name in
     t)      TOTALSONLY=1;;
     a)      ADDMEM="$OPTARG";;
     m)      MEMUNIT="MB"
         MEMDIVISOR=1;;
     c)      ADDCPU="$OPTARG";;
     ?)     echo  $USAGE;
            exit 1;;
     esac
done
shift $(($OPTIND - 1))

#test -n "$1" && ADDMEM=$1
#test -n "$2" && ADDCPU=$2

export MEM CPU VMS_USED_MEM VMS_USED_CPU
TOTALCPU=`xm info | awk '/^nr_cpus/{print $3}'`
let TOTALMEM=`xm info | awk '/^total_memory/{print $3}'`/$MEMDIVISOR
let FREEMEM=`xm info | awk '/^free_memory/{print $3}'`/$MEMDIVISOR
#echo "TOTALCPU: $TOTALCPU, TOTALMEM: $TOTALMEM, FREEMEM: $FRMEM"
#echo "VMS_USED_CPU: $VMS_USED_CPU, VMS_USED_MEM: $VMS_USED_MEM"

while read line
do
   set $line
   UUID=$1
   MEM=$3
   CPU=$4
   let MEM_IN_UNITS=$MEM/$MEMDIVISOR
   let VMS_USED_MEM=VMS_USED_MEM+$MEM_IN_UNITS
   let VMS_USED_CPU=VMS_USED_CPU+$CPU
   VMNAME=`grep -i OVM_simple_name /OVS/Repositories/*/VirtualMachines/$UUID/vm.cfg | cut -d "'" -f 2`

   test $TOTALSONLY -eq 0 && echo "$VMNAME: $UUID, $MEM_IN_UNITS $MEMUNIT, $CPU cpus"
   #echo "VMS_USED_CPU: $VMS_USED_CPU, VMS_USED_MEM: $VMS_USED_MEM"

done < <(xm list | grep 004)
#set -x
let DOM0_MEM=`xm list | awk '/^Domain-0/{print $3}'`/$MEMDIVISOR
let VMS_USED_MEM=VMS_USED_MEM+DOM0_MEM
#echo "VMS_USED_CPU: $VMS_USED_CPU, VMS_USED_MEM: $VMS_USED_MEM"

let USED_MEM=$TOTALMEM-$FREEMEM
#echo "USED_MEM: $USED_MEM"
let PCT_USED_MEM=$USED_MEM*100/$TOTALMEM
let PCT_CPUUTIL=$VMS_USED_CPU*100/$TOTALCPU

#TOTALS_TEXT="utilization totals: $USED_MEM $MEMUNIT (${PCT_USED_MEM}%), $VMS_USED_CPU cpus (${PCT_CPUUTIL}%)"
#echo "current $TOTALS_TEXT"
#
let FREECPU=$TOTALCPU-$VMS_USED_CPU
echo "current utilization totals: $USED_MEM $MEMUNIT (${PCT_USED_MEM}%), $VMS_USED_CPU cpus (${PCT_CPUUTIL}%). Free: $FREEMEM $MEMUNIT, $FREECPU cpus"

if [ $ADDMEM -ne 0 -o $ADDCPU -ne 0 ]
then
    let ADDMEM=$ADDMEM/$MEMDIVISOR
    let FUTURMEM=$USED_MEM+$ADDMEM
    let FUTURFREEMEM=$FREEMEM-$ADDMEM
    let FUTURCPU=$VMS_USED_CPU+$ADDCPU
    let FUTURFREECPU=$TOTALCPU-$FUTURCPU
        let PCT_USED_MEM=$FUTURMEM*100/$TOTALMEM
        let PCT_CPUUTIL=$FUTURCPU*100/$TOTALCPU
        echo "future utilization totals: $FUTURMEM $MEMUNIT (${PCT_USED_MEM}%), $FUTURCPU cpus (${PCT_CPUUTIL}%). Free: $FUTURFREEMEM $MEMUNIT, $FUTURFREECPU cpus"
fi

Execute shell script. In example listed in this article
/tmp/printMemCPU.sh

Below is sample output we see when running the script. As we can see below we see each running VM and memory & CPU allocated for that VM.
testvm-1: 0004fb00000600000dc80091c7f16169, 4 GB, 1 cpus
testvm-OL7: 0004fb00000600001e84a1ecd1663757, 4 GB, 1 cpus
AppControl: 0004fb00000600001ec36fa6da3a1473, 32 GB, 12 cpus

Products to which Article Applies

Oracle Virtual Server (OVS)


tarun boyella




No comments:

Post a Comment