4 votes

Comment diagnostiquer mon programme Python qui est tué en raison d'une erreur de mémoire insuffisante ?

J'ai construit un réseau neuronal qui analyse de grandes quantités de données (40G), et mon iMac arrête le processus après qu'il ait tourné pendant environ une journée.

Dans le passé, sous Linux, j'ai créé un grand fichier d'échange pour contourner les limitations de mémoire.

Je vois :

$ python processor.py
[... peut-être des messages de sortie standard, spécifiques à ce que je fais...]
Killed.

J'en suis venu à connaître cela comme le message "vous avez utilisé trop de mémoire, au revoir". Encore une fois, j'ai pu résoudre le problème en utilisant un grand fichier d'échange sous Linux. Comment puis-je augmenter la limite d'échange sur mon Mac afin que mes processus utilisant de grandes quantités de mémoire ne soient pas arrêtés ?

Je ne suis pas sûr de comment obtenir plus d'informations sur pourquoi il a été arrêté.

2 votes

Pouvez-vous éditer exactement les messages système qui sont enregistrés lorsque le processus est tué ? Quel est l'état de la mémoire à ce moment-là (peut-être 5 minutes avant et 5 minutes après la terminaison) ? Je suppose que vous avez un autre problème car l'échange peut et va croître pour occuper tout l'espace sur le volume de démarrage, mais habituellement c'est la faute du programme d'avoir autant de RAM échangée et jamais récupérée.

1 votes

Ajouté quelques modifications ci-dessus.

0 votes

Beauxedits. Puisque vous l'exécutez à partir d'un shell, considérez également de jeter un œil à ulimit -a. Je n'ai pas de cas test où je peux faire en sorte que le système s'étouffe sur 10.10.x. En outre, surveillez la pression de mémoire.

5voto

Oskar Points 1242

Voici quelques façons de vérifier les problèmes, mais je crains qu'ils ne soient pas une solution complète ou même correcte sans plus d'exploration ou de recherche:

Dans un autre terminal après avoir démarré votre processus python (ou si vous utilisez screen / tmux):

  1. df /
  2. top -l 1 -S | head -12
  3. vm_stat et vm_stat 600
  4. sudo du -sm /var/vm/*

Une fois que vous avez une bonne base, vous pouvez surveiller les choses au fil du temps pour voir comment le réseau neuronal se comporte chaque heure pendant un certain temps. Si vous pensez que les choses sont sur le point de s'arrêter, vous pouvez exécuter sysdiagnose python (ou utiliser le numéro de processus si vous avez plus d'un processus python en cours d'exécution). De plus, si vous ne voulez pas attendre toute la journée que les choses s'accumulent, vous pouvez provoquer une pression de mémoire sur le système avant ou après le démarrage du réseau neuronal en python. Consultez cette réponse pour savoir comment surveiller l'Activité Monitor lorsque vous exécutez ce processus:

0 votes

Génial, merci pour cela. Je vais m'amuser avec ça et voir ce que je trouve.

1 votes

Je suis assez sûr que vous voulez dire df / là où vous avez écrit df \

0 votes

@PascalCuoq Vous avez raison. N'hésitez pas à modifier les publications où c'est le cas à l'avenir :-) Parfois, le système est grincheux pour de petites éditions cependant.

0voto

Simon Points 558

C'est SIGKILL. Il est difficile de dire que c'est OOM sur macOS puisque lorsque vous tail -f /var/log/system.log

 Jan 14 10:46:39 ... com.apple.xpc.launchd[1] (com.apple.mdworker.shared.10000000-0000-0000-0000-000000000000[41845]):           Service exited due to SIGKILL | envoyé par mds[72]

Le message d'erreur n'aide pas.

Ensuite, j'ai essayé Instrument fourni avec macOS,

entrer la description de l'image ici

Et attacher l'instrument à votre processus Python. Vous pouvez voir la mémoire augmenter indéfiniment jusqu'à ce qu'elle soit arrêtée.

entrer la description de l'image ici

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X