Size: a a a

2020 November 13

SL

Sergey Loguntsov in ErlangRus
спасибо . буду эксперименты ставить
источник

SL

Sergey Loguntsov in ErlangRus
Maksim Lapshin
ты очень плохо и невнимательно читаешь и споришь с голосами у себя.

Ты НЕ увидишь креш. Ты увидишь beam.smp, который сожрал 100%, потом если повезет, он начинает что-то печатать в файл/stdout, занимается этим до получаса и мрет.

Но чаще падает от OOM при попытке сначала распечатать, а потом порезать.

И у тебя нет никакого стандартного способа узнать, хотя бы в какой строчке кода это произошло
во во ... вот примерно это и происходит
источник

SL

Sergey Loguntsov in ErlangRus
повезло что это был просто эксперимент
источник

A

Andrey in ErlangRus
Maksim Lapshin
ты очень плохо и невнимательно читаешь и споришь с голосами у себя.

Ты НЕ увидишь креш. Ты увидишь beam.smp, который сожрал 100%, потом если повезет, он начинает что-то печатать в файл/stdout, занимается этим до получаса и мрет.

Но чаще падает от OOM при попытке сначала распечатать, а потом порезать.

И у тебя нет никакого стандартного способа узнать, хотя бы в какой строчке кода это произошло
Макс, я не очень то хочу с тобой спорить. Для таких случаев мы сделали тулсу, которая логирует по сути снапшоты обсервера. И там по факту можно посмотреть какой процесс сожрал память и его стек.
источник

ML

Maksim Lapshin in ErlangRus
Andrey
Макс, я не очень то хочу с тобой спорить. Для таких случаев мы сделали тулсу, которая логирует по сути снапшоты обсервера. И там по факту можно посмотреть какой процесс сожрал память и его стек.
Ну так тебе для этого надо гонять его _постоянно_
источник

SP

Sergey Prokhorov in ErlangRus
Maksim Lapshin
format_state — полумера.

Самая жопа остается в Reason: там печатается полный стейт
полный или нет - это вроде от типа ошибки зависит не? Вроде только в badarg, function_clause и badmatch собственно данные добавлются. и только если стейт был одним из аргументов. Хотя это скорее всего большинство сценариев и есть
источник

A

Andrey in ErlangRus
Maksim Lapshin
Ну так тебе для этого надо гонять его _постоянно_
да есть такое дело. Ничего не идеально. Но когда оомы заканчиваются обычно эту штуку вырубают
источник

DZ

Danil Zagoskin in ErlangRus
Sergey Prokhorov
в logger formatter можно указать сколько максимально ты хочешь тобы байт в лог попало
так себе вариант, потому что при распечатывании креша не будет видно ни причины, ни стектрейса.
Я рекомендую везде печатать с указанной глубиной, т.е. format("~P", [LargeTerm, 50]). Ограничение по байтам при этом можно использовать как запасной ограничитель.
источник

ML

Maksim Lapshin in ErlangRus
Andrey
да есть такое дело. Ничего не идеально. Но когда оомы заканчиваются обычно эту штуку вырубают
да при чём тут «не идеально».

Есть реально хреновый код, который на ровном месте хоронит продакшн при неудачной попытке залоггировать проблему.

Зачем это оправдывать и говорить что «всё нормуль, мы привыкли»
источник

A

Andrey in ErlangRus
Maksim Lapshin
да при чём тут «не идеально».

Есть реально хреновый код, который на ровном месте хоронит продакшн при неудачной попытке залоггировать проблему.

Зачем это оправдывать и говорить что «всё нормуль, мы привыкли»
Так кто оправдывает? Я вроде не говорю, что код хороший. Просто ты желаешь при хреновом коде залогировать "мусор" и не упасть, а я не считаю, что нода должна жить любой ценой.
источник

AB

Alex Bubnov in ErlangRus
Andrey
Так кто оправдывает? Я вроде не говорю, что код хороший. Просто ты желаешь при хреновом коде залогировать "мусор" и не упасть, а я не считаю, что нода должна жить любой ценой.
> я не считаю, что нода должна жить любой ценой.
очень спорный подход
источник

A

Andrey in ErlangRus
Это опять про написание без багов. Кто то живёт без вотчдога?
источник

DF

Denis Fakhrtdinov in ErlangRus
Дело не в написании без багов. Никто не живет без вотчдога, тестирования и проч.
Речь про возможность выстрелить себе в ногу. Лучше бы её не было, но се ля ви.
источник

SP

Sergey Prokhorov in ErlangRus
Danil Zagoskin
так себе вариант, потому что при распечатывании креша не будет видно ни причины, ни стектрейса.
Я рекомендую везде печатать с указанной глубиной, т.е. format("~P", [LargeTerm, 50]). Ограничение по байтам при этом можно использовать как запасной ограничитель.
max_size вроде автоматом ~p на ~P подменяет
источник

DZ

Danil Zagoskin in ErlangRus
Sergey Prokhorov
max_size вроде автоматом ~p на ~P подменяет
ничоси! А как он выбирает глубину?
источник

SP

Sergey Prokhorov in ErlangRus
источник

SP

Sergey Prokhorov in ErlangRus
а, это depth опцией регулируется http://erlang.org/doc/man/logger_formatter.html#depth
источник

SP

Sergey Prokhorov in ErlangRus
> depth = integer() > 0 | unlimited
> A positive integer representing the maximum depth to which terms shall be printed by this formatter. Format strings passed to this formatter are rewritten. The format controls ~p and ~w are replaced with ~P and ~W, respectively, and the value is used as the depth parameter.
источник

SP

Sergey Prokhorov in ErlangRus
21> io:format("~P", [binary:copy(<<0>>, 100), 5]).
<<0,0,0,0,...>>ok
22> io:format("~P", [binary:copy(<<0>>, 100), 10]).
<<0,0,0,0,0,0,0,0,0,...>>ok
23> io:format("~p", [binary:copy(<<0>>, 100)]).    
<<0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0>>ok
источник

ML

Maksim Lapshin in ErlangRus
Andrey
Так кто оправдывает? Я вроде не говорю, что код хороший. Просто ты желаешь при хреновом коде залогировать "мусор" и не упасть, а я не считаю, что нода должна жить любой ценой.
ну пускай нода крешится и умирает, но хотя бы с последним стектрейсом.

Вместо этого 100% CPU и жор памяти до OOM. Причем что характерно, если по памяти пролезает, то печать займет часы
источник