Latest revision |
Your text |
Line 1: |
Line 1: |
− | {{Warning|The information below is obsoleted, you should just use [[VSwap]].}} | + | {{UBC toc}} |
| | | |
| [http://forum.swsoft.com/showthread.php?threadid=26770 This thread] has been summarized here on this page. | | [http://forum.swsoft.com/showthread.php?threadid=26770 This thread] has been summarized here on this page. |
Line 113: |
Line 113: |
| We don't have such script but you can just take a look at the last column of /proc/user_beancounters. Nonzero values there mean that resource allocations were rejected. | | We don't have such script but you can just take a look at the last column of /proc/user_beancounters. Nonzero values there mean that resource allocations were rejected. |
| | | |
− | <pre>Rojoblandino wrote:
| + | === Can you please elaborate the difference between oomguarpages and privvmpages?=== |
− | Thank you for everything, unfortunately the only way I have to help is to work with code,
| + | Both seem to be showing mem + swap. Is the difference between two about allocated but not used pages? I mean, privvmpages show allocated (some of which might not be used) for mem + swap, whereas oomguarpages show allocated, all of which are used, mem + swap? ==== |
− | I leave something here that I hope you will enjoy and see it very usefull. And yes there
| |
− | was not any script but now there is one. Greetings and have fun.</pre>
| |
− | | |
− | <pre>
| |
− | #!/bin/bash
| |
− | # Openvz Containers Memory Status
| |
− | # Version 1.5
| |
− | # Reference: http://wiki.openvz.org/Setting_UBC_parameters
| |
− | | |
− | # The program is placed under the GNU Public License (GPL)
| |
− | # Author: Roberto Blandino Cisneros.
| |
− | # Under any change please notify me
| |
− | # rojoblandino(at)yahoo.com
| |
− | | |
− | # Advantages or changes:
| |
− | # 1) Calculation of vz containers.
| |
− | # 2) Percentage Calculation.
| |
− | # 3) Avoid simples wrong characters and out of range entry.
| |
− | # 4) Use the same same order of vzlist output.
| |
− | # 5) Problems on vzid param mistakes fixed.
| |
− | # 6) Fixed when 0 passed by param an error appear
| |
− | | |
− | # The usage of this script is easy.
| |
− | # To understand how it works first you must know
| |
− | # the quantity of your containers so it is the
| |
− | # first thing we do.
| |
− | # Each container get a number if you have three
| |
− | # containers e.g. eva gira huna
| |
− | # Depending of the order ar shown in
| |
− | # /proc/user_beancounters that number of position
| |
− | # will be taken.
| |
− | # If eva, gira and huna containers are shown in that
| |
− | # order they will be 1 2 and 3 respectively.
| |
− | # Is so simple like that, then if you want to see
| |
− | # the status for gira container you must type in
| |
− | # your shell:
| |
− | # $> bash vmstatus.sh 2
| |
− | # And you will see the status of this container.
| |
− | | |
− | # First thing to do is to get the list of containers
| |
− | vzn=$(($(vzlist | wc -l)-1))
| |
− | | |
− | case $# in
| |
− | 1)
| |
− | # Get the container to be calculated
| |
− | vm_param=$1
| |
− | | |
− | # Just avoiding our human error
| |
− | datachk=$(echo $vm_param | grep -e [a-z] | wc -l)
| |
− | if let "datachk>0";then
| |
− | printf "That's not a valid number!\n"
| |
− | exit
| |
− | fi
| |
− | | |
− | # Avoiding another mistake maybe the user forgot the quantity of vm allocated
| |
− | if let "vm_param>vzn";then
| |
− | printf "Container out of range, please try a number between 1 and %d\n" "$vzn"
| |
− | exit
| |
− | elif let "vm_param==0";then
| |
− | printf "This value is not available, value must be higher than 0 \n"
| |
− | exit
| |
− | fi
| |
− | | |
− | # Take the real position of the container to get from the vzlist
| |
− | # for avoiding the first line we add one line more, this mean that id
| |
− | # will be taken from the 2nd line ahead
| |
− | let $vm "vm=vm_param+1"
| |
− | | |
− | # Uncomment this and comment the line above if you want to switch the order
| |
− | # let $vm "vm=(n-vm_param)+2"
| |
− | | |
− | # Take the id from the vzlist output
| |
− | id_vm=$(vzlist | head -$vm | tail -1|awk '{print $1}')
| |
− | | |
− | # Get the line where is located the vm to be calculated
| |
− | val=$(grep -n $id_vm /proc/user_beancounters | awk -F: '{print $1}')
| |
− | | |
− | # Adding the 23 block where the info is located
| |
− | let $val "val=23+(val)"
| |
− | | |
− | # If you want to see all values of the vm uncomment this
| |
− | #head -$val /proc/user_beancounters | tail -24
| |
− | | |
− | # The math start here.
| |
− | # To understand what i am doing here i will repeat again that
| |
− | # you must read carefully the page http://wiki.openvz.org/Setting_UBC_parameters
| |
− | # the only thing i do was to get the values explained already there.
| |
− | kmemsize=$(head -$val /proc/user_beancounters | tail -24 | head -1 | tail -1 | awk '{print $3}')
| |
− | oomguarpages=$(head -$val /proc/user_beancounters | tail -24 | head -9 | tail -1 | awk '{print $2}')
| |
− | tcpsndbuf=$(head -$val /proc/user_beancounters | tail -24 | head -14 | tail -1 | awk '{print $2}')
| |
− | tcprcvbuf=$(head -$val /proc/user_beancounters | tail -24 | head -15 | tail -1 | awk '{print $2}')
| |
− | othersockbuf=$(head -$val /proc/user_beancounters | tail -24 | head -16 | tail -1 | awk '{print $2}')
| |
− | dgramrcvbuf=$(head -$val /proc/user_beancounters | tail -24 | head -17 | tail -1 | awk '{print $2}')
| |
− | oomguarpages_barrier=$(head -$val /proc/user_beancounters | tail -24 | head -9 | tail -1 | awk '{print $4}')
| |
− | | |
− | # Three current values need to be calculated:
| |
− | # oomguarpages current value (MEM+SWAP actual usage)
| |
− | # socket buffers current value
| |
− | # kmemsize current value
| |
− | let $resp "resp=((oomguarpages*4096)+tcpsndbuf+tcprcvbuf+othersockbuf+dgramrcvbuf+kmemsize)"
| |
− | | |
− | # Calculating the oom Barrier
| |
− | let $oom "oom=(oomguarpages_barrier*4096)"
| |
− | | |
− | # Getting the percentage of the output
| |
− | let $porc "porc=(resp*100)/oom"
| |
− | | |
− | # Showing the ID and Percentage of the container
| |
− | #echo $(head -$val /proc/user_beancounters | tail -24| head -1 | awk -F: '{print $1}')" Status: "$porc"%"
| |
− | printf "%s Status: %d %%\n" "$(head -$val /proc/user_beancounters | tail -24| head -1 | awk -F: '{print $1}' | sed "s/^\ *//g")" "$porc"
| |
− | | |
− | # Showing the two important values.
| |
− | string1="System Count:"
| |
− | string2="OOM Barrier:"
| |
− | ls1=${#string1}
| |
− | ls2=${#resp}
| |
− | if let "ls1<ls2";then
| |
− | let $ls3 "ls3=ls2-ls1"
| |
− | for (( i=0;i<$ls3;i++ ));do
| |
− | space_line=$space_line" "
| |
− | done
| |
− | printf "System Count:%s\t-\tOOM Barrier:\n" "$space_line"
| |
− | printf "%s\t-\t%s\n" "$resp" "$oom"
| |
− | elif let "ls1>ls2";then
| |
− | let $ls3 "ls3=ls1-ls2"
| |
− | for (( i=0;i<$ls3;i++ ));do
| |
− | space_line=$space_line" "
| |
− | done
| |
− | printf "System Count:\t-\tOOM Barrier:\n"
| |
− | printf "%s%s\t-\t%s\n" "$resp" "$space_line" "$oom"
| |
− | else
| |
− | printf "System Count:\t-\tOOM Barrier:\n"
| |
− | printf "%s\t-\t%s\n" "$resp" "$oom"
| |
− | fi
| |
− | # Uncoment this if you just want to now if it is below to barrier
| |
− | # it means is healthy if resp is less than oom
| |
− | # if let "resp<oom";then
| |
− | # Or let the following if you want to evaluate as a percentage
| |
− | # 75% is by default you must change it to your own warning barrier.
| |
− | if let "porc<75";then
| |
− | echo "It is ok!"
| |
− | else
| |
− | echo "Some of the processes will be killed!"
| |
− | fi
| |
− | ;;
| |
− | *)
| |
− | echo "Just one parameter is allowed for this script"
| |
− | echo "e.g. "$0" 1 "
| |
− | ;;
| |
− | | |
− | esac
| |
− | </pre>
| |
− | | |
− | === Can you please elaborate the difference between oomguarpages and privvmpages? === | |
− | | |
− | Both seem to be showing mem + swap. Is the difference between two about allocated but not used pages? I mean, privvmpages show allocated (some of which might not be used) for mem + swap, whereas oomguarpages show allocated, all of which are used, mem + swap? | |
− | | |
| ==== Answer: ==== | | ==== Answer: ==== |
| Yes, oomguarpages current value shows actual usage of MEM+SWAP. | | Yes, oomguarpages current value shows actual usage of MEM+SWAP. |