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.3Mbpamięć rezydentną systemu (nie mam pliku wymiany), wokół 1.8%całej 1GBpamięci systemowej. Rozmiar wirtualny to 1.39GB?!?. Przeczytałem, że ulimit -mto nie działa. Ludzie używają ulimit -vnp. 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 100MBmaksymalnie pamięci systemowej. Przeczytałem dokumentację setrlimiti 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_ASparametr określa rozmiar pamięci wirtualnej. Jaka jest prawda?