Когда слышишь об OutOfMemory
в Java, на ум приходят всякие раздувшиеся коллекции, забытый finally
или тонны бесполезных объектов, почему-то зависших в куче. Для устранения таких причин есть стектрейсы, хип-дампы и другие полезные штуки, но главное – возможность исправить что-то в своём коде.
Но как быть, если нехватка случилась в нативной памяти, вне кучи? Как определить ее источник? На что можно повлиять, если напрямую с этим не работаешь? Почему вообще такое может произойти, и что делать, чтобы этого избежать?
В докладе посмотрим на эти вопросы глазами прикладного разработчика, прощупаем JVM Native Memory Tracking (и его недостатки), заглянем в устройство oomKiller’а в Linux и познакомимся с инструментами, которые бы уж лучше никогда не пригождались…