随笔分类 - erlang
摘要:今天看了下云风写的关于 c coroutine博客 (代码), 发现 coroutine 实现原理其实还比较简单,就用户态栈切换,只需要几十行汇编,特别轻量级。 具体实现 1. 创建一个coroutine: 也就是创建一块连续内存,用于存放栈空间,并设置好入口函数所需要的寄存器 makecontex
阅读全文
摘要:erlang 提供了简单易用的并发编程模型,基本不需要再考虑多线程并发问题。但实际应用中并不是那么的完美,很多地方需要注意,就算标准库也有不少问题。很多在多线程编程中很多很容易解决的事情,在erlang中是那么的蛋疼和无奈。erlang专注于自己擅长领域,本身十分健壮,强大的shell,分布式特...
阅读全文
摘要:一般说来抓dump 4种 方式: 1. erlang:halt(“abort”). 2. 在erlang shell下输入CTRL C + “大写的A” 3.等着进程崩溃自己产生dump 4.kill -SIGUSR1 (shell 无法进入时可以使用) 不过4个方式无一不是需要no...
阅读全文
摘要:系统级别perf top, dstat -tam, vtune 都能很好分析beam 瓶颈,本文主要erlang 级别排查:1. 反编译 确认线上运行代码是否正确,reltools没掌握好,升级偶尔出现问题decompile(Mod) -> {ok,{_,[{abstract_code,{_,...
阅读全文
摘要:现网服务,每次更新一个服务时,另外一个集群所有node 都跟着同时重启一遍,这么调皮,这是闹哪样啊。。 看系统日志:/var/log/messages Oct 30 15:19:41 localhost kernel: beam.smp[21880]: segfault at 7fa300...
阅读全文
摘要:上篇Erlang C1500K长连接推送服务-性能提到:150w连接,使用了23GB内存,每个连接占用15KB,约一半是内核使用。大概分析一下:1. Erlang 节点 12GB,内部因为有内存池碎片问题,实际使用9GB,也就是实际每个进程+Port占用越6K,因为采用hibernate策略,已经...
阅读全文
摘要:erlang 默认启动参数更多的是针对电信平台实时特性,简单调整参数能很大程度降低CPU消耗,提高处理能力。1. 关闭spin_wait 设置参数:+sbwt none我上一篇文章提到:erlang 调度器CPU利用率低排查,关闭spin_wait 可能增加了调度器需要唤醒延时。关闭后CPU 基本...
阅读全文
摘要:-问题起因 近期线上一组服务中,个别节点服务器CPU使用率很低,只有其他1/4。排除业务不均,曾怀疑是系统top统计错误,从Erlang调度器的利用率调查找到通过erlang:statistics(scheduler_wall_time) 查看服务器CPU低的机器调度器实际的CPU利用率很高接近1...
阅读全文
摘要:先推荐一篇:mnesia源码分析(yufeng)- linear hash ETS/DETS/mnesia 都使用了linear hash算法http://en.wikipedia.org/wiki/Linear_hashingredis dict 的实现类似于linear hash,渐进式reha...
阅读全文
摘要:rick 的两个ppt整理下载:2012 2013 ,使用半年erlang后,重新看这两个ppt才发现更多值的学习的地方,从ppt中整理如下:- Prefer os:timestamp to erlang:now 应该禁止使用erlang:now(),稍微用得多,整个node的%si 飙满,且整体性...
阅读全文
摘要:新服务上线后观察到,CPU在10 ~ 70%间波动严重,但从每秒业务计数器看业务处理速度很平均。 接下来是排查步骤: 1. dstat -tam 大概每10s一个周期,网络流量开始变得很小,随后突然增大,CPU也激增。 网络流量变化和从性能计数器结果上并不符合,服务相关业务较为复杂,...
阅读全文
摘要:算起来接触erlang 快四个月来,从零开始看书写erlang代码、修改RabbitMQ、业务开发、系统调优,总算是有点入门了。 最难受的是边学边修改RabbitMQ,难受只是暂时的,憋过去就海阔天空,最后提交修改2000+行代码。 说到坑都是自己技术不过关造成,erlang 设计与一般语言很大不同
阅读全文
摘要:问题由来 前些天对系统做了一个优化,将原来从queue 轮询刷出数据后每条消息一个 spawn 进程单独处理,修改为批量刷出。一条一条刷轮询刷 queue 存在问题:刷queue 进程太多时,占用CPU,刷queue 少时容易受网络延时影响。修改后,queue 中数据越多,batch 数越大,提高...
阅读全文
摘要:今天开始学习Erlang,参照《programing erlang》书例子,测试erlang创建进程性能 创建N个进程 都wait,然后挨个发送die关闭进程,代码如下: 测试场景:200w进程、MacBook Pro 2013(I5/16G) 测试结果: processes:max(2000000
阅读全文

浙公网安备 33010602011771号