Spędziłem 2 godziny na czytaniu pytań na ten temat, ale nadal istnieje pewne nieporozumienie.
Mam ten proces:
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
To pokazuje, że wykorzystuje 19.3Mb
pamięć rezydentną systemu (nie mam pliku wymiany), wokół 1.8%
całej 1GB
pamięci systemowej. Rozmiar wirtualny to 1.39GB
?!?. Przeczytałem, że ulimit -m
to nie działa. Ludzie używają ulimit -v
np. Ustawienia wirtualnej pamięci dla procesu. Czy ta pamięć wirtualna jest wymieniona na liście VSZ ps
? Jaką wartość powinienem ustawić, jeśli chcę ograniczyć ten proces do użycia 100MB
maksymalnie pamięci systemowej. Przeczytałem dokumentację setrlimit
i wydaje się to uzasadnione:
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.
Ale w innych wersjach dokumentacji ten RLIMIT_AS
parametr określa rozmiar pamięci wirtualnej. Jaka jest prawda?