2013-03-26 3 views
0

J'ai une installation Ubuntu 12.10 (kernel 3.9.0-rc2) fonctionnant sous VMWare. Je lui ai donné 512 Mo de RAM.
cat/proc/meminfo montre:
MemTotal: 507864 KB
MemFree: 440180Processus tué en raison de trop de mémoire?

Je veux utiliser le swap (pour une raison quelconque) j'ai donc écrit un programme C qui alloue un tableau de 500Mo (en utilisant malloc ()) et le remplit de déchets. Cependant, le programme est tué avant qu'il ne puisse remplir tout le tableau et un message "Killed" apparaît à l'écran.

Je voulais demander si c'est un comportement normal et quelle est la raison derrière tout cela? À mon avis, le swap devrait être utilisé parce que la RAM libre est insuffisante.

Modifier: Je n'ai pas mentionné que j'ai un échange de 1 Go. cat/proc/swaps montre:
/dev/sda5 Taille: 1046524 Utilisé: 14672.
La quantité "Utilisé" augmente lorsque j'exécute le programme de restauration de mémoire. Mais comme vous pouvez le voir, il y a beaucoup d'échanges. Alors pourquoi le programme a-t-il dû être «tué»?

+0

Google pour «surchargement de mémoire Linux»; et oui c'est configurable et peut être désactivé. BTW, vous voulez probablement dire Ubuntu 12.10, le noyau Linux est à la version 3.8 sur http://kernel.org/ (et Ubuntu 12.10 a probablement un noyau plus tôt). BTW, votre mémoire de 512 Mo n'est pas entièrement disponible pour les données: le noyau, le programme et d'autres processus mangent aussi cette mémoire! –

+0

Vérifiez la sortie 'ulimit' si les données de 500 Mo sont autorisées. –

+0

@ott: ulimit montre illimité. –

Répondre

1

Je n'ai donc pas trouvé de réponse valide. J'ai une solution temporaire:

J'avais modifié les paramètres de la machine virtuelle pour donner 512 Mo de RAM à la machine virtuelle. Maintenant, je suis revenu à 2 Go et a couru 5 programmes parallèles chacun consommant 500 Mo. Heureusement, tous courent et le swap est utilisé.

J'avais juste besoin d'utiliser le swap pour un projet de gestion de swap.

0

Il est également important de savoir comment vous avez écrit votre programme C pour allouer la mémoire et quels sont les drapeaux du compilateur. Par exemple, si vous allouez de la mémoire de manière statique (par exemple, double A [N] [N]), le comportement diffère de l'allocation dynamique: (comme l'utilisation de malloc/calloc). Les allocations statiques sont limitées par le modèle de mémoire du compilateur (moyen, petit etc, souvent peut être spécifié). Peut-être, un bon point de départ est:

http://en.wikipedia.org/wiki/C_dynamic_memory_allocation

cette aide?

Questions connexes