- 博客(19)
- 资源 (5)
- 收藏
- 关注
原创 一次erlang VM内存泄漏问题复盘
1、问题发现在一次压测中,发现erlang VM使用内存超出预期,其中process使用内存在正常范围内,system使用内存超出预期很多,具体占到整个内存使用量的80%,其中binary一项占用了system的绝大部分使用量,很明显,系统存在binary泄漏。2、问题追踪问题发生后,首先想到的就是到底binary在erlang VM中是怎么创建和回收的。众所周知,binary分为两种...
2019-04-19 22:15:46
524
原创 erlang踩坑记录之os_mon
1、现象 最近为系统开发一个监控工具,最先想到的就是应用erlang自带的os_mon,非常实用,它可以监控每个进程内存使用比例等等信息,但是在实际开发过程中,遇到了不少麻烦。2、分析过程 启动os_mon,过程非常简单,代码如下:application:start(os_mon). 注意,os_mon依赖于sasl,如果没有启动sas
2017-08-31 15:10:46
2125
原创 从变量不可变到编程范式
1、众说纷纭的变量不可变近期在论坛中有一个很有意思的讨论,erlang中的变量不可变原则的原因到底是什么,似乎各个二郎君还没有一个统一的看法,主要的观点有两个:1、出于并发的需求,防止变量被二次赋值而导致各种并发问题;2、erlang的模式匹配导致,因为本身并不存在赋值操作,而模式匹配的规则就是不可对变量二次绑定值。在我刚学erlang的时候,我曾经对第一种说法深信不疑,erlang变量不
2017-06-19 18:50:51
605
1
原创 erlang大坑——加密和字符串处理
1、问题描述因业务要求,需要对指定的http请求内容进行RSA签名,并且将签名结果和请求内容用json格式打包。这里包括两个需要处理的点:1、用RSA私钥签名;2、把http请求json化。2、处理签名目前项目使用的erlang版本是17.0,这个版本有专门针对RSA的库即public_key,但是查看public_key相关描述sign(Msg, DigestType, Key)
2016-03-22 21:56:35
2570
原创 erlang关闭一个socket进入死循环的bug修复过程
1、现象游戏服务器与多个客户端建立连接,socket设置参数如下[binary, {packet, 4}, {active, 0}, {reuseaddr, true}, {nodelay, false}, {packet_size, 4096}, {delay_send, true}, {send_timeout, 5000}, {keepalive, true}, {exit_on_clo
2015-10-21 15:05:13
1685
原创 erlang的坑
持续记录erlang中的各种坑以及各种解决方案。入门级别的同学都能说出erlang的优点,但是我们不能忽略erlang的各种缺点,一不小心可能造成大麻烦。1、计算密集型代码执行瓶颈Erlang的虚拟机是register based的,性能上和python类似,和c语言大概有7倍的差距。这几乎是公认的事实,虽然大部分的集群和网络服务器,性能瓶颈在IO上面,而且这块erts(erlang运行期
2015-05-11 15:27:08
1549
原创 erlang分布式开发中遇到的一些问题
1、关于rpc先上现象,如下:erl -name a@192.168.35.147Erlang/OTP 17 [erts-6.0] [source] [64-bit] [smp:2:2] [async-threads:10] [kernel-poll:false]Eshell V6.0 (abort with ^G)(a@192.168.35.147)1> net_kernel:
2015-01-27 14:02:24
1425
原创 用erlang打造系统级监控工具
erlang中大多数结构是list,许多操作也是通过遍历list来实现的,我们在大量list操作的同时同样会带来一个问题——内存可能会因为无限制的list耗尽,所以一般一个完善的erlang系统总是要带一个系统级别的监控工具,用于在特殊情况下使系统免于内存耗尽的崩溃。尽管我们可能会用很多操作系统的工具来监控每个用户进程的内存等信息,但是对于每一个erlang进程来说,这种工具是做不到的。erl
2014-12-01 16:14:43
1043
原创 erlang下A*算法的效率优化过程
近期在做一个系统时发现项目中用的A*算法效率太差了,具体要时间上的话就是一个100路径点的寻路要花上大概50ms左右,在需要大量寻路的时候会非常卡。1、首先分析A*算法的过程,摘自百度百科http://baike.baidu.com/view/7850.htm?fr=aladdinwhile(OPEN!=NULL){从OPEN表中取估价值f(n)最小的节点n;
2014-11-25 11:41:55
970
原创 erlang另类方法调用
调用一个erlang函数,最普通的M:F(A),或者apply(M, F, A)。但是有极端的例子: 1> nimeizi:get().** exception error: undefined function nimeizi:get/0 如图所示,nimeizi:get/0函数没有定义时,报undefined function错误。 3> {erlang...
2014-09-15 16:41:40
727
原创 erlang的mnesia
erlang作为一门面向大规模并发、分布式的语言,起自带的mensia数据库自然应该也支持并发和分布式。不过在弄这些之前,必须了解mnesia的一些trap,可能这些在官方给出的文档中没有明确指出来: trap1:
2014-05-21 18:22:17
959
原创 erlang分布式之节点自动连接相关问题
最近做一个游戏跨服功能。其实对erlang来说,天生支持分布式,理论上不会有太大难题,就是一两个问题比较头疼。 问题大致是这样,当一个节点A被启动起来后,另一个节点B启动,B启动完之后,A、B节点之间忽然就自动连接了,没有ping,没有net_kernel:connect这些操作,但是他们就连接起来了。查找问题,始终得不到解决,后来朋友提醒,erlang只要是向远程节点发送消息,或
2014-05-20 17:02:44
935
原创 erlang的监控树之重启
最近在开发过程中遇到一个问题,大概是这样的,原先一个worker进程,现在要改成可以随时去掉,也可以随时在重启,这个进程的supervisor是one_for_one类型的,如果不改变supervisor的类型(代码里面很多都是用这个supervisor的,改supervisor不好),这样就引发了一个问题,实验证明如下: 如果一个supervisor是simple_one_for_on
2014-04-22 15:39:26
1198
原创 Linux下TCP参数配置
最近有位朋友告诉我这样一个问题,在一些特殊的情况下,Linux服务器有时候会丢弃windows下TCP连接的syn包,其表现就是同一个局域网下的一些机器可以连通服务器,另一些可以。在查阅各种资料后发现一段Linux内核代码:if (tmp_opt.saw_tstamp && tcp_death_row.sysctl_tw_recycle &&
2014-04-18 16:43:32
757
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人