Спрашивал у наших Go программистов, как они ищут проблемы с памятью, говорят делают снимок памяти в файл по сигналу/по команде в сокет, потом его какими-то просмотрщиками смотрят. В Erlang с этим несравнимо проще, как ни крути.
У меня был (ограниченный, но успешный) опыт поиска утечек в программе на Go. Утекало что-то под 8 гигабайт, дальше просто слишком медленно всё становилось.
Встроенная рудиментарная интроспекция происходящего в процессе сильно помогает. Во-первых, он выдает прямо по http статистику кучи: сколько байт аллоцировано какой строчкой кода (или вроде того) вместе с примерами стек-трейсов. Во-вторых, можно смотреть в каком месте процесс обычно проводит время (при выделении очередного куска памяти в запущенном случае всё подтормаживает и такой стек легко видеть глазами).
Но пока явно рантайм в Эрланге куда более развит в эту сторону. Возможно, через несколько лет, команда Go чего-нибудь допилит.
Reply
Reply
Reply
http://golang.org/pkg/net/http/pprof/
Можно подрубиться к приложению в продакшене и посмотреть какой код сколько аллоцировал памяти. Утечки находятся на раз.
Reply
Для того, что бы согласиться, надо что бы я сначала увидел, как утечка ищется в выделенных 20 гигабайтах под нагрузкой.
Reply
Встроенная рудиментарная интроспекция происходящего в процессе сильно помогает. Во-первых, он выдает прямо по http статистику кучи: сколько байт аллоцировано какой строчкой кода (или вроде того) вместе с примерами стек-трейсов. Во-вторых, можно смотреть в каком месте процесс обычно проводит время (при выделении очередного куска памяти в запущенном случае всё подтормаживает и такой стек легко видеть глазами).
Но пока явно рантайм в Эрланге куда более развит в эту сторону. Возможно, через несколько лет, команда Go чего-нибудь допилит.
Reply
Reply
Leave a comment