Vraag Krijg een kern dump van / debugging van een proces gedood door oom-killer


Is er een manier om een ​​kerndump te krijgen van, of een proces te debuggen dat is gedood door oom-killer?

Of zelfs oom-killer instellen om te proberen een proces te doden met ABRT in plaats daarvan?


9
2018-01-25 10:09


oorsprong




antwoorden:


Een andere benadering is om het overcommit van geheugen uit te schakelen.

Om een ​​beetje schijn van gezond verstand terug te brengen in je geheugenbeheer:

  1. Schakel de OOM-moordenaar uit (Put vm.oom-kill = 0 in /etc/sysctl.conf)
  2. Schakel geheugenoverbelasting uit (Put vm.overcommit_memory = 2 in /etc/sysctl.conf)

Deze instellingen zorgen ervoor dat Linux zich op de traditionele manier gedraagt ​​(als een proces meer geheugen vereist dan beschikbaar is) malloc() zal falen en verwacht wordt dat het proces dat om het geheugen vraagt ​​deze fout aankan).

Merk op dat dit een ternaire waarde is:
  • 0 = "schat als we genoeg RAM hebben"
  • 1 = "Zeg altijd ja"
  • 2 = "zeg nee als we het geheugen niet hebben"

Dit zal de toepassing dwingen om het geheugen zonder geheugen te verwerken, en mogelijk ook logs/coredump/... kan je iets nuttigs geven.

UPDATE # 1

NOTITIE: Wanneer uw systeem onvoldoende geheugen heeft, zult u geen nieuwe processen kunnen uitlokken! Mogelijk bent u buitengesloten van het systeem.


5
2018-01-25 11:08





echo 1 > /proc/sys/vm/oom_dump_tasks

wat lijkt op het maximum dat je de kernel kunt laten weergeven op fouten die niet in het geheugen zijn opgeslagen.

https://www.kernel.org/doc/Documentation/sysctl/vm.txt

Hiermee kan een systeembrede taakdump (exclusief kerneldraden) worden uitgevoerd   geproduceerd wanneer de kernel een OOM-moord uitvoert en deze omvat   informatie als pid, uid, tgid, vm size, rss, nr_ptes, swapents,   oom_score_adj score en naam. Dit is handig om te bepalen waarom het   OOM-moordenaar werd aangeroepen om de rogue-taak te identificeren die de oorzaak was, en   om te bepalen waarom de OOM-moordenaar de taak koos om te doden.

Als dit op nul staat, wordt deze informatie onderdrukt. Op zeer groot   systemen met duizenden taken is het misschien niet haalbaar om de   informatie over de geheugenstatus voor elk apparaat. Dergelijke systemen zouden dat niet moeten zijn   gedwongen om een ​​prestatieboete op te leggen in OOM-condities wanneer de   informatie is misschien niet gewenst.

Als dit is ingesteld op niet nul, wordt deze informatie weergegeven wanneer de OOM   moordenaar doodt eigenlijk een taak om geheugen op te ruimen.


3
2018-01-25 10:55