【发布时间】:2017-04-24 18:00:52
【问题描述】:
我有一个问题,我使用 gen server 来做一些简单的工作:
one handle_cast to do a long time work(takes 60 seconds)
one handle_cast to do a very fast work
流量低时一切正常。但是当服务器进程在进行第一次长时间的工作时,客户端向服务器发送了数千条消息(例如邮箱中的1000000条消息),长时间工作会变得非常缓慢,可能需要600秒才能完成。
这个问题就像stackoverflow上的这个问题In Erlang, when a process's mailbox growth bigger, it runs slower, why?。
但我还是不明白。如果是因为垃圾收集,垃圾收集怎么会花这么长时间或这么频繁?
【问题讨论】:
-
您能否显示需要很长时间的
handle_cast子句的代码?可能导致这种情况的一件事是,如果存在与特定消息匹配的receive表达式。 -
@legoscia 哦,不。这个过程只是在一个循环中将大约 30,0000 个文档插入到 mongodb 中。我的机器每秒可以写5000多个文档,也不是mongodb磁盘IO造成的。
-
@legoscia 这个问题就像遇到stackoverflow.com/questions/36216246/…
-
这样的问题最好附上SSCCE。否则,其他人大多只能猜测发生了什么。
标签: erlang gen-server