<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.openvz.org/index.php?action=history&amp;feed=atom&amp;title=User%3AGrin%2Fopenvz_checker.pl</id>
	<title>User:Grin/openvz checker.pl - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.openvz.org/index.php?action=history&amp;feed=atom&amp;title=User%3AGrin%2Fopenvz_checker.pl"/>
	<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=User:Grin/openvz_checker.pl&amp;action=history"/>
	<updated>2026-06-13T20:14:10Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.31.1</generator>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=User:Grin/openvz_checker.pl&amp;diff=13354&amp;oldid=prev</id>
		<title>Grin: sharing is caring</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=User:Grin/openvz_checker.pl&amp;diff=13354&amp;oldid=prev"/>
		<updated>2013-01-29T10:12:29Z</updated>

		<summary type="html">&lt;p&gt;sharing is caring&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
#$Id: openvz_checker.pl,v 1c29ac915688 2009/12/09 21:17:13 grin $&lt;br /&gt;
#(c)Peter &amp;quot;grin&amp;quot; Gervai, 2009; grin(a)grin(dot)hu&lt;br /&gt;
# GPLv2 / CC-BY-SA 3.0&lt;br /&gt;
#&lt;br /&gt;
# check openvz resource settings&lt;br /&gt;
# based on wiki pages&lt;br /&gt;
#&lt;br /&gt;
# Usage: just run it on the VE0 (host) system as root.&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
use IO::File;&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
my $dir_bc = &amp;quot;/proc/bc&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
my $CUR=0;&lt;br /&gt;
my $MAX=1;&lt;br /&gt;
my $BAR=2;&lt;br /&gt;
my $LIM=3;&lt;br /&gt;
&lt;br /&gt;
# ia32...&lt;br /&gt;
my $PAGESIZE=4096;&lt;br /&gt;
&lt;br /&gt;
my @allsocketbuf = qw( tcprcvbuf  tcpsndbuf  dgramrcvbuf  othersockbuf );&lt;br /&gt;
&lt;br /&gt;
opendir( DIR, $dir_bc );&lt;br /&gt;
my @veids = grep { /^\d+/ &amp;amp;&amp;amp; -d &amp;quot;$dir_bc/$_&amp;quot; }  readdir(DIR);&lt;br /&gt;
closedir( DIR );&lt;br /&gt;
&lt;br /&gt;
my %res;&lt;br /&gt;
for my $veid ( @veids ) {&lt;br /&gt;
    next if $veid == 0;&lt;br /&gt;
    my $f = new IO::File &amp;quot;&amp;lt; $dir_bc/$veid/resources&amp;quot; or next;&lt;br /&gt;
    while( &amp;lt;$f&amp;gt; ) {&lt;br /&gt;
        chomp;&lt;br /&gt;
        # trim spaces&lt;br /&gt;
        s/^\s*(.*?)\s*$/$1/;&lt;br /&gt;
        my @data = split /\s+/;&lt;br /&gt;
        #                        held, maxheld, barrier, limit, failcnt&lt;br /&gt;
        $res{$veid}{$data[0]} = [ @data[1..5] ];&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
## total ram&lt;br /&gt;
my $ram = qx( free | grep Mem: ); chomp $ram;&lt;br /&gt;
$ram = (split /\s+/, $ram)[1];&lt;br /&gt;
print &amp;quot;RAM=$ram\n&amp;quot;;&lt;br /&gt;
$ram *= 1024;&lt;br /&gt;
&lt;br /&gt;
## swap&lt;br /&gt;
my $swap = qx( free | grep Swap: ); chomp $swap;&lt;br /&gt;
$swap = (split /\s+/, $swap)[1];&lt;br /&gt;
print &amp;quot;SWAP=$swap\n&amp;quot;;&lt;br /&gt;
$swap *= 1024;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
my $sum;&lt;br /&gt;
### low mem x86_32&lt;br /&gt;
# max lowram 832MB&lt;br /&gt;
my $lowram = $ram &amp;gt; 832000000 ? 832000000 : $ram;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
###############################&lt;br /&gt;
####### system wide config&lt;br /&gt;
###############################&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
###############################&lt;br /&gt;
## utilisation&lt;br /&gt;
$sum=0;&lt;br /&gt;
foreach my $veid (keys %res) {&lt;br /&gt;
    my $b = $res{$veid}{'kmemsize'}-&amp;gt;[$CUR];&lt;br /&gt;
    foreach my $sb (@allsocketbuf) {&lt;br /&gt;
        $b += $res{$veid}{$sb}-&amp;gt;[$CUR];&lt;br /&gt;
    }&lt;br /&gt;
    $sum += $b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Low memory (x86_32) Utilisation: &amp;quot;, &amp;amp;pretty($sum / (0.4 * $lowram));&lt;br /&gt;
print &amp;quot;  ( &amp;lt;1 OK; &amp;lt;2 unsafe; &amp;gt;2 dangerous)\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
###############################&lt;br /&gt;
## commitment level&lt;br /&gt;
$sum=0;&lt;br /&gt;
foreach my $veid (keys %res) {&lt;br /&gt;
    my $b = $res{$veid}{'kmemsize'}-&amp;gt;[$LIM];&lt;br /&gt;
    foreach my $sb (@allsocketbuf) {&lt;br /&gt;
        $b += $res{$veid}{$sb}-&amp;gt;[$LIM];&lt;br /&gt;
    }&lt;br /&gt;
    $sum += $b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Low memory (x86_32) Commitment: &amp;quot;, &amp;amp;pretty($sum / (0.4 * $lowram));&lt;br /&gt;
print &amp;quot;  ( &amp;lt;1 OK; &amp;lt;1.5 acceptable; &amp;gt;2 not recommended)\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
############################&lt;br /&gt;
#### total ram&lt;br /&gt;
## utilisation&lt;br /&gt;
$sum=0;&lt;br /&gt;
foreach my $veid (keys %res) {&lt;br /&gt;
    my $b = $res{$veid}{'physpages'}-&amp;gt;[$CUR] * $PAGESIZE;&lt;br /&gt;
    $b += $res{$veid}{'kmemsize'}-&amp;gt;[$CUR];&lt;br /&gt;
    foreach my $sb (@allsocketbuf) {&lt;br /&gt;
        $b += $res{$veid}{$sb}-&amp;gt;[$CUR];&lt;br /&gt;
    }&lt;br /&gt;
    $sum += $b;&lt;br /&gt;
}&lt;br /&gt;
print &amp;quot;Total RAM utilisation: &amp;quot;, &amp;amp;pretty($sum / $ram);&lt;br /&gt;
print &amp;quot;  ( &amp;lt;0.8 low; &amp;lt;1 ok; &amp;gt;1 impossible)\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
############################&lt;br /&gt;
#### total ram+swap&lt;br /&gt;
## utilisation&lt;br /&gt;
$sum=0;&lt;br /&gt;
foreach my $veid (keys %res) {&lt;br /&gt;
    my $b = $res{$veid}{'oomguarpages'}-&amp;gt;[$CUR] * $PAGESIZE;&lt;br /&gt;
    $b += $res{$veid}{'kmemsize'}-&amp;gt;[$CUR];&lt;br /&gt;
    foreach my $sb (@allsocketbuf) {&lt;br /&gt;
        $b += $res{$veid}{$sb}-&amp;gt;[$CUR];&lt;br /&gt;
    }&lt;br /&gt;
    $sum += $b;&lt;br /&gt;
}&lt;br /&gt;
print &amp;quot;RAM+swap utilisation: &amp;quot;, &amp;amp;pretty($sum / ($ram+$swap));&lt;br /&gt;
my $low_bound = &amp;amp;pretty($ram / ($ram+$swap));&lt;br /&gt;
my $hi_bound  = &amp;amp;pretty(($ram + 0.5*$swap) / ($ram+$swap));&lt;br /&gt;
print &amp;quot;  ( &amp;lt;$low_bound low; between ok; &amp;gt;$hi_bound bad)\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
## commitment&lt;br /&gt;
$sum=0;&lt;br /&gt;
foreach my $veid (keys %res) {&lt;br /&gt;
    my $b = $res{$veid}{'oomguarpages'}-&amp;gt;[$BAR] * $PAGESIZE;&lt;br /&gt;
    $b += $res{$veid}{'kmemsize'}-&amp;gt;[$LIM];&lt;br /&gt;
    foreach my $sb (@allsocketbuf) {&lt;br /&gt;
        $b += $res{$veid}{$sb}-&amp;gt;[$LIM];&lt;br /&gt;
    }&lt;br /&gt;
    $sum += $b;&lt;br /&gt;
}&lt;br /&gt;
print &amp;quot;RAM+swap commitment: &amp;quot;, &amp;amp;pretty($sum / ($ram+$swap));&lt;br /&gt;
print &amp;quot;  ( &amp;lt;0.8 low; &amp;lt;1 ok; &amp;gt;1 not recommended)\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
## allocations&lt;br /&gt;
$sum=0;&lt;br /&gt;
foreach my $veid (keys %res) {&lt;br /&gt;
    my $b = $res{$veid}{'privvmpages'}-&amp;gt;[$LIM] * $PAGESIZE;&lt;br /&gt;
    $b += $res{$veid}{'kmemsize'}-&amp;gt;[$LIM];&lt;br /&gt;
    foreach my $sb (@allsocketbuf) {&lt;br /&gt;
        $b += $res{$veid}{$sb}-&amp;gt;[$LIM];&lt;br /&gt;
    }&lt;br /&gt;
    $sum += $b;&lt;br /&gt;
}&lt;br /&gt;
print &amp;quot;RAM+swap allocations: &amp;quot;, &amp;amp;pretty($sum / ($ram+$swap));&lt;br /&gt;
print &amp;quot;  ( &amp;lt;1.5 low; &amp;lt;4 ok; &amp;gt;4 not recommended [oom])\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
###############################&lt;br /&gt;
####### per VE configs&lt;br /&gt;
###############################&lt;br /&gt;
foreach my $veid (sort { $a &amp;lt;=&amp;gt; $b }  keys %res) {&lt;br /&gt;
    #            &amp;lt;numproc&amp;gt; should be average process num&lt;br /&gt;
    &amp;amp;compare( $veid, $res{$veid}{'kmemsize'}-&amp;gt;[$BAR],&lt;br /&gt;
    40*1024*$res{$veid}{'numproc'}-&amp;gt;[$CUR] + $res{$veid}{'dcachesize'}-&amp;gt;[$LIM],&lt;br /&gt;
            &amp;quot;kmemsize(bar)&amp;quot;, &amp;quot;numproc~dcachesize&amp;quot;, &amp;quot;kmemsize low for # of processes&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    &amp;amp;compare( $veid, $res{$veid}{'privvmpages'}-&amp;gt;[$BAR], $res{$veid}{'vmguarpages'}-&amp;gt;[$BAR],&lt;br /&gt;
    &amp;quot;privvmpages&amp;quot;,&amp;quot;vmguarpages&amp;quot;, &amp;quot;mem alloc less than guarantee&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    &amp;amp;compare( $veid, $res{$veid}{'tcpsndbuf'}-&amp;gt;[$LIM] - $res{$veid}{'tcpsndbuf'}-&amp;gt;[$BAR], &lt;br /&gt;
    2.5*1024*$res{$veid}{'numtcpsock'}-&amp;gt;[$LIM], &lt;br /&gt;
    &amp;quot;tcpsndbuf(lim-bar)&amp;quot;, &amp;quot;numtcpsock(lim{bytes})&amp;quot;, &amp;quot;tcp may hang&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &amp;amp;compare( $veid, $res{$veid}{'othersockbuf'}-&amp;gt;[$LIM] - $res{$veid}{'othersockbuf'}-&amp;gt;[$BAR],&lt;br /&gt;
    2.5*1024*$res{$veid}{'numothersock'}-&amp;gt;[$LIM],&lt;br /&gt;
    &amp;quot;othersockbuf(lim-bar)&amp;quot;, &amp;quot;numothersock{bytes}&amp;quot;, &amp;quot;othersock may hang&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &amp;amp;compare( $veid, $res{$veid}{'tcprcvbuf'}-&amp;gt;[$LIM] - $res{$veid}{'tcprcvbuf'}-&amp;gt;[$BAR],&lt;br /&gt;
    2.5*1024*$res{$veid}{'numothersock'}-&amp;gt;[$LIM],&lt;br /&gt;
    &amp;quot;tcprcvbuf(lim-bar)&amp;quot;,&amp;quot;numothersock{bytes}&amp;quot;,&amp;quot;may slow tcp&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    if( $res{$veid}{'tcprcvbuf'}-&amp;gt;[$BAR] &amp;lt; 65535 ) {&lt;br /&gt;
        print &amp;quot;$veid: tcprcvbuf too low (&amp;lt;64k)\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    if( $res{$veid}{'tcpsndbuf'}-&amp;gt;[$BAR] &amp;lt; 65535 ) {&lt;br /&gt;
        print &amp;quot;$veid: tcpsndbuf too low (&amp;lt;64k)\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    if( $res{$veid}{'dgramrcvbuf'}-&amp;gt;[$BAR] &amp;lt; 131200 ) {&lt;br /&gt;
        print &amp;quot;$veid: dgramrcvbuf too low (&amp;lt;129k)\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    if( $res{$veid}{'othersockbuf'}-&amp;gt;[$BAR] &amp;lt; 131200 ) {&lt;br /&gt;
        print &amp;quot;$veid: othersockbuf too low (&amp;lt;129k)\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    # numfile &amp;lt; avgnumproc*32&lt;br /&gt;
    # ...&lt;br /&gt;
    &lt;br /&gt;
    if( $res{$veid}{'dcachesize'}-&amp;gt;[$BAR] &amp;lt; &lt;br /&gt;
      $res{$veid}{'numfile'}-&amp;gt;[$MAX] * 384 ) {&lt;br /&gt;
        print &amp;quot;$veid: dcachesize likely low for dentry and inode allocs\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    foreach my $param (keys %{$res{$veid}}) {&lt;br /&gt;
        &amp;amp;compare( $veid, $res{$veid}{$param}-&amp;gt;[$LIM], $res{$veid}{$param}-&amp;gt;[$BAR],&lt;br /&gt;
                &amp;quot;limit&amp;quot;, &amp;quot;barrier&amp;quot;, &amp;quot;problem with $param&amp;quot; );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sub compare {&lt;br /&gt;
    my ($veid, $large, $small, $ltext, $stext, $text) = @_;&lt;br /&gt;
    &lt;br /&gt;
    if( $large &amp;lt; $small ) {&lt;br /&gt;
        # bad...&lt;br /&gt;
        print &amp;quot;VE $veid: $text ($ltext=$large &amp;lt; $stext=$small)\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sub pretty($) {&lt;br /&gt;
    return sprintf(&amp;quot;%6.4f&amp;quot;, shift);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grin</name></author>
		
	</entry>
</feed>