I have spent 2 hours reading questions about this matter, and still there is some misunderstanding.
I have this process:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1452 0.4 1.8 1397012 19308 ? Sl 04:23 3:48 ./transaction_server
This shows it uses 19.3MB of system resident memory (I have no swap file), and around 1.8% of the whole 1GB system memory, but the virtual size is 1.39GB?!? I have read that ulimit -m
doesn't work. People use ulimit -v
to set virtual memory limit for the process. Is this virtual memory is the one VSZ listed with ps
? What value I should set if I want to restrict this process to use 100MB system memory at most? I have read documentation for setrlimit
and this seems legit:
RLIMIT_AS
This is the maximum size of a process' total available memory,
in bytes. If this limit is exceeded, the malloc() and mmap()
functions shall fail with errno set to [ENOMEM]. In addition,
the automatic stack growth fails with the effects outlined above.
But other versions of the documentation say this RLIMIT_AS
parameter sets virtual memory size. What is the truth?