erlang
文章平均质量分 81
wqtn22
这个作者很懒,什么都没留下…
展开
-
异步gen_server进行port访问时性能严重下降的原因和应对方法(一)场景
在进行项目开发时,有这么一个需求:一个生产者不断产生消息,并将消息异步投递给消费者,异步投递不受任何限制,消费者进程内部将消息写入文件或者通过套接字发送该消息。看到这个需求,我想也没想,熟练地写下了如下代码: API: start_link(FileName, DsgHost, DstPort) -> gen_server:start_link({local, ...原创 2012-06-30 20:37:45 · 157 阅读 · 0 评论 -
mnesia监控项目
mnesia在运行时提供了大量的统计量,对这些统计量进行监控,有助于正确使用mnesia,以及对mnesia进行调优,这些统计量包括: 代码版本R15B03 1.启动与运行时参数:运行相关参数:mnesia是否在运行中:mnesia:system_info (is_running) 信息输出级别:mnesia:system_info (debug) 是否使用数据...原创 2013-07-07 13:34:42 · 298 阅读 · 0 评论 -
gen_tcp的close与delay_send交叉问题
铁血的同学遇到这样一个问题,与之前4399同学遇到的问题类似,当初以为是erlang:ports/0的快照问题,仔细分析后发现另有玄机。以下是问题描述:>> 我使用的erlang版本是R15B03,进行socket处理的时候,如果在客户端到服务端有大概1000多个连接的时候(同时有较多的数据在发送),同时关闭所有客户端,>> 这时在使用ports()查询出的...原创 2013-01-07 22:07:57 · 454 阅读 · 0 评论 -
R15B01版本controlling_process一个port到self的问题
在R15B01上,遇到一个gen_tcp/gen_udp:controlling_process(Port, self())导致的port泄露问题,下列链接详细的说明了产生问题的步骤:https://github.com/erlang/otp/commit/944a57a11a79c5a9bb2f554c921e2e00e7d56c91该问题在R15B03得到了修复,此处分析这个问题如...原创 2013-01-07 21:43:24 · 115 阅读 · 0 评论 -
mnesia的index_read的性能问题
我们在程序开发过程中,存在如下的一段代码:F = fun () -> Recs = mnesia:index_read(table, Index, indexfield), NewRecs = some_ops_on(Recs), mnesia:write(NewRecs)end,mnesia:transaction(F). 这段代码在运...原创 2013-06-23 16:12:21 · 367 阅读 · 0 评论 -
erlang程序优化点的总结(持续更新)
转载请注明出处 注意,这里只是给出一个总结,具体性能需要根据实际环境和需要来确定霸爷指出,新的erlang虚拟机有很多调优启动参数,今后现在这个方面深挖一下。1. 进程标志设置: 消息和binary内存:erlang:process_flag(min_bin_vheap_size, 1024*1024),减少大量消息到达或处理过程中产生大量binary时的gc次数...原创 2013-03-03 15:40:08 · 402 阅读 · 0 评论 -
异步gen_server进行port访问时性能严重下降的原因和应对方法(五)套接字发送的应对...
复制前文的应对方法概览: 1从大道理上来讲,需要开发者预估一个进程的处理能力,不要向进程投递过多的消息以致于处理不完,如果处理不完,则需要重新设计,将消息分布到多个进程中处理;2将异步接收消息的进程与调用port(receive_match)的模式的进程分开;3拆分向port投递命令的过程,由进程来接收port回传的结果,而不是由模块接收;4不使用port编写的模块,利用nif...原创 2012-06-30 23:35:48 · 145 阅读 · 0 评论 -
异步gen_server进行port访问时性能严重下降的原因和应对方法(四)文件写的应对...
对于“进程允许异步投递,但进程内部有调用port(receive_match)的模式出现”这个问题的解决,有这么几个办法:1从大道理上来讲,需要开发者预估一个进程的处理能力,不要向进程投递过多的消息以致于处理不完,如果处理不完,则需要重新设计,将消息分布到多个进程中处理;2将异步接收消息的进程与调用port(receive_match)的模式的进程分开;3拆分向port投递命令的过程,...原创 2012-06-30 23:08:47 · 133 阅读 · 0 评论 -
异步gen_server进行port访问时性能严重下降的原因和应对方法(三)典型场景
上文解释了问题成因,即进程允许异步投递,但进程内部有调用port(receive_match)的模式出现 ,现在来看一个典型的场景。霸爷(yufeng)曾经不建议我们使用error_logger模块记录日志,因为该模块就使用了这个模式。首先看看error_logger的启动方式: start() -> case gen_event:start({local, e...原创 2012-06-30 22:28:49 · 175 阅读 · 0 评论 -
异步gen_server进行port访问时性能严重下降的原因和应对方法(二)成因
上文介绍了简单的问题场景,现在来分析下产生的原因。consumer进程里面调用file:write和gen_tcp:send来处理消息: handle_msg(Type, Msg, #state{file = File, socket = Socket}) when is_binary(Msg) -> case Type of file -> f...原创 2012-06-30 22:06:29 · 207 阅读 · 0 评论 -
erlang虚拟机topology不符导致启动后crash
线上有一台t4的机器,这些机器的cpu topo是经过伪造的,通过top命令可以看到4个核心:topCpu0 : 0.3%us, 0.0%sy, 0.0%ni, 99.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.7%stCpu1 : 0.7%us, 0.3%sy, 0.0%ni, 98.7%id, 0.0%wa, 0.0%hi, 0...原创 2013-12-24 15:49:47 · 198 阅读 · 0 评论