Cela se produit sur un système embarqué qui utilise une version personnalisée de la plate-forme Android 4.0.2. Je vois une de nos applications d'activité Android atteindre environ 400 Mo (taille rss lorsque "ps" est invoqué) et se faire tuer par le tueur Linux OOM. La plate-forme Android a été configurée avec une taille de segment maximale définie sur 62M. Je ne sais pas comment Dalvik VM a laissé l'activité passer à 400MB.Processus de mémoire insuffisante Linux tuant mon application Android
L'application ne devrait-elle pas avoir des exceptions Java hors mémoire lorsque le tas atteint environ 60 Mo? Nous ne voyons pas ces exceptions Java dans les journaux logcat ou dans les traces anr.
Nous avons implémenté un exemple d'activité qui alloue des tableaux d'octets en séquence et définit chaque octet sur une valeur fictive. Nous voyons des exceptions Outofmemory lorsque l'activité a alloué environ 60 Mo.
Y a-t-il des chemins d'allocation dans android qui ne sont pas comptabilisés dans le budget de tas? L'activité affiche les png bitmap téléchargés à partir d'un site Web.
Voici les résultats de "getprop" sur notre plateforme.
$ adb shell getprop | grep -i tas
J'apprécie tous les pointeurs.
Merci
: Edité Note: ci-dessous est sortie ps. Le Pss et Us sont autour de 316M qui est bien au-dessus.
PID Vss Rss Pss Uss cmdline logcat: hd[0]: pexecd(65): 982 351512K 351316K 326300K 316632K mytest.home^M logcat: hd[0]: pexecd(65): 660 679916K 61044K 57200K 56952K ./videngine^M RAM: 741764K total, 20320K free, 2148K buffers, 80104K cached, 24964K shmem, 10368K slab
Il s'agit d'une application Android sans aucun JNI personnalisé en cours. Je veux que JVM jette des exceptions de MOO au lieu de laisser le processus atteindre 400 Mo. – videoguy
Il ne peut pas être personnalisé (en fait j'avais pensé - peut-être à tort - ce n'était même pas votre application), mais que fait-il? Il y a beaucoup de JNI dans le code de la plateforme. –
Cette application charge une page Web en utilisant le contrôle du navigateur Web Android. On dirait que le moteur Webkit fait beaucoup d'allocations en code natif en dehors du tas Java Android basé sur la page en cours de téléchargement. Cela explique pourquoi l'application est passée à 300 Mo +. – videoguy