erlang汇总

常用启动参数
  • -detached

    用于运行守护或后台进程
  • -remsh Node

    连接到某个节点
  • -connect_all false
    禁止节点自动连通,且不能使用全局注册(global)
  • +sub true|false

    开启或关闭进程调度的负载平衡,默认false
  • +S Num

    开启smp时设置调度进程数量
  • +P Number

    设置进程数量上限
  • -setcookie

    指定cookie
  • -hidden

    设置为隐藏节点,在多节点中不会被其他节点自动连接,需要显示调用net_kernel:connect/1
  • +sub true

    开启调度程序负载平衡
  • -extra

    设置启动参数,通过init:get_plain_arguments/0获得
  • -config

    指定应用的配置,通过application:get_env/2获得
  • +pc unicode | latin1

    启动时指定字符格式
    • latin1:只有ISO-latin-1范围内的字符才能被认为是可打印的,这意味着代码点大于255的字符将永远不会被打印,并且包含此类字符的列表将被工具显示为整数列表,而不是文本字符串
    • unicode:在决定是否以字符串语法显示整数列表时,将考虑所有可打印的Unicode字符。这可能会带来意想不到的结果,例如,如果您的字体没有涵盖所有Unicode字符
    • io:printable_range(). 查看shell的字符格式
编程规范
官网推荐

http://www.erlang.se/doc/programming_rules.shtml#REF19691

  1. 不要写深度嵌套代码
  2. 不要写非常大的模块,模块行数控制在1000行内
  3. 不要写很大的函数 尽量控制一个屏幕能显示完整
  4. 不要写太长的代码,太长时就换行
  5. 变量命名,驼峰式命名 后面跟数字的前面可以加’_’,以突出显示 如Player_2
  6. 函数名、模块名,单词以_分隔
  7. 代码间隔格式 ,后面加空格 看起来比较直观 如{12, 23, 45}
运维常用
recon:scheduler_usage(1000).    %% 查看一定时间内调度器程序使用率 参数为毫秒

%% Type = used | allocated | unused | usage | allocated_types | allocated_instances
%% usage 使用率 = used/allocated
%% allocated 系统分配的
%% allocated_types 各种数据类型的占用
%% allocated_instances 调度程序占用,0代表所有
recon_alloc:memory(Type).       %% 内存查看 单位b

reconcile:info(Pid). %% 获取进程信息 类似process_info/1 但相对安全,不安全的如binary、dictionary、messages
%% 按Type值排序取前Num个进程的信息
%% Type = memory | message_queue_len | heap_size | binary_memory | reductions
%% 上述为常用选项,其实就是类似process_info里的key
recon:proc_count(Type, Num).
recon:proc_window(Type, Num, Milliseconds)  %% 同上,但会在给定时间内采样两次取均值

recon:port_types(). %% 查看端口类型数量
recon:port_info("#Port<0.3440>").   %% 查看端口信息
%% 查看按属性排序的前N个端口信息
%% Attribute = 'recv_cnt' | 'recv_oct' | 'send_cnt' | 'send_oct' | 'cnt' | 'oct'
%% oct:流量字节数,cnt包数
recon:inet_count(Attribute, Num).
recon:inet_window(Attribute, Count, Milliseconds). %% 同上

recon:bin_leak(N). %% 对比gc前后binary内存变化,得出变化最大的N个进程
recon_trace:calls({queue, in, 2}, 1).   %% 追踪函数调用

rb:start() %% 查看系统自带日志输出
crashdump_viewer:start() %% win端查看节点挂掉的dump文件
observer:start()    %% 具象化看二郎节点信息


%% ets表占用内存排序
lists:reverse(lists:keysort(2, [{Name, ets:info(Name, memory)}||Name<-ets:all()])).
%% 显示10秒内内核进程的使用率
msacc:start(10000),msacc:print().

dialyzer 静态分析

使用示例

dialyzer --build_plt -r "C:\Program Files\erl7.3\lib\erts-7.3\ebin" "C:\Program Files\erl7.3\lib\kernel-4.2\ebin" "C:\Program Files\erl7.3\lib\stdlib-2.8\ebin" "C:\Program Files\erl7.3\lib\mnesia-4.13.3\ebin" "C:\Program Files\erl7.3\lib\crypto-3.6.3\ebin" "C:\Program Files\erl7.3\lib\sasl-2.7\ebin"
dialyzer -Werror_handling -r E:\work\cshx\server\script\../ebin > 
gen_server exit
trap_exit终止原因进程终止否teminate执行否
falsetest、shutdown、kill、other
falsenormal
truenormal、shutdown、test、other
truekill

ps:游戏节点终止会用init:stop/0,通知到gen_server退出的原因是shutdown

xrl yrl erlydtl

.xrl
.yrl
具体看官方文档,大意是按一定规制写文件,然后可以用erlc编译生成.erl文件

erlc可支持编译的文件格式

erlang模板引擎

https://github.com/erlydtl/erlydtl

https://github.com/erlydtl/erlydtl/wiki 例子

运算符号
运算符说明参数类型
+一元 +number
-一元 -number
*乘法number
/浮点除法number
div整数除法integer
bnot一元 not 位运算integer
rem整数求余integer
band与运算integer
bor或运算integer
bxor异或运算integer
bsl左移运算integer
bsr右移运算integer
全局宏
宏名类型说明
?MODULEatom当前模块
?LINEinteger当前行数
?FILEstring当前文件名
?FUNCTION_NAMEatom当前函数名
?FUNCTION_ARITYinteger当前函数参数数量
?MACHINEstring当前执行程序名 ‘BEAM’
?MODULE_STRINGstring当前模块
?OTP_RELEASEintegerOTP版本 = erlang:system_info(otp_release) = 21
字符编码
源文件的编码

编译器会用正则\s*[:=]\s*([-a-zA-Z0-9]检索erl文件头两行,若命中,则以声明的编码格式编译文件,R16B之前默认是Latin-1,之后是UTF-8。如可以用以下任意一种声明方式

%% coding: utf-8
%% For this file we have chosen encoding = Latin-1
%% -*- coding: latin-1 -*-
位语法

Flag = utf8、utf16、utf32、little、big、binary

<<Ch/utf8,_/binary>> = Bin1,
<<Ch/utf16-little,_/binary>> = Bin2,
Bin3 = <<$H/utf32-little, $e/utf32-little, $l/utf32-little, $l/utf32-little,
$o/utf32-little>>
资料
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值