#! /bin/bash ## This script attempts to summarise the VPS user_beancounter information ## Run it like this: ## ## ~# ./vpsinfo ## ## or like this: ## ~# cat /proc/user_beancounters > user_beancounters.save ## ~# ./vpsinfo user_beancounters.save ## ## or like this: ## ~# watch -d ./vpsinfo ## BEANCOUNTERS_FILE="${1:-/proc/user_beancounters}" get_beans() { for BEAN in held maxheld barrier limit failcnt; do eval VAL=\$$BEAN eval ${resource}_$BEAN="$VAL" done } div() { TOP="${1:?}" BOTTOM="${2:?}" PRECISION=${3:-2} VAL="$(echo -e "$TOP\n$PRECISION\nk\n$BOTTOM\n/\np" | dc)" echo -n "$VAL" } assert_val() { VARNAME="${1:?}" ASSERTVAL="${2:?}" eval "if [ \$$VARNAME -ne $ASSERTVAL ]; then echo \"Warning: $VARNAME should be $ASSERTVAL, but it is: \$$VARNAME\"; fi" } cat "$BEANCOUNTERS_FILE" | cut -c 13- |\ while read resource held maxheld barrier limit failcnt ZZZ; do case $resource in kmemsize) get_beans 1048576 3 ;; privvmpages|shmpages|numproc|physpages|vmguarpages|oomguarpages) get_beans 256 2 ;; numproc|numtcpsock|numflock|numpty|numsiginfo|tcpsndbuf|tcprcvbuf|\ othersockbuf|dgramrcvbuf|numothersock|dcachesize|numfile|numiptent) get_beans 1 0 ;; esac if [ "$resource" == "numiptent" ]; then echo -n "privvmpages: VPS Shared memory (MBytes): " div $privvmpages_held 256; echo -n " used, " div $privvmpages_barrier 256; echo -n " soft limit, " div $privvmpages_limit 256; echo " hard limit." echo -n "kmemsize: Unswappable kernel memory (MBytes): " div $kmemsize_held 1048576; echo -n " used, " div $kmemsize_barrier 1048576; echo -n " soft limit, " div $kmemsize_limit 1048576; echo " hard limit." echo -n "vmguarpages: Memory allocation guarantee (MBytes): " div $vmguarpages_barrier 256; echo "." echo -n "oomguarpages: Out-of-memory guarantee (MBytes): " div $oomguarpages_held 256; echo -n " used, " div $oomguarpages_barrier 256; echo " limit." echo -n "kmemsize+vmguarpages: Total memory guarantee (MBytes): " div $(($kmemsize_barrier+(4096*$vmguarpages_barrier))) 1048576; echo " limit." echo -n "physpages: Pysical RAM (MBytes): " div $physpages_held 256; echo " used." assert_val vmguarpages_limit 2147483647 assert_val oomguarpages_limit 2147483647 assert_val physpages_barrier 0 assert_val physpages_limit 2147483647 fi done