Memory usage statistic? (topas, nmon)

hi,
how can i diplay:

  • the ammount RAM used /free
  • ammount of ram used from a pid or prozess

we have the problem, that malloc is returing a NULL pointer errno = 12 ( not enough space).

but i think there is still ram free.

nmon : shows all memory used ?
Memory Use Physical Virtual Paging pages/sec In Out VM parameters
% Used 99.8% 0.1% to Paging Space 0.0 0.0 numperm 75.3%
% Free 0.2% 99.9% to File System 1.0 494.8 minperm 5.0%
MB Used 12265.7MB 9.8MB Page Scans 0.0 maxperm 8.0%
MB Free 22.2MB 19382.2MB Page Cycles 0.0 minfree 256
Total(MB) 12288.0MB 19392.0MB Page Reclaim 0.0 maxfree 512

Topas: show still free ram ?
MEMORY
Real,MB 12287
% Comp 25.0
% Noncomp 75.8
% Client 0.5

PAGING SPACE
Size,MB 19392
% Used 0.5
% Free 99.4

are there any other tools to check memory usage?

general Question:
does an Application reserv its own part of the RAM?
any links to sites who explain that topic would be greatly appreciated also :slight_smile:

our System is AIX v4

Lazzar

I don't know AIX and I don't have access to an AIX box. But maybe I can help get you pointed in the right direction. You are clearly having a problem with virtual memory, not physical memory. Stuff like how much unused ram you have is not relevant.

Most likely you are bumping into the max size of a data segment. You might try "/usr/bin/ulimit -a" to see if that command exists and if it displays a limit called "data" or something like that. I don't know how to increase this on AIX.

And please don't crosspost...I just deleted the extra thread.

time(seconds) unlimited
file(blocks) 2097151
data(kbytes) 131072
stack(kbytes) 32768
memory(kbytes) 32768
coredump(blocks) 2097151
nofiles(descriptors) 2000

if i malloc something, i guess it goes into the 'data' segement?

so a process can max. allocate 131 MB ?

Lazzar

Edit: sorry about crossposting, but i saw the the other AIX forum had a lot less users :slight_smile:

Yeah, malloc() tries to grow the data segment, and yes, you are currently limited to 131K.

And your stack is limited 32K bytes. There is also a text segment. However the sum of these, data+stack+text must be less than 32K if the "memory" line means what I think it means.

AIX must work differently than what I'm used to. Or maybe not...do a "man getrlimit". The stack stuff will be under RLIMIT_DATA and memory might be RLIMIT_AS.

Also try /usr/bin/ulimit -Ha to see if they are your hard limits too.

ulimit -Ha :
time(seconds) unlimited
file(blocks) 2097151
data(kbytes) unlimited
stack(kbytes) unlimited
memory(kbytes) unlimited
coredump(blocks) unlimited
nofiles(descriptors) unlimited

that can't be cause data is greater than memory.

but anyway i do a bit more research and try to understand that stuff a little better:)

the root of our problem is that we have a memory leak, and raising those limits won't help anyway i guess :slight_smile:

but thanks a lot for your input.

Lazzar

Actually, it can be. It's simply dumb, but not impossible. The kernel will check both limits as you attempt to increase the data segment size. You're guaranteed to bump into the memory limit first is all.

And look at your hard limits....they are unlimited. Your program can call getrlimit() to obtain the hard and soft limits. And it can call setrlimit() to raise the soft limit up to the hard limit.

As I said before, I don't know AIX and I could be wrong about some or all of this. But it would only take a few seconds to toss a setrlimit() into the program to see if I'm right.

But you're right about the memory leak, the best policy is to find it and fix it.

weee i found it.

topas shows the process id/ application and the memory used.

topas:
app_bg (264688 8.2% PgSp:119.7m user_blah

One of our processes had ~119 used when the alloc error began.

the other processes only need 0 - 2 MB memory.

And with the process Id i found the leaking process of course, now we just need to find the leak :slight_smile:

Lazzar