@neFormal

Тег erlang в блоге neFormal

neFormal
#owxfi
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
neFormal

Книжка про виртуальную машину жрланга:
https://github.com/happi/thebeambook

#ojyuo
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
neFormal

Пока писал одну программку решил посмотреть на erl_call. И мне понравилось. Для управления кластером вполне годится.
Сейчас я бы немного по-другому строил последний написанный сервак(а там pool и код заливается из приложеньки). Хотя я понимаю, что архитектура была обусловлена техническими ограничениями в своё время.

#ipyoq
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
neFormal

Напоролся на rebar. Очень похоже, что я давно-давно с ним толком не разобрался и теперь выхватил проблем.
Суть токова.
У меня используются protobuffs и есть свой скрипт для вызова компилятора. А у ребара есть внутренняя поддержка компиляции прото-файлов. И вот я думал, что собираю одним, а оказалось, что не могу собрать другим.
Проблема в том, что прото-файлы переместили, чтобы они не валялись в общей куче с исходниками. А в ребаре пути до файлов захардкожены, и он оригинально относится к хукам. Сперва он вызывает pre_hooks у всех приложений, а только потом глобальные хуки. Т.е последовательность, приводящая к проблемам такая: пре_хуки приложения, ребар находит прото-файлы, компиляет и ломается. А глобальные хуки с моим скриптом должны были вызваться после всего этого.
Заделывается это довольно просто:
{pre_hooks,[
{compile, "./protoc-erl src/proto/ src/proto/*.proto"}
]}.
{proto_opts, [
{src_dirs, []}
]}.
Последнее важно, т.к. отключения у ребара компиляции прото-файлов я не нашёл.

#icvsg
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
neFormal

Льётся трафф, а я откинулся на спинку кресла и смотрю, что эрлангу пофиг на нагрузку.
Что-то плохо работает? exit(Pid, die_mothefucker). И зачем только люди пилят игровые бэкенды на жаве и скриптовых языках? Враги своем нервам.

#ipodv 1
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
neFormal

Нашёл, в чём была лажа из #vhplh
У меня есть толстая пачка конфигов, и я их хранил одним диктом в application env'е. Сделано это было в самом начале проекта и типа временно.
А сейчас конфигов стало так много, что оно стало заметно уже и не под нагрузкой.
Непонятны два момента:
1. утилизация шедулеров была на 100%, но проц был ещё на 20% свободен
2. на результатах от fprof'а нагрузки от этой лажи заметно не было

#iamtw
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
neFormal

Этот весёлый рандом.
Добавил в проект мнезию, переписал нужные ф-ции с ets, запустил со своего пека в связке с удалённым. Всё норм.
Собрал релиз, вылил на тестовый сервант - не работает.
Посмотрел на код запуска: rpc:multicall([node() | nodes()], application, start, [mnesia]). Вроде норм.
Посмотрел на ф-цию, где оно вызывается. Вроде норм, но может за что-то цепляется? Начал разбираться.
Долго ли, коротко ли, но вышел на строчку, которая напрямую влияла на результат: application:set_env(myapp, ...). Если там выставлять нормально загруженные данные, то всё норм. А если выставлять всякую лажу, то не норм.
А проблема была в том, что сначала нужно запустить все мнезия-ноды в кластере, а потом только запускать основную. Такой вот рандом.

#ipqjz
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
neFormal

Кто-нибудь понимает логику gproc'а? Я смотрю в api и фалломорфирую от хаоса.
А нужно всего ничего - использовать gproc, как ets для хранения кортежа со значениями. Иногда обновлять, часто показывать.

#vrxdu 9
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
neFormal
#vnypx
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
neFormal

Продолжаю эпопею из #vyxsr
Результаты таковы, что jmeter засылает пачки запросов с 500 коннектов, потом снова, и снова, и снова. И так 5к юзеров.
И в результате epgsql в пике начинает тупить до 5 секунд, а пулбой до 15 секунд. При этом процессов всего-то порядка 3,5к. Найденные переполнения очередей у процессов ликвидированы.
Проц отъедается лишь на 80-90%, из них в system time висит порядка 10-20%(как и в idle). При этом iowait почти всегда пустой. Системные трейсы показывают, что в system time делается лишь write да switch, что не выглядит подозрительно.
Утилизация шедулеров 1.0 на всех ядрах, а проц занят лишь на 80%. Вот это мне категорически непонятно.
У меня кончились идеи, что ещё можно ковырнуть. Конечно, epgsql оказался сыроватым, есть мелкие подвохи, но в остальном непонятно. БД не гнётся, сетка тоже.
Остаётся подозрение на то, что коннекты долго устанавливаются. Ведь скорость обработки 500шт - 2мин, 300шт - 1мин, 200шт - 30сек.

#vhplh
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
neFormal

Разбираюсь с нагрузкой. И есть фатальная непонятка.
У меня с ростом нагрузки увеличивается время возврата ответа на сall'ах. Например, из базы процесс читает за 700мс, а от воркера наверх ответ прилетает уже за 3000мс. При этом у проца ещё есть запас мощности, память не съедена, но в system time уже 30+%
Я так понимаю, что это возникает из-за большого числа процессов в системе(в основном внешние длинные сокетные коннекты) и того, что они все хотят залезть в пул db_worker'ов.
Но как такое лечить? Не хочется иметь задержки на ответах.

#vyxsr 12
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
neFormal

Мне захотелось странного: хочу тестить состояния процессов после запуска некоторой команды.
Суть токова:
1. шлю сообщеньку
2. достаю state через sys:get_state/1
3. т.к. внутренности состояния мне неизвестны по формату, то делаю пачку костыльных ф-ций типа all_users(#state{}) и дёргаю их из теста через (sys:get_state()):all_users()

Мне здесь не нравится, что придётся лепить ненужные ф-ции.
Как с этим жить? Что лучше сделать? Ну, кроме ifdef.

#vhdma 8
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
neFormal

Нужно какое-то слово, которое обозначает анонимный процесс. Что-то типа лямбда-процесс

#vymux 6
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
neFormal

Словил странную проблему.
Есть tmux с двумя фреймами.
В одном из них запущена эрланговская приложенька через релиз с приаттаченной консолью.
Во втором фрейме я переношу весь релиз ~/proj/ -> ~/bkup/
Вношу правки, пересобираю релиз и перезапускаю приложеньку. И она не пашет. Не находит одну из зависимостей.
Через несколько попыток нащупать проблему дёргаю code:get_path() и вижу, что там путь указан на ~/bkup/. Т.е. я нахожусь в ~/proj/, а релиз запускается, как будто он в другом каталоге.
Как? Кто виноват?

#vhhiv 6
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
neFormal

Бла
12> 5.9 == 6.
false
13> 5.99999999999999999 == 6.
true

#ovnaay 7
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
neFormal

Вот это жопа была с отправкой get-запроса с кириллицей в ВК.
Всё крутилось вокруг сигнатуры. Она снимается через md5 с параметров.
Так вот.
1. сигнатуру надо снимать с уникодных символов, которые >255. и crypto:hash захочет бинарь на вход.
2. в аргументы запроса надо пихать urlencoded-текст иначе bad request.
при этом http_uri:encode/1 не пашет, а edoc_lib:escape_uri/1 пишет какую-то лажу. в итоге взял чей-то костыль. и, конечно, же все они хотят листы вместо бинарей.
3. вк в свою очередь радует поддержкой легаси и кривыми доками, в которых популярное и давно используемое легаси не описано. шаг в сторону - ошибка.

#ovnqjz
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
neFormal

Эрланго-машина без нормально настроенного аллокатора жрёт память, как не в себя. Гиг в минуту - это просто.
Придётся пока дёргать [garbage_collect(Pid) || Pid <- processes()].
А завтра узнаю, могу ли я настроить более вменяемый механизм очистки.

#ovqdam 17
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
neFormal

На память.
Подключение observer к удалённой ноде:
erl -name nodename@127.0.0.1 -setcookie cookie -remsh nodename@remote.server.com -hidden -run observer
Дальше в меню Nodes -> Connect Node и ввести имя удалённой ноды, куда хочется подключаться.

#ovqdyg
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
neFormal

От автора learnyousomeerlang новая книжка: http://www.erlang-in-anger.com/

#tlxbo 3
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
neFormal

Есть master-нода и пачка slave-нод. набор процессов на них разный. на барской ноде запущены разные доп.сервисы типа веб.морды, а на холопских только небольшие задачи.
Проблема в чём... Если указывать зависимости в .app.src, то всех холопским нодам необходимо будет иметь тот же набор бинарей, что и на барской. А у меня оно всё заливается по сетке. В добавок возникает проблема с gproc, т.к. он как-то по-наркомански запускается. Сейчас я запускаю его руками, через костыли.
Хочется понять, как это можно более здраво организовать.
у меня пока есть мысль только сделать отдельные приложения для барской и холопских нод. Тогда не будет проблемы с заливкой кода, т.к. будут разные .app.src.
Ещё можно отказаться от .app.src. Руками всё запускается легко, но это не так красиво.

#nfehf
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.