Passei duas horas lendo perguntas sobre esse assunto e ainda há alguns mal-entendidos.
Eu tenho esse processo:
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
Isso mostra que ele usa 19.3Mb
memória residente no sistema (não tenho arquivo de troca), em torno 1.8%
de toda a 1GB
memória do sistema. O tamanho virtual é 1.39GB
?!?. Eu li que ulimit -m
não funciona. As pessoas usam, ulimit -v
por exemplo, a configuração de memória virtual para o processo. Essa memória virtual é a VSZ listada ps
? Qual valor devo definir se quiser restringir esse processo para usar 100MB
no máximo a memória do sistema. Eu li a documentação setrlimit
e isso parece legítimo:
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.
Mas em outras versões da documentação esse RLIMIT_AS
parâmetro define o tamanho da memória virtual. O que é a verdade?