【读书笔记】"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的作用就很小了。
比如,如果不能保证重启后连接正常,就需要在初始代码中发送重连消息,避免频繁的崩溃。
所以,初始状态的限制条件越少越好。
三种应用策略:

  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程序员。

转载于:https://my.oschina.net/ljzn/blog/751910

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值