error_logger 爆炸

  具有讽刺意味的是,负责错误日志的进程竟然是最为脆弱的之一。在Erlang的缺省安装中,error_logger39负责记录日志(写入磁盘或者发送到网络上),它的速度要比错误产生的速度慢得多。尤其是在记录用户产生的日志消息(不是错误)或者大量进程崩溃时,更是如此。对于前者,是因为error_logger本来就不适用于记录高度连续的消息。它只适用于真正的异常情况,并不期望过多的消息量。对于后者,是因为崩溃进程的完整状态(包括其消息邮箱)都会拷贝出来进行日志记录。这种消息无需太多,就会耗费大量内存,即使不能立即造成节点内存耗尽(OOM),也足以减慢logger的处理速度,使得后续消息不断累积,导致最终的内存耗尽。

  到目前为止,最好的解决方案是使用另外一个日志库:lager。   虽然lager不能解决所有的问题,但是它会删节掉巨大的日志消息,会在超过门限时选择性的丢弃掉OTP产生的错误消息,并且会在用户提交消息时自动地在同步、异步模式间切换,以达到自我调控的目的。   对于有些极端情况,lager也无能为力,比如:用户提交的消息非常巨大,并且都来自一次性进程。不过,这种情况非常少见,而且此时程序员往往具有更多的控制权。

注:目前我理解的方法是,在高度密集的日志需求下实现自定义的日志管理模块,采用“去军保帅”的做法,给消息队列设置高低水位线,超过就丢弃一定的消息。

erl_0016 《硝烟中的erlang》 读书笔记003 “error_logger 爆炸”的更多相关文章

  1. erl_0019《硝烟中的erlang》 读书笔记005 “进程信息"

    对一个运行中的Erlang系统来说,进程绝对是重要的组成部分.正因为进程是所有运行实体的基础,因此会想去了解它们的更多信息.幸运的是,VM提供了大量的可用信息,其中有些可以安全使用,有些在生产环境中使 ...

  2. erl_0015 《硝烟中的erlang》 读书笔记002 “为过载做计划”

    为过载做计划 到目前为止,我在实际工作中所碰到最常见的错误,基本上都是节点内存耗尽.而且通常都和过长的消息队列有关37.解决这类问题的方法有很多,不过只有在深入.全面的理解系统后,才能做出正确的选择. ...

  3. erl_0014 《硝烟中的erlang》 读书笔记001 “绪论”

    1.大家听说Erlang,往往是因为其对高并发的良好支持.其实,Erlang的核心特征是容错,从某种程度上讲,并发只是容错这个约束下的一个副产品.容错是Erlang语言的DNA,也是和其他所有编程语言 ...

  4. erl_0017 《硝烟中的erlang》 读书笔记004 “锁和阻塞”

    如果某个进程需要持续地接收新任务,那么其在执行耗时过长的锁或者阻塞操作时,就会出现问题. 最为常见的例子之一就是:某个进程使用了TCP socket,阻塞在了接收新的连接或者等待消息上面.在执行此类阻 ...

  5. .Net中的AOP读书笔记系列之AOP介绍

    返回<.Net中的AOP>系列学习总目录 本篇目录 AOP是什么? Hello,World! 小结 本系列的源码本人已托管于Coding上:点击查看,想要注册Coding的可以点击该连接注 ...

  6. 硝烟中的scrum学习笔记 - 怎样制定Sprint计划(Plan Meeting)

    1. 如何估算我们这个sprint能做多少个故事点 1) 本能反应 2) 生产率计算  估算生产率/实际生产率  看看团队的历史,看看他们在过去几个sprint里的生产率是多少  然后假定在下一个sp ...

  7. ITEYE中的读书笔记:重构其实就是持续改进

    原文地址:http://hawkon.iteye.com/blog/2093338#bc2355877 前段时间同事参加ITEYE的试读有奖, 没想到得了个奖,拿到一本书.由于同事的推荐我也认真读了一 ...

  8. 《编写可维护的javascript》读书笔记(中)——编程实践

    上篇读书笔记系列之:<编写可维护的javascript>读书笔记(上) 上篇说的是编程风格,记录的都是最重要的点,不讲废话,写的比较简洁,而本篇将加入一些实例,因为那样比较容易说明问题. ...

  9. 《Android源代码设计模式解析》读书笔记——Android中你应该知道的设计模式

    断断续续的,<Android源代码设计模式解析>也看了一遍.书中提到了非常多的设计模式.可是有部分在开发中见到的几率非常小,所以掌握不了也没有太大影响. 我认为这本书的最大价值有两点,一个 ...

随机推荐

  1. 【GAN】GAN的原理及推导

    把GAN的论文看完了, 也确实蛮厉害的懒得写笔记了,转一些较好的笔记,前面先贴一些 原论文里推理部分,进行备忘. GAN的解释 算法流程 GAN的理论推理 转自:https://zhuanlan.zh ...

  2. 【cs231n】神经网络学习笔记3

    + mu) * v # 位置更新变了形式 对于NAG(Nesterov's Accelerated Momentum)的来源和数学公式推导,我们推荐以下的拓展阅读: Yoshua Bengio的Adv ...

  3. 解题报告:hdu1013 Digital Roots

    2017-09-07 22:02:01 writer:pprp 简单的水题,但是需要对最初的部分进行处理,防止溢出 /* @theme: hdu 1013 Digital roots @writer: ...

  4. Spring Cloud 坑点

    1 配置中心 1.config 默认Git加载 通过spring.cloud.config.server.git.uri指定配置信息存储的git地址,比如:https://github.com/spr ...

  5. 09_MySQL DQL_SQL99标准中的多表查询(外连接)

    # 二.外连接/* 场景:查询值在1个表中出现,在另外1个表中没有出现 特点: 0.也是两张表的字段拼接,分为主表和从表 1.外连接的结果,将显示主表中的所有记录行 如果连接字段在从表中有记录,则显示 ...

  6. spring boot 笔记--第三章

    spring boot 笔记 第三章,使用Spring boot 构建系统: 强烈建议支持依赖管理的构建系统,Maven或Gradle 依赖管理: Spring Boot的每版本都会提供它支持的依赖列 ...

  7. 《用 Python 学微积分》笔记 2

    <用 Python 学微积分>原文见参考资料 1. 13.大 O 记法 比较两个函数时,我们会想知道,随着输入值 x 的增长或减小,两个函数的输出值增长或减小的速度究竟谁快谁慢.通过绘制函 ...

  8. 动态延迟加载网页元素jQuery插件scrollLoading

    如果一个网页很长,那么该页面的加载时间也会相应的较长.而这里给大家介绍的这个jQuery插件scrollLoading的作用则是,对页面元素进行动态加载,通俗的说就是滚到哪就加载到哪,屏幕以下看不见的 ...

  9. java7与java8的新特性

    java7 新特性: 1. switch 里面的 case 条件可以使用字符串了. 2. 运用 List\tempList = new ArrayList<>(); 即泛型实例化类型自动判 ...

  10. 获取url参数,替换特殊字符

    function GetQueryString(name){ var reg = new RegExp("(^|&)"+ name +"=([^&]*)( ...