Options = [{spawn_opt, [{fullsweep_after, 0}]}],
gen_server:start_link({local, ?SERVER}, ?MODULE, [], Options).
erlang:garbage_collect()
--
Вы получили это сообщение, поскольку подписаны на группу "Erlang по-русски".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес erlang-russia...@googlegroups.com.
Чтобы отправлять сообщения в эту группу, отправьте письмо на электронный адрес erlang-...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.
handle_info({tcp, Socket, Data}, State = #connect_state{socket = Socket, transport = _Transport}) ->
% lager:warning("[proto] raw data: ~ts", [Data]),
{TailData, NormalState} = case State#connect_state.tail of
<<>> -> {Data, State};
_ ->
MergeData = iolist_to_binary([State#connect_state.tail, Data]),
MergeState = State#connect_state{tail = <<>>},
{MergeData, MergeState}
end,
case binary:last(TailData) of
0 ->
BinPackets = binary:split(TailData, <<0>>, [global, trim]),
NewState = stream_processing(BinPackets, NormalState);
_ ->
Buffer = binary:split(TailData, <<0>>, [global, trim]),
Tail = lists:last(Buffer),
BinPackets = lists:delete(Tail, Buffer),
TailState = State#connect_state{tail = Tail},
NewState = stream_processing(BinPackets, TailState)
end,
{noreply, NewState, ?TIMEOUT};
stream_processing([], State) -> State;stream_processing([Pkt | Tail], State) -> case jsonx:decode(Pkt, [{format, proplist}]) of {error, X, Y} -> lager:error("Error JSON decode [~p, ~p]. JSON: ~ts", [X, Y, Pkt]), State; Packet -> NewState = case proplists:get_value(?__TYPE, Packet) of ?__LOGIN -> login(Packet, State); PktType when State#connect_state.authorized -> Cmd = proplists:get_value(?__COMMAND, Packet), packet_processing(PktType, Cmd, Packet, State); _UnauthorizedPkt -> lager:warning("Unauthorized packet type ~p. Cmd: ~p. Dump: ~p", [_UnauthorizedPkt, proplists:get_value(?__COMMAND, Packet), Pkt]), State end, stream_processing(Tail, NewState) end.
Есть sqlite2 driver
Спросите конкретнее. Все расскажу:)среда, 30 июля 2014 г., 10:48:50 UTC+6 пользователь Sergey Abramyan написал:
Как работаете с бинарями? Бинари какого размера?--
Sergey Abramyan
erlang:garbage_collect() не помогает, то эрланг зарезервировал эту память под будущие данные. GC не всегда запускается, если лишняя память есть.
Попробуйте замеры сделать с помощью erlang:memory(), если binary не сильно скачет, то это нормально.
У меня похожая ситуация, только данные 25-250кб, binary в пределах 1.5 - 2гб
среда, 30 июля 2014 г., 8:43:24 UTC+4 пользователь Денис Парыгин написал:Используете ли вы gen_server?
Как работаете с бинарями? Бинари какого размера?
Да, использую gen_server
Если память копится в gen_server, можно попробовать вызвать сборку мусора из другого процесса по pid gen_server
среда, 30 июля 2014 г., 11:04:10 UTC+4 пользователь Денис Парыгин написал:Да, использую gen_server
--
Поставьте recon и проверьте: recon_alloc:usageВернется КПД аллокатора.
2> recon_alloc:memory(used).
22168296
3> recon_alloc:memory(usage).
0.5682786907905447
4> tmsUtils:uptime().
"0 days, 0 hours, 3 minutes and 58 seconds"
5>
--
Всем привет!
А где там конкретно? Не капнул?
26 авг. 2014 г. 7:02 пользователь "Денис Парыгин" <denn...@gmail.com> написал: