суббота, 8 февраля 2014 г.

Joe Armstrong анонсировал too big to fail - теперь язык будет называться SuperErl

Новую возможность в  Erlang, посел 12 лет обсуждение, они собираются добавить  flag при создании процесса too_big_to_fail  
test() ->
    spawn(fun() ->
          process_flag(too_big_to_fail, true)
      end).

воскресенье, 3 ноября 2013 г.

Очередь сообщений процессов

Вот сферический  код в вакууме...
infloop()->
    receive
            {msg, Msg}->
                    io:format("infloop ~p ~n",[Msg]),
                    infloop1()
    end.

infloop1()->
    receive
            {msg1, Msg}->
                    io:format(" infloop1 ~p ~n",[Msg]),
                    infloop()
    end
.

среда, 19 июня 2013 г.

Подключаемся к работающей ноде


       Вы  запустили приложение, оно падает, непонятно почему. Нужно понять почему оно так себя ведет. Первый шаг в постановке диагноза
необходимо это подключение к работающей ноде. Что мы и сделаем


erl -sname test -setcookie *COOKIE* -remsh <NodeName>@server.domain.com

Мы тут, что дальше. Все функции отрабатывают, куда девается память?

> ni() -  команда покажет все работающие процессы на данный момент.

>net_adm:ping(Node) -команды модуля помогут проверить доступность нод или даже процессов.

> erlang:process_info(Pid)  -покажет всю доступную информацию о процессе.

> erlang:processes() - выдаст список пидов всех работающих процессов

>erlang:garbage_collect() - заставит собрать весь мусор
> erlang:memory() или посмотрим общую информацию о состоянии памяти

 > erlang:system_info(Type) - в конце концов покажет системную информацию о всей работающей ноде

>ets:all()  вывести все открытые ets таблицы в виде списка


вторник, 23 апреля 2013 г.

Еще один довод чего erlang крут

     Совсем недавно была проблема заключающаяся примерно в том, что erlang -нода отжирала постепенно до 6 гиг памяти, но при этом работала
принимала запросы, что-то делал...Примерно понимал в чем может быть проблема...в итоге все решилось следующим образом я подключился
к ноде...и выполнил команду

erl>ets:info(some,size).
90000000
erl>length(erlang:processes()).
100000
 То есть где-то я набочинил....ets то я убью...а вот где застряли процессы

erl>ni().
<дальше следует список процессов  в котором я сразу же обнаружил
много раз повторяющийся один процесс>
Вздохнув, что набочинил я, а не разработчики Erlang-а(верояность маленькая но всегда стоит помнить)...исправил баг

среда, 20 февраля 2013 г.

Не хватает порой функции zip_n

Коротко есть фунлция lists:zip, которая принимает в качестве аргументов
два списка и возвращает список пар значений списков...функция реализована для двух и трех списков, очень мне хотелось иметь zip для n
списков....
в итоге  my_zip_n принимает список списков, возвращает соответственно
свернутых списков


пятница, 21 декабря 2012 г.

среда, 28 ноября 2012 г.

Сердце Erlang


        Нет мы будем говорить не об ядре, а об одной опции машины Erlang-а.  Если вы хотите, что бы нода работала даже если вдруг у нее закончилась память, все из-за какой-то ошибке засвопилось,  или хм или вы достигли чего-то типа max_restart_frequency у супервизора, то разработчики Erlang-a придумали прекрасную опцию.  Они назвали ее -heart, то бишь сердце.
Возьмем скрипт для старта.