Domanda

Domanda Linux noob:

Se ho 500 MB di RAM e 500 MB di spazio di swap, il sistema operativo e i processi possono utilizzare 1 GB di memoria?

In altre parole, la quantità totale di memoria disponibile per i programmi e il sistema operativo è il totale della dimensione della memoria fisica e della dimensione di scambio?

Sto cercando di capire quali contatori SNMP devono essere interrogati, ma prima devo capire come Linux utilizza la memoria virtuale un po 'meglio.

Grazie

È stato utile?

Soluzione

Sì, questo è sostanzialmente corretto. I numeri effettivi potrebbero essere (molto) marginalmente inferiori, ma a tutti gli effetti, se hai x memoria fisica e y memoria virtuale (scambia in linux), allora tu avere x + y memoria disponibile per il sistema operativo e tutti i programmi in esecuzione sotto il sistema operativo.

Altri suggerimenti

In realtà, è essenzialmente corretto, ma il tuo "virtuale" la memoria NON risiede accanto alla tua " memoria fisica " (come affermato da Matthew Scharley).

La tua " memoria virtuale " è uno strato di astrazione che copre sia "fisico" (come nella RAM) e "swap" (come nel disco rigido, che ovviamente è tanto fisico quanto la RAM) memoria.

La memoria virtuale è essenzialmente uno strato di astrazione. Il tuo programma si rivolge sempre a un "virtuale" indirizzo, che il sistema operativo traduce in un indirizzo nella RAM o sul disco (che deve essere caricato prima nella RAM) a seconda di dove risiedono i dati. Quindi il tuo programma non deve mai preoccuparsi della mancanza di memoria.

Niente è mai più così semplice ...

Le pagine di memoria sono allocate pigramente. Un processo può malloc () una grande quantità di memoria e non usarlo mai. Quindi sul tuo sistema 500MB_RAM + 500MB_SWAP, potrei - almeno in teoria - allocare 2 gig di memoria dall'heap e le cose correranno allegramente finché non provo a usare troppa memoria. (A quel punto qualunque processo non è in grado di acquisire più pagine di memoria viene rovinato. Speriamo sia il mio processo. Ma non sempre.)

I singoli processi possono essere limitati a 4 gig come limitazione dell'indirizzo fisso sui sistemi a 32 bit. Anche quando hai più di 4 gig RAM sulla macchina e stai usando quella bizzarra atrocità segmentata a 36 bit dallo schema di indirizzamento infernale, i singoli processi sono ancora limitati a soli 4 concerti. Alcuni di questi 4 concerti devono andare per librerie condivise e codice programma. Quindi scendi a 2-3 concerti di stack + heap come limitazione INDIRIZZANTE.

Puoi inserire mmap file, dandoti effettivamente più memoria. Fondamentalmente agisce come extra swap. Cioè Anziché caricare in memoria i dati del codice binario di un programma e quindi scambiarli nel file di scambio, il file viene semplicemente convertito. Se necessario, le pagine vengono scambiate nella RAM direttamente dal file.

Puoi entrare in alcune cose interessanti con dati sparsi e file sparsi mmapped. Ho visto X-windows rivendicare un enorme utilizzo della memoria quando in realtà stava usando solo un pochino.

A proposito: " gratuito " potrebbe aiutarti. Come potrebbe " cat / proc / meminfo " o le linee Vm in / proc / $ PID / status . (Soprattutto VmData e VmStk .) O forse " ps up $ PID "

Anche se per lo più è vero, non è interamente corretto. Per un determinato processo, l'ambiente in cui viene eseguito potrebbe limitare la memoria disponibile per il processo. Controlla anche l'output di ulimit -v .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top