Xref: feenix.metronet.com comp.sys.sun.admin:6695 Newsgroups: comp.sys.sun.admin Path: feenix.metronet.com!news.ecn.bgu.edu!wupost!howland.reston.ans.net!xlink.net!rz.uni-karlsruhe.de!stepsun.uni-kl.de!uklirb!bogner.informatik.uni-kl.de!lott From: lott@bogner.informatik.uni-kl.de (Christopher Lott) Subject: Re: How much "free memory" is too little? Message-ID: <1993Jun3.081729.24460@uklirb.informatik.uni-kl.de> Sender: news@uklirb.informatik.uni-kl.de (Unix-News-System) Nntp-Posting-Host: bogner.informatik.uni-kl.de Organization: Universitaet Kaiserslautern FB Informatik References: <1993May26.175329.19359@dragon.acadiau.ca> <1993Jun1.013531.20168@newsgate.sps.mot.com> Date: Thu, 3 Jun 1993 08:17:29 GMT Lines: 70 In article mario@wdc.sps.mot.com (Mario Nigrovic) writes: >To discover how much physical memory is used, look at the RSS fields >in PS. You'll find a large hole between (physical - RSS_total) and >(free_memory). The former is the *real* available memory. Here is a variant on that idea. This perl script totals up the SIZE fields from top. The top program gives text + stack + data in that column, which I felt was the data that I want. According to the man page for ps, it shows in its SIZE column just stack + data and the resident set size in RSS. chris... --snip-- #!/usr/local/bin/perl # a script to total the SIZE fields from top # permission to use, abuse, modify, fold, spindle, and mutilate granted # please send improvements to me, I'm interested in seeing them. # # cml 920603, lott@informatik.uni-kl.de open(TOP, "top -buSI max | ") || die "Can't open a pipe?\n"; # skip the first 3 lines: lastpid/process count/blank for ($i = 0; $i < 3 && ; $i++) { } # grab the content of the 4th line, which looks like this: # Memory: 29136K available, 23976K in use, 5160K free, 1540K locked # ^^^^^^ ^^^^^^ $_ = ; chop; ($m, $av, $a, $in, $rest) = split(' ', $_, 5); $available = int($av); $inuse = int($in); # skip lines 5-7 for ($i = 4; $i < 7 && ; $i++) { } # now process the lines from top while () { # remove trailing newline chop; # split line at whitespace; just keep the first 5 fields ($pid, $uid, $pri, $nice, $size, $rest) = split(' ', $_, 6); # extract just the numerical part $numsize = int($size); # print $size, " ", $numsize, "\n"; # add up $total = $total + $numsize; } close(TOP); # sanity check if ($available == 0 || $inuse == 0 || $total == 0) { print "Detected nonsense from top:\n"; printf("available = %d, inuse = %d, total = %d\n", $available, $inuse, $total); exit 1; } printf("O/S reports %d of %d, or %.0f%% in use\n", $inuse, $available, ($inuse/$available) * 100); printf("Top computes %d of %d, or %.0f%% in use\n", $total, $available, ($total/$available) * 100); --snip-- -- "Christopher Lott lott@informatik.uni-kl.de +49 (631) 205-3334, -3331 Fax" "Post: FB Informatik - Bau 57, Universitaet KL, 67653 Kaiserslautern, Germany" .