Sto lavorando su un sistema embedded con 512 MB di RAM e memoria di scambio sufficiente per supportare l'applicazione. Dal kernel, ho limitato la dimensione della RAM dall'argomento cmd del kernel a 130 MB. E disabilitato lo swap usando swapoff -a
. Ho anche disabilitato il overcommit del kernel, in modo che l'applicazione possa essere eseguita nella sola memoria fisica. Ho verificato le modifiche da /proc/cmdline
e /proc/meminfo
. Ora quando eseguo l'applicazione e controllo i valori principali, VSZ per la mia applicazione è 177m che è più della memoria effettiva !! Com'è possibile? Da dove viene questa memoria?Perché l'utilizzo della memoria è più della RAM fisica in Linux?
risposta
VSZ è la dimensione della memoria virtuale che viene utilizzata dal processo. È normale che sia superiore alla dimensione della memoria fisica perché questa è una delle idee principali di questo. Si dovrebbe piuttosto guardare la dimensione residente (RSS) che è la memoria fisica effettiva utilizzata dal processo.
Guardate questo esempio:
Ho un processo in esecuzione nginx:
ps -o rss,vsz,cmd ax | grep -i nginx | head -n1
956 31248 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
rss - 956 kB
vsz - 31248 kB
Quindi, significa che questo processo sta utilizzando 956KB di memoria fisica, e 31MB di memoria virtuale.
Disabilitare lo swap (swapoff -a), come hai fatto tu, non disabilita l'uso della memoria virtuale.
Leggi sulla memoria virtuale qui: Virtual memory
E 'possibile impostare un limite sulla memoria virtuale ?? Sono solo curioso ... – Griffin
Non penso che tu abbia spiegato perché 'swapoff -a' non ha come risultato l'utilizzo di VMM. * lo scambio * viene utilizzato solo per la memoria * read-write * o per i dati del programma. Per il codice del programma, il file system virtuale * di Linux * ha un modo per individuare (ricaricare) una pagina. Se il codice salta a un indirizzo, il codice * faults * e i dati vengono caricati dal disco. In questo modo, quando un programma inizia, il tutto non viene caricato in memoria; solo la * pagina di indirizzo * start *. Allo stesso modo quando sotto la pressione della memoria, il codice usato raramente può essere urtato. –
memoria mappata file? Stessa memoria mappata due volte nello spazio degli indirizzi virtuali? Controlla la mappa della memoria di processo. –
http://linuxatemyram.com/ e '/ proc/$ PID/maps' –