Erlang的Mailbox或者MQ的性能问题

最近看了几篇帖子 

erlang-questions mailing list上的讨论Low disk logging performane in SMP 
Caoyuan's Blog: A Case Study of Scalability Related "Out of memory" Crash in Erlang 
Caoyuan's Blog: Async or Sync Log in Erlang - Limit the Load of Singleton Process 

它们都是关于Erlang的mailbox性能问题的。  所谓mailbox,就是Erlang的process用于存储其他进程发来的尚未处理的消息的容器。 

根据这些讨论我有下面几点总结: 
  1. 不要把mailbox“撑爆”:当mailbox太大的时候,selective receive的性能就会大打折扣。 在第二篇帖子中,作者的甚至把error_logger的mailbox塞到机器out of memory!
  2. 如何避免:这几篇讨论这中“撑爆”的mailbox都是日志process:一个是error_logger,另一个是file_logger。 日志进程的io操作都是比较耗时间的,而发送来的消息又太多太快,以至于写日志的进程根本来不及处理,消息只能在mailbox中积累。 所以这在种consumer速度跟不上producer的情况,要尽量减轻consumer(这里是logger)的负担,让操作尽量在producer处完成(比如日志的格式化操作在发送者处做好,而不是在logger处)。 另外还可以考虑把logger从singleton变成分布式的。
  3. SMP:多核的使用会加剧这种多producer单consumer情形的速度差距,导致性能下降,甚至内存溢出。 
  4. 根据第一篇中的讨论,file:write似乎也是把write的请求发给一个file server,所以过多的请求也会导致write请求的处理效率低下。 把几个write请求大包成一个write请求再发送过去或许是一个提高性能的办法。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值