2009-10-23 4 views
2

Linux Noob question:% mémoire utilisée sur Linux

Si je 500Mo de RAM et 500 Mo d'espace d'échange, peuvent l'OS et les processus puis utilisez 1 Go de mémoire? En d'autres termes, la quantité totale de mémoire disponible pour les programmes et le système d'exploitation est-elle le total de la taille de la mémoire physique et de la taille de l'échange? J'essaie de déterminer quels compteurs SNMP à interroger, mais j'ai besoin de comprendre comment Linux utilise un peu mieux la mémoire virtuelle en premier.

Merci

Répondre

0

Oui, cela est essentiellement correct. Les nombres réels peuvent être (très) légèrement inférieurs, mais à toutes fins utiles, si vous avez de la mémoire physique et y mémoire virtuelle (échange dans linux), alors vous avez x + y mémoire disponible pour le système d'exploitation et tous les programmes fonctionnant sous le OS

1

Bien que la plupart du temps c'est vrai, ce n'est pas entièrement correct. Pour un processus particulier, l'environnement dans lequel vous l'exécutez peut limiter la mémoire disponible pour votre processus. Vérifiez également la sortie de ulimit -v.

+0

La question a été posée si le système d'exploitation et les processus pouvaient utiliser une certaine quantité de mémoire. Je pense que cette réponse est quelque peu trompeuse, car elle répond à une question différente, à savoir si "un processus particulier" peut utiliser une certaine quantité de mémoire. – vstrien

+0

@vstrien, FINE, j'ai résolu ma question pour ceux qui ne comprennent pas * entièrement * le mot "* entièrement *" –

1

Rien n'est jamais si simple ... plus

pages de mémoire sont allouées paresseusement. Un processus peut malloc() une grande quantité de mémoire et ne jamais l'utiliser. Donc, sur votre système 500MB_RAM + 500MB_SWAP, je pourrais - au moins en théorie - allouer 2 Go de mémoire sur le tas et les choses tourneront joyeusement jusqu'à ce que j'essaie d'utiliser trop de cette mémoire. (À ce stade, tout processus ne peut pas acquérir plus de pages de mémoire, mais ce n'est pas toujours le cas.)

Les processus individuels peuvent être limités à 4 gig comme limitation d'adresse matérielle sur les systèmes 32 bits. Même lorsque vous avez plus de 4 Go de RAM sur la machine et que vous utilisez cette atrocité segmentée de 36 bits de l'enfer, les processus individuels sont encore limités à seulement 4 concerts. Certains de ces 4 concerts doivent opter pour des bibliothèques partagées et du code de programme. Donc, jusqu'à 2 ou 3 Go de pile + tas comme une limitation d'adressage.

Vous pouvez insérer des fichiers dans mmap, vous donnant effectivement plus de mémoire. Il agit essentiellement comme un échange supplémentaire. C'est à dire. Plutôt que de charger les données du code binaire d'un programme dans la mémoire et de l'échanger ensuite vers le fichier d'échange, le fichier est simplement monnayé. Au besoin, les pages sont transférées dans la RAM directement à partir du fichier.

Vous pouvez obtenir des informations intéressantes avec des données fragmentées et des fichiers fragmentés. J'ai vu X-windows revendiquer une énorme utilisation de la mémoire alors qu'en fait, il n'utilisait qu'un tout petit peu.

BTW: "gratuit" pourrait vous aider. Comme pourrait "cat/proc/meminfo" ou les lignes Vm dans /proc/$ PID/statut. (Surtout VmData et VmStk.) Ou peut-être la mémoire "ps jusqu'à $ PID"

5

En fait, il est essentiellement correct, mais votre "virtuel" ne réside pas à côté votre "mémoire physique" (comme l'a déclaré Matthew Scharley).Votre "mémoire virtuelle" est une couche d'abstraction couvrant à la fois la mémoire "physique" (comme dans la RAM) et "swap" (comme sur le disque dur, qui est bien sûr aussi physique que la mémoire RAM).

La mémoire virtuelle est en principe une couche d'abstraction. Votre programme adresse toujours une adresse "virtuelle", que votre OS traduit à une adresse dans la RAM ou sur le disque (qui doit d'abord être chargé en RAM) en fonction de l'emplacement des données. Donc, votre programme ne doit jamais s'inquiéter du manque de mémoire.

+0

Je n'ai jamais dit que quelque chose était à côté de quoi que ce soit, je viens de dire que la quantité d'espace disponible des deux. Mais oh bien. –

+0

Dans votre message, j'ai lu "si vous avez x mémoire physique et mémoire virtuelle (échange dans Linux), alors vous avez la mémoire x + y disponible". Cependant, la mémoire virtuelle n'est pas échangeable, la mémoire virtuelle est la couche d'abstraction couvrant à la fois l'échange et la mémoire interne "réelle". – vstrien

+0

La ligne est un peu floue. Par exemple, dans Windows, lorsque vous configurez la "mémoire virtuelle", vous configurez la même chose que l'échange dans Linux. Vous ne configurez pas la quantité totale de mémoire que vous souhaitez, vous configurez la quantité de votre disque dur utilisée pour la pagination. –