UBC failcnt reset

From OpenVZ Virtuozzo Containers Wiki
Revision as of 10:25, 16 February 2017 by Finist (talk | contribs) (bugzilla.openvz.org -> bugs.openvz.org)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

One of the frequently asked question is How do I reset failcnt in /proc/user_beancounters? While it's not suggested, it is possible.

What is failcnt?[edit]

There are a number of resource limits (called User Beancounters, or UBC for short) set for a container. If one of those resources hit its limit, the appropriate fail counter (last column of /proc/user_beancounters) increases. See Resource shortage for more info.

How to clear failcnt?[edit]

You do not need to, and this would be an incorrect thing to do.

There can be many applications that read /proc/user_beancounters, and thus if you will reset it, you may have problems with those other apps. Consider what happens if you reset your sent/received packets/bytes statistics on a network interface — programs which track it may not function properly.

Therefore, the proper usage of failcnt is not to check whether it is zero or not, but to check whether it is increased since the previous readout. In other words, check the difference, not the absolute value. There is a utility vzubc(8) which can be used for that purpose. Also, see #Bash script below.

OK, I understand, but I still want to clear failcnt![edit]

UBC failcnts are stored for the duration of the uptime of your container. Thus, restarting the container resets the counts.

The problem here is tcp time wait buckets can still be there after a container is stopped. You can check that by seeing the held column for kmemsize parameter. If it is not zero, that means you have to wait about 5 minutes in order to time wait buckets to expire, and the corresponding beancounter to be uncharged.

If you still see failcnt not reset to 0 after more than 5 minutes after container is stopped, your kernel was likely compiled with CONFIG_UBC_KEEP_UNUSED=y, and in that case you'll have to switch off this option if you want to reset beancounters when container is restarted.

If you're sure your kernel was NOT compiled with the above option and it's not resetting failcnt after 5 minutes, it means there is a bug in UBC code. Please file a detailed bug report to bugs.openvz.org

vzubc[edit]

vzubc(8) is a tool to show user beancounters in a decent human readable form. Its relative mode (option -r or --relative) is used to show the failcnt difference from the previous run. vzubc is available in vzctl package since vzctl-3.0.27.

Alternative bash script[edit]

This script can show the failcount deltas for one or all containers since last reset, and reset the failcounts for one or all containers.

It uses only standard commands and programs that are usually included in all linux distro's: bash, cat, grep, awk, head, tail, printf

Installation[edit]

Create the script and save it somewhere you can use it. This can either be in your home directory, or in a directory mentioned in your path variable (eg. /usr/sbin)

The script is intended to be used as root because it needs write permissions in a directory /var/lib/beanc. If that directory doesn't exist it needs write permissions in /var/lib to be able to create that directory.

You can also run it as any other user that has access to /proc/user_beancounters if you manually fix the permissions on /var/lib/beanc.

Show the beancounters[edit]

beanc show

this compares the contents of /proc/user_beancounters and the reference file, and shows you the delta value if no reference file exists, a copy of the user_beancounters file is used. to only show you the failcounts for 1 container, just add the ctid or container name to the command

beanc show mailserver
beanc show 102

Reset failcounters[edit]

beanc reset mailserver
beanc reset 102
beanc reset                   --> will reset failcounters for all containers

Confirmation will be asked.

Show only failcounts > 0[edit]

beanc brief

Initialize reference file[edit]

beanc init

This will check if the app-directory exists (/var/lib/beanc) and create it if necessary It also creates a reference file (/var/lib/beanc/user_beancounters)

BEWARE, this command will overwrite any existing reference file !

beanc source code[edit]

Expand

Click a link to the right to view the code →

External links[edit]