Linux mémoire de surcharge de détails

Je suis en train d'élaborer SW pour Linux embarqué et je souffre système se bloque parce que OOM Killer apparaît de temps à autre. Avant d'aller au-delà, je voudrais résoudre certains de confusion sur la façon dont le Noyau Linux allouer de la mémoire dynamique en supposant que /proc/sys/vm/overcommit_memory a 0 et /proc/sys/vm/min_free_kbytes a 712, et pas de swap.

Supposant Linux embarqué actuellement de la mémoire physique disponible est de 5 MO (5 MO de mémoire libre et il n'est pas utilisable en cache ou avec tampon mémoire disponible) si j'écris ce morceau de code:

.....
#define MEGABYTE 1024*1024
.....
.....
void *ptr = NULL;
ptr = (void *) malloc(6*MEGABYTE); //Preserving 6MB
if (!prt) 
    exit(1);
memset(ptr, 1, MEGABYTE);
.....

Je voudrais savoir si quand memset appel a été commise, le noyau va essayer d'allouer ~6MO ou ~1MO (ou min_free_kbytes plusieurs) dans la mémoire physique de l'espace.

Actuellement, il y a environ 9 MO dans mon périphérique intégré qui dispose de 32 mo de RAM. Je le vérifie en faisant

# echo 3 > /proc/sys/vm/drop_caches 
# free
            total         used         free       shared      buffers
Mem:        23732        14184         9548            0          220
Swap:            0            0            0
Total:        23732        14184         9548

Oublier dernier morceau de code en C, je voudrais savoir si ses possible que oom killer apparaît lorsque, par exemple, la mémoire libre est propos >6 MO.
Je veux savoir si le système est en dehors de la mémoire lorsque oom semble, donc je pense que j'ai deux options:

  • Voir VmRSS entrées dans /proc/pid/statut de suspect processus.
  • Set /proc/sys/vm/overcommit_memory = 2 et /proc/sys/vm/overcommit_memory = 75 et voir si il y est un processus nécessitant plus de mémoire physique disponible.
Votre question est ambigu, car il n'est pas clair ce que tu veux dire par "allouer". Le noyau réserver 6 MO, mais il ne sera pas affecter quoi que ce soit encore parce que le processus ne peut jamais accéder à la mémoire.
Mais quand memset(ptr,1,MO) est effectué le processus d'écriture de la mémoire, n'est-ce pas?
Oui, et alors le système d'exploitation a fait à allouer.
Mais ma question, si il allouer ~6MO ou ~1MO?
Il se réserve de 6MO, puis alloue 1 MO.

OriginalL'auteur MABC | 2013-10-02