J'ai passé 2 heures à lire des questions à ce sujet, et il y a toujours un malentendu.
J'ai ce processus:
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
Cela montre qu'il utilise 19.3Mb
de la mémoire résidente du système (je n'ai pas de fichier d'échange), autour 1.8%
de la 1GB
mémoire système entière . La taille virtuelle est 1.39GB
?!?. J'ai lu que ulimit -m
ça ne marche pas. Les gens utilisent ulimit -v
par exemple la configuration de la mémoire virtuelle pour le processus. Cette mémoire virtuelle est-elle celle avec laquelle VSZ est répertorié ps
? Quelle valeur dois-je définir si je souhaite restreindre ce processus pour utiliser 100MB
au maximum la mémoire système. J'ai lu la documentation de setrlimit
et cela semble légitime:
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.
Mais sur d'autres versions de la documentation, ce RLIMIT_AS
paramètre définit la taille de la mémoire virtuelle. Quelle est la vérité?