<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.openvz.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dosborn</id>
	<title>OpenVZ Virtuozzo Containers Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.openvz.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dosborn"/>
	<link rel="alternate" type="text/html" href="https://wiki.openvz.org/Special:Contributions/Dosborn"/>
	<updated>2026-06-13T18:51:54Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.1</generator>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Human_readable_user_beancounters&amp;diff=6642</id>
		<title>Human readable user beancounters</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Human_readable_user_beancounters&amp;diff=6642"/>
		<updated>2008-11-09T19:18:41Z</updated>

		<summary type="html">&lt;p&gt;Dosborn: Added patch to display VE hostname&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UBC toc}}&lt;br /&gt;
&lt;br /&gt;
For newbies to openvz it is fairly difficult to understand the meaning of the numbers in '''/proc/user_beancounters''' file. Calculating the values to something understandable for human brain everytime you look at these statistics is much work. I have written a perl script which reformats the output to human-readable values in kbyte and mbyte.&lt;br /&gt;
&lt;br /&gt;
Just be sure you have Perl installed on your HN/VE, copy this script to somewhere on your machine, give it executable rights and start it. The output will be like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BEANS FOR UID 254&lt;br /&gt;
resource                     held              maxheld              barrier                limit              failcnt&lt;br /&gt;
kmemsize                 15.14 mb             18.72 mb            150.30 mb            167.00 mb                    0&lt;br /&gt;
lockedpages                     0                    0             16.00 mb             16.00 mb                    0&lt;br /&gt;
privvmpages             433.79 mb            544.63 mb           2929.69 mb           3222.66 mb                    0&lt;br /&gt;
shmpages                 11.58 mb             11.64 mb            512.00 mb            512.00 mb                    0&lt;br /&gt;
numproc                        84                  101                  500                  500                    0&lt;br /&gt;
physpages               278.24 mb            395.75 mb                    0            MAX_ULONG                    0&lt;br /&gt;
vmguarpages                     0                    0            244.14 mb            MAX_ULONG                    0&lt;br /&gt;
oomguarpages            279.66 mb            396.98 mb            122.07 mb            MAX_ULONG                    0&lt;br /&gt;
numtcpsock                     25                   53                  500                  500                    0&lt;br /&gt;
numflock                       18                   22                  200                  220                    0&lt;br /&gt;
numpty                          4                    4                   64                   64                    0&lt;br /&gt;
numsiginfo                      0                   11                  512                  512                    0&lt;br /&gt;
tcpsndbuf               569.75 kb            679.25 kb              5.12 mb             10.00 mb                    0&lt;br /&gt;
tcprcvbuf               400.00 kb              1.28 mb              5.12 mb             10.00 mb                    0&lt;br /&gt;
othersockbuf            213.00 kb            284.25 kb              1.43 mb              3.88 mb                    0&lt;br /&gt;
dgramrcvbuf               0.00 kb              8.25 kb            256.00 kb            256.00 kb                    0&lt;br /&gt;
numothersock                  155                  175                  500                  500                    0&lt;br /&gt;
dcachesize              619.68 kb            656.68 kb              4.00 mb              4.12 mb                    0&lt;br /&gt;
numfile                      2008                 2397                 9312                 9312                    0&lt;br /&gt;
numiptent                      10                   10                  128                  128                    0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The script is the following, just copy and paste:&lt;br /&gt;
&amp;lt;source lang=perl&amp;gt;&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
###############################################################################&lt;br /&gt;
# vzstats.pl&lt;br /&gt;
#&lt;br /&gt;
# this script reads /proc/user_beancounters on openvz HNs and VEs and displays&lt;br /&gt;
# the values in human-readable format (megabytes/kilobytes).&lt;br /&gt;
#&lt;br /&gt;
# The script can be distributed freely for everybody who finds it usable.&lt;br /&gt;
#&lt;br /&gt;
# Christian Anton &amp;lt;mail |_at_| christiananton.de&amp;gt; 2008-09-18&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
open(BEANS,&amp;quot;/proc/user_beancounters&amp;quot;);&lt;br /&gt;
chomp ($arch = `uname -m`);&lt;br /&gt;
&lt;br /&gt;
sub check_maxulong {&lt;br /&gt;
	my $number = shift;&lt;br /&gt;
&lt;br /&gt;
	if ($arch eq &amp;quot;x86_64&amp;quot;) {&lt;br /&gt;
		if ($number == 9223372036854775807) {&lt;br /&gt;
			return 1;&lt;br /&gt;
		} else {&lt;br /&gt;
			return undef;&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		if ($number == 2147483647) {&lt;br /&gt;
			return 1;&lt;br /&gt;
		} else {&lt;br /&gt;
			return undef;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub recalc_bytes {&lt;br /&gt;
	my $bytes = shift;&lt;br /&gt;
&lt;br /&gt;
	if (defined(&amp;amp;check_maxulong($bytes))) { return &amp;quot;MAX_ULONG&amp;quot;; }&lt;br /&gt;
&lt;br /&gt;
	my $kbytes = $bytes / 1024;&lt;br /&gt;
	my $ret;&lt;br /&gt;
	&lt;br /&gt;
	# if over 1mb, show mb values&lt;br /&gt;
	if ($kbytes &amp;gt; 1024) {&lt;br /&gt;
		my $mbytes = $kbytes / 1024;&lt;br /&gt;
		$ret = sprintf(&amp;quot;%.2f&amp;quot;, $mbytes) . &amp;quot; mb&amp;quot;;&lt;br /&gt;
		return $ret;&lt;br /&gt;
	} else {&lt;br /&gt;
		$ret = sprintf(&amp;quot;%.2f&amp;quot;, $kbytes) . &amp;quot; kb&amp;quot;;&lt;br /&gt;
		return $ret;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub recalc_pages {&lt;br /&gt;
	my $pages = shift;&lt;br /&gt;
&lt;br /&gt;
	if ($pages == 0) { return &amp;quot;0&amp;quot;; }&lt;br /&gt;
	if (defined(&amp;amp;check_maxulong($pages))) { return &amp;quot;MAX_ULONG&amp;quot;; }&lt;br /&gt;
&lt;br /&gt;
	my $kbytes = $pages * 4;&lt;br /&gt;
	my $ret;&lt;br /&gt;
&lt;br /&gt;
	if ($kbytes &amp;gt; 1024) {&lt;br /&gt;
		my $mbytes = $kbytes / 1024;&lt;br /&gt;
		$ret = sprintf(&amp;quot;%.2f&amp;quot;, $mbytes) . &amp;quot; mb&amp;quot;;&lt;br /&gt;
		return $ret;&lt;br /&gt;
	} else {&lt;br /&gt;
		$ret = sprintf(&amp;quot;%.2f&amp;quot;, $kbytes) . &amp;quot; kb&amp;quot;;&lt;br /&gt;
		return $ret;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub recalc_nothing {&lt;br /&gt;
	my $number = shift;&lt;br /&gt;
	if (defined(&amp;amp;check_maxulong($number))) { return &amp;quot;MAX_ULONG&amp;quot;; }&lt;br /&gt;
&lt;br /&gt;
	return $number;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub printline {&lt;br /&gt;
	my $mode = shift; # 0=normal, 1=bytes, 2=pages&lt;br /&gt;
	my $ident = shift;&lt;br /&gt;
	my $held = shift;&lt;br /&gt;
	my $maxheld = shift;&lt;br /&gt;
	my $barrier = shift;&lt;br /&gt;
	my $limit = shift;&lt;br /&gt;
	my $failcnt = shift;&lt;br /&gt;
&lt;br /&gt;
	if ($mode == 0) {&lt;br /&gt;
		printf (&amp;quot;%-15s&amp;quot;,$ident);&lt;br /&gt;
		printf (&amp;quot;%18s&amp;quot;,&amp;amp;recalc_nothing($held));&lt;br /&gt;
		printf (&amp;quot;%21s&amp;quot;,&amp;amp;recalc_nothing($maxheld));&lt;br /&gt;
		printf (&amp;quot;%21s&amp;quot;,&amp;amp;recalc_nothing($barrier));&lt;br /&gt;
		printf (&amp;quot;%21s&amp;quot;,&amp;amp;recalc_nothing($limit));&lt;br /&gt;
		printf (&amp;quot;%21s&amp;quot;,$failcnt);&lt;br /&gt;
		print &amp;quot;\n&amp;quot;;&lt;br /&gt;
	} elsif ($mode == 1) {&lt;br /&gt;
		printf (&amp;quot;%-15s&amp;quot;,$ident);&lt;br /&gt;
		printf (&amp;quot;%18s&amp;quot;,&amp;amp;recalc_bytes($held));&lt;br /&gt;
		printf (&amp;quot;%21s&amp;quot;,&amp;amp;recalc_bytes($maxheld));&lt;br /&gt;
		printf (&amp;quot;%21s&amp;quot;,&amp;amp;recalc_bytes($barrier));&lt;br /&gt;
		printf (&amp;quot;%21s&amp;quot;,&amp;amp;recalc_bytes($limit));&lt;br /&gt;
		printf (&amp;quot;%21s&amp;quot;,$failcnt);&lt;br /&gt;
		print &amp;quot;\n&amp;quot;;&lt;br /&gt;
	} elsif ($mode == 2) {&lt;br /&gt;
		printf (&amp;quot;%-15s&amp;quot;,$ident);&lt;br /&gt;
		printf (&amp;quot;%18s&amp;quot;,&amp;amp;recalc_pages($held));&lt;br /&gt;
		printf (&amp;quot;%21s&amp;quot;,&amp;amp;recalc_pages($maxheld));&lt;br /&gt;
		printf (&amp;quot;%21s&amp;quot;,&amp;amp;recalc_pages($barrier));&lt;br /&gt;
		printf (&amp;quot;%21s&amp;quot;,&amp;amp;recalc_pages($limit));&lt;br /&gt;
		printf (&amp;quot;%21s&amp;quot;,$failcnt);&lt;br /&gt;
		print &amp;quot;\n&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub work_line {&lt;br /&gt;
	my $line = shift;&lt;br /&gt;
	my $ident = $line;&lt;br /&gt;
	my $held = $line;&lt;br /&gt;
	my $maxheld = $line;&lt;br /&gt;
	my $barrier = $line;&lt;br /&gt;
	my $limit = $line;&lt;br /&gt;
	my $failcnt = $line;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	$ident =~ s/^\s+(\w+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$/$1/;&lt;br /&gt;
	$held =~ s/^\s+(\w+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$/$2/;&lt;br /&gt;
	$maxheld =~ s/^\s+(\w+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$/$3/;&lt;br /&gt;
	$barrier =~ s/^\s+(\w+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$/$4/;&lt;br /&gt;
	$limit =~ s/^\s+(\w+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$/$5/;&lt;br /&gt;
	$failcnt =~ s/^\s+(\w+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$/$6/;&lt;br /&gt;
&lt;br /&gt;
	# 0=normal, 1=bytes, 2=pages&lt;br /&gt;
	if ($ident eq &amp;quot;dummy&amp;quot;) {&lt;br /&gt;
		# do nothing, skip this line&lt;br /&gt;
	} elsif ($ident =~ /pages/) {&lt;br /&gt;
		&amp;amp;printline(2,$ident,$held,$maxheld,$barrier,$limit,$failcnt);&lt;br /&gt;
	} elsif ($ident =~ /^num/) {&lt;br /&gt;
		&amp;amp;printline(0,$ident,$held,$maxheld,$barrier,$limit,$failcnt);&lt;br /&gt;
	} else {&lt;br /&gt;
		&amp;amp;printline(1,$ident,$held,$maxheld,$barrier,$limit,$failcnt);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub print_header {&lt;br /&gt;
	my $uid = shift;&lt;br /&gt;
&lt;br /&gt;
	print &amp;quot;#####################################################################################################################\n&amp;quot;;&lt;br /&gt;
	print &amp;quot;BEANS FOR UID $uid\n&amp;quot;;&lt;br /&gt;
	print &amp;quot;resource                     held              maxheld              barrier                limit              failcnt\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# now eat your beans baby&lt;br /&gt;
while (&amp;lt;BEANS&amp;gt;) {&lt;br /&gt;
	chomp($line = $_);&lt;br /&gt;
&lt;br /&gt;
	# skip processing of headline&lt;br /&gt;
	if ($line =~ /^\s+uid/) {&lt;br /&gt;
		# do nothing, skip this&lt;br /&gt;
	} elsif ($line =~ /^Ver/) {&lt;br /&gt;
		# do nothing, skip this&lt;br /&gt;
	} elsif ($line =~ /^\s+\d+:\s+kmem/) {&lt;br /&gt;
		$uid = $line;&lt;br /&gt;
		$line =~ s/^(\s+)(\d+):/$1/;&lt;br /&gt;
		$uid =~ s/^(\s+)(\d+):.*$/$2/;&lt;br /&gt;
		&amp;amp;print_header($uid);&lt;br /&gt;
		&amp;amp;work_line($line);&lt;br /&gt;
	} else {&lt;br /&gt;
		&amp;amp;work_line($line);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
close(BEANS);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here's a quick patch which adds on VE hostname lookups. It depends on vzlist being in the path but won't break if it isn't.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=perl&amp;gt;&lt;br /&gt;
*** beanCounters.pl-orig        Sun Nov  9 14:08:56 2008&lt;br /&gt;
--- beanCounters.pl     Sun Nov  9 14:08:21 2008&lt;br /&gt;
***************&lt;br /&gt;
*** 9,14 ****&lt;br /&gt;
--- 9,17 ----&lt;br /&gt;
  # The script can be distributed freely for everybody who finds it usable.&lt;br /&gt;
  #&lt;br /&gt;
  # Christian Anton &amp;lt;mail |_at_| christiananton.de&amp;gt; 2008-09-18&lt;br /&gt;
+ #&lt;br /&gt;
+ # David Osborn &amp;lt;ossdev -at- daoCon.com&amp;gt; 2008-11-09&lt;br /&gt;
+ #     Added VE name to output&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
***************&lt;br /&gt;
*** 147,158 ****&lt;br /&gt;
   &lt;br /&gt;
  sub print_header {&lt;br /&gt;
        my $uid = shift;&lt;br /&gt;
   &lt;br /&gt;
        print &amp;quot;#####################################################################################################################\n&amp;quot;;&lt;br /&gt;
!       print &amp;quot;BEANS FOR UID $uid\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;resource                     held              maxheld              barrier               limit              failcnt\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
   &lt;br /&gt;
  # now eat your beans baby&lt;br /&gt;
  while (&amp;lt;BEANS&amp;gt;) {&lt;br /&gt;
        chomp($line = $_);&lt;br /&gt;
--- 150,193 ----&lt;br /&gt;
   &lt;br /&gt;
  sub print_header {&lt;br /&gt;
        my $uid = shift;&lt;br /&gt;
+       my $hostname = shift;&lt;br /&gt;
   &lt;br /&gt;
        print &amp;quot;#####################################################################################################################\n&amp;quot;;&lt;br /&gt;
!       print &amp;quot;BEANS FOR UID $uid ($hostname)\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;resource                     held              maxheld              barrier                limit              failcnt\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
   &lt;br /&gt;
+ sub get_hostname {&lt;br /&gt;
+       my $uid = shift;&lt;br /&gt;
+       my @vzout;&lt;br /&gt;
+ &lt;br /&gt;
+       # already retrieved list&lt;br /&gt;
+       if (defined %hostnames) {&lt;br /&gt;
+               if (defined $hostnames{$uid}) {&lt;br /&gt;
+                       return $hostnames{$uid};&lt;br /&gt;
+               } else {&lt;br /&gt;
+                       return 'not found';&lt;br /&gt;
+               }&lt;br /&gt;
+       # try to retrieve the list&lt;br /&gt;
+       } elsif ( eval(@vzout = `vzlist -H -o veid,hostname`) ) {&lt;br /&gt;
+               $hostnames{0} = 'HN';&lt;br /&gt;
+               while (@vzout) { &lt;br /&gt;
+                       my $line = shift @vzout;&lt;br /&gt;
+                       my ($tuid,$hostname) = $line =~ /^\s+(\d+)\s+(\S+)/;&lt;br /&gt;
+                       $hostnames{$tuid} = $hostname;&lt;br /&gt;
+               }&lt;br /&gt;
+               return $hostnames{$uid};&lt;br /&gt;
+       } else {&lt;br /&gt;
+               # something's wrong&lt;br /&gt;
+               return 'unknown';&lt;br /&gt;
+       }&lt;br /&gt;
+ &lt;br /&gt;
+ }&lt;br /&gt;
+ &lt;br /&gt;
+ &lt;br /&gt;
+ # Hash used to store uid to hostname lookups&lt;br /&gt;
+ my %hostnames;&lt;br /&gt;
+ &lt;br /&gt;
  # now eat your beans baby&lt;br /&gt;
  while (&amp;lt;BEANS&amp;gt;) {&lt;br /&gt;
        chomp($line = $_);&lt;br /&gt;
***************&lt;br /&gt;
*** 166,172 ****&lt;br /&gt;
                $uid = $line;&lt;br /&gt;
                $line =~ s/^(\s+)(\d+):/$1/;&lt;br /&gt;
                $uid =~ s/^(\s+)(\d+):.*$/$2/;&lt;br /&gt;
!               &amp;amp;print_header($uid);&lt;br /&gt;
                &amp;amp;work_line($line);&lt;br /&gt;
        } else {&lt;br /&gt;
                &amp;amp;work_line($line);&lt;br /&gt;
--- 201,207 ----&lt;br /&gt;
                $uid = $line;&lt;br /&gt;
                $line =~ s/^(\s+)(\d+):/$1/;&lt;br /&gt;
                $uid =~ s/^(\s+)(\d+):.*$/$2/;&lt;br /&gt;
!               &amp;amp;print_header($uid, get_hostname($uid));&lt;br /&gt;
                &amp;amp;work_line($line);&lt;br /&gt;
        } else {&lt;br /&gt;
                &amp;amp;work_line($line);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dosborn</name></author>
		
	</entry>
</feed>