![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Erlang
文章平均质量分 87
子厚_
我想改变世界
展开
-
Erlang内存分配策略
场景:游服 erl虚拟机内存占用率过高,但是实际上的内存利用率非常低。原因是内存分配采用的是最快分配策略,会导致 1kb大小的数据占用 100kb大小的内存块,导致利用率低。原因:我们项目中频繁使用二进制数据,Port口请求、DB存储都有使用二进制数据,当二进制数据的长度超过64 bytes 时就会在堆内存开辟一块空间。数据库read之后,会把查询的值缓存一天,这个值占用的内存空间就不会被释放掉。而内存利用率低的原因个人认为是因为登录数据、战报数据开辟的空间比较大,而DB读取的数据比较小,小的数据占原创 2021-03-26 15:13:43 · 1406 阅读 · 1 评论 -
【Cowboy源码阅读-2】Http服务器的启动流程
通过 examples中的 echo_get_app.erl 来顺着捋下来整体流程echo_get_app.erl中的start函数,Dispatch是一个路由逻辑,暂时先不细究,先看 cowboy:start_clear/3,调用cowboy:start_clear/3会开启一个 listener 的监督者cowboy:start_clear/3会先对参数进行格式化处理(List转Map等),其中比较有趣的就是ranch:normalize_opts/1中会处理 ack_timeout 的时间,读到这原创 2020-10-21 22:04:07 · 403 阅读 · 0 评论 -
【Cowboy源码阅读-1】将Cowboy及其依赖下载到本地,方便调试
先配置好Erlang环境和rebar3,Erlang的版本可以稍微高一点,很多公司用的Erlang版本都非常的旧,太旧的版本可能无法编译cowboy,我用的是 10.5 版本。windows系统配置rebar3可以参考我的另一篇博客:https://blog.csdn.net/yxw908186797/article/details/103192539直接在rebar.config的deps中配置cowboy的话,代码都是从git上下载的,我们比较难对源码进行自己的修改、调试。常规配置如下:{dep原创 2020-10-21 22:00:34 · 331 阅读 · 0 评论 -
erlang:get_stacktrace注意避开的坑
今天用rebar3编译代码的时候抛了个错:src/riak_sysmon_filter.erl:383: Warning: erlang:get_stacktrace/0 is deprecated and will be removed in OTP 24; use use the new try/catch syntax for retrieving the stack backtrace百度了一波发现:erlang:get_stacktrace()会在OTP 21中把它废弃掉,正确的用法erla转载 2020-10-13 15:56:48 · 1653 阅读 · 0 评论 -
Erlang rpc.erl 的学习记录
学习到的小知识:调用gen_server的call时, 如果先调用gen_server:reply(Form, Reply1)又返回{reply, Reply2, State} ,那么调用的进程收到函数调用的返回值Reply1,然后再收到 {Ref,Reply2} 。翻过来亦然,会先收到Reply2,再收到{Ref,Reply1}group_leader就是决定erlang的io控制台的输出到那个进程。https://www.iteye.com/blog/mryufeng-271706rpc.er原创 2020-09-29 20:49:51 · 360 阅读 · 0 评论 -
erlang知识点小结2
获取进程邮箱数量的代码erlang:process_info(self(), message_queue_len)原创 2020-06-06 09:32:27 · 289 阅读 · 0 评论 -
在windows下编译安装rebar
先安装好git bash在你选择好的目录右键鼠标,运行 Git Bash Here依次输入命令这里用的是码云的连接,git实在太慢了!git clone https://gitee.com/rebar3/rebar3cd rebar3./bootstrap最后一步会比较久,而且一开始是没有反应了,正常现象。出现下图即代表编译完成把clone下来的整个rebar目录添加到...原创 2019-11-21 23:07:48 · 800 阅读 · 4 评论 -
IDEA使Rebar编译Erlang项目
erlang的环境配置略过1、先在 Erlang External Tools 下载 Rebar。2、在 erlang compiler 中,勾选右侧的两个选框3、回到项目,如图4、点击弹窗左上角的 + 号。5、如图填写6、 在项目 src 的下面 新建一个“ job_center.app.src ” 文件代码如下{application, job_center, [ ...原创 2019-11-12 15:26:32 · 1399 阅读 · 1 评论 -
erlang知识点小结
1、 动态产生原子会内存泄漏?怎么动态的产生原子?(erlang趣学指南第6页)2、 函数中的最后一个表达式的执行结果会被自动作为返回值转递给调用者。3、 在Erlang社区中,在模块的概括性注释(模块是做什么的,许可证等)以及模块的区段分隔注释(共有代码、私有代码、辅助函数等)中使用3个百分号。在所有其它需要放置在独立行中的注释使用2个百分号(%%),并和周边的代码采用同样的缩进。防止代码之...原创 2019-11-03 23:25:00 · 646 阅读 · 0 评论 -
Erlang问题汇总
动态生成原子会内存泄漏?什么样算动态的生成原子?(erlang趣学指南第6页)为什么receive没有匹配的模式,消息会被保存起来供以后处理?这样不是浪费内存和性能吗?...原创 2019-11-02 17:34:46 · 320 阅读 · 0 评论 -
init terminating in do_boot ({{badmatch,{error,enoent}},[{road,main,0,[{_},{_}]},{erl_eval,do_apply,
今天在复现《Erlang趣学指南》时,读取文件一直出现这个异常。这个异常出现的原因是因为路径不对(多半是因为空格)。-module(road).-author("pitt").%% API-compile(export_all).main() -> FileName = "road.txt", io:format("~p~n", [FileName]), {ok,...原创 2019-11-01 20:18:45 · 1145 阅读 · 0 评论