Une application 32 bits .net s'exécutant sur une machine 32 bits s'est exécutée dans une exception OutOfMemoryException. J'ai ensuite pris un vidage de mémoire, et bien que j'utilise WinDbg, je peux vérifier que beaucoup de mémoire est utilisée, je me demande pourquoi nous obtenons des OOMEs, bien que la taille du tas GC, selon la sortie de WinDbg à "! Eeheap -gc", seulement environ 1 Go, il semble donc qu'il reste assez d'espace pour les 1,5 Go de .net.OutOfMemoryException, taille du fichier de vidage et taille du segment de mémoire GC
Voici ce sont des parties de la sortie:
0:000> !eeheap -gc
Number of GC Heaps: 1
generation 0 starts at 0x6a12ffcc
generation 1 starts at 0x6a12ffc0
generation 2 starts at 0x016a1000
ephemeral segment allocation context: (0x6a12ffd8, 0x6a12ffe4)
segment begin allocated size
016a0000 016a1000 0269ff64 0x00ffef64(16772964)
...
69130000 69131000 6a12ffd8 0x00ffefd8(16773080)
Large object heap starts at 0x026a1000
segment begin allocated size
026a0000 026a1000 03698a98 0x00ff7a98(16743064)
...
70020000 70021000 70a7d750 0x00a5c750(10864464)
Total Size 0x3c67abb4(1013427124)
------------------------------
GC Heap Size 0x3c67abb4(1013427124)
Est-ce qu'on doit attendre? Où seraient les ~ 500 Mo restants?
Quelques détails:
- Le fichier de vidage lui-même a une taille de 2.007.000.476 octets.
- La machine sur laquelle le logiciel était exécuté ne disposait que de 1 Go de RAM physique, mais la mémoire virtuelle de cette machine était configurée pour atteindre 3 Go (de sorte que l'application devrait pouvoir atteindre le maximum de 32 Go). applications nettes).
Le processus devrait pouvoir aller jusqu'à 1.5G, si je ne me trompe pas. Mon problème n'est pas que je veuille changer la limite (comme à 3GB). Btw. d'autres réponses/commentaires sur SO j'ai eu l'impression que ce n'est même pas possible. Je veux savoir où les autres 500 megs ou si sont dans .net tas. J'ai essayé! Heap -s, mais cela n'a totalisé qu'environ 100MB (il faut vérifier plus tard quand j'ai plus de temps, la sortie de cette commande prend un peu de temps pour s'y habituer) –
Vous devez vérifier la taille de la réserve. Cela vous indique essentiellement combien d'espace d'adressage de processus le processus a demandé. Cela étant élevé est ce qui causera des erreurs de MOO. Eh bien, c'est une simplification grossière, mais c'est un bon début, et couvrira 90% des cas. – Zipper