【读书笔记】"Erlang In Anger" Erlang应用的错误调试

封面

全书程序员

封面不明觉厉

这本书很薄,只有93页,并且是免费的,有兴趣的朋友能够去看一看。虽然书中没有提到Elixir,但对于学习Elixir也颇有帮助。这本书适合对Erlang和OTP有初步了解的人阅读。书中附带练习。缓存

首先讲的是如何阅读代码

阅读别人的代码首先要搞清楚代码的类型。做者将Erlang的代码分红几类:数据结构

  1. 生代码 —— 通常是初学者的练习,不能算完整的项目;
  2. OTP应用 —— 包含了说明文档,测试,配置文件等等,能够直接使用。
    1. 库应用 —— 通常有两个模块 appname, appname_something
    2. 普通应用 —— 通常两个模块 appname,appname_app
    3. OTP发行包 —— 使用rebar3将项目和它的全部依赖打包在一块儿后获得的

第二章讲的是如何编写开源的Erlang应用

介绍了一下rebar3,它是用于生成Erlang发行包的工具。
一个OTP发行包每每包含多个OTP应用。
若是初始状态是不可靠的,那么Supervisor的做用就很小了。
好比,若是不能保证重启后链接正常,就须要在初始代码中发送重连消息,避免频繁的崩溃。
因此,初始状态的限制条件越少越好。
三种应用策略:app

  1. permanent:一旦出问题,整个系统崩溃;
  2. transient:normal问题没事,别的问题崩溃;
  3. temporary:什么问题都没事,只会报告。

第三章讲的是为过载状况设计

咱们能够把一个项目当作是一间浴室,水流表明用户的请求,当水流过大时,就会从浴缸里溢出。那么如何解决呢,一般咱们须要找到瓶颈所在,是排水管道太窄了,仍是浴缸过小了,或许须要更多的浴室来处理水流。可是,当咱们没有能力解决这些瓶颈时,咱们就须要聪明一些,让系统可以在过载状况下运做。有两种策略:back-pressure 和 load-shedding。函数

须要避免错误日志爆炸。限制输入能够保证最基本的服务,可是用户体验会变得不好。也就是back-pressure会变大。记得设置好time out。工具

丢弃数据的方式

  1. 随机取出 —— 是最简单且鲁棒性最强的节省空间的方法;
  2. 队列缓存 —— 队列数据结构;
  3. 堆栈缓存 —— 低延迟;列表数据结构;缺点是不会按顺序处理请求;
  4. 时间敏感缓存 —— 会在旧的请求超时以前进行处理;
  5. 恒定负载 —— 例如ETS。

第四章 链接到远程节点的方式

  1. JCL模式
  2. Remsh
  3. SSH守护
  4. 命名管道

第五章 运行指标

主要讲如何查看运行时的各类指标。学习

  1. erlang:memory().
  2. length(processes())
  3. length(erlang:ports())

第六章 阅读Crash Dumps

每当Erlang进程崩溃后,咱们能够阅读一个名为 erl_crash.dump 的文件来寻找缘由。测试

第七章 内存泄露

这一章讲如何检测和修复内存泄露,内容比较专业,没看懂。:p设计

第八章 CPU资源调度

介绍了一些查看CPU当前参数的函数。调试

第九章 跟踪

能够对任何Erlang代码进行跟踪,用pid和模式匹配来锁定目标。

结束

这本书详细地介绍了对Erlang程序进行错误调试的过程,还介绍了调试工具recon。本书适合有项目经验的中高级Erlang程序员。

相关文章
相关标签/搜索