Changes

Jump to: navigation, search

Setting UBC parameters

6,304 bytes added, 17:49, 29 September 2016
Are you aware of a script that would run as a cron job and do the OOM math on a regular basis and email me if I've hit the red zone or maybe at 85-90%?
{{UBC tocWarning|The information below is obsoleted, you should just use [[VSwap]].}}
[http://forum.swsoft.com/showthread.php?threadid=26770 This thread] has been summarized here on this page.
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:Thank you for everything, unfortunately the only way I have to help is to work with code,I leave something here that I hope you will enjoy and see it very usefull. And yes therewas 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 containersvzn=$(($(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: ====
Yes, oomguarpages current value shows actual usage of MEM+SWAP.

Navigation menu