erlang优势在于线程消息传递及网络层处理,业务逻辑比较弱。
1.-pa
例子: -pa ebin
解释:指定执行文件(.beam)目录
2. +P
+P 100000
控制erlang最多创建的进程数量
erlang:system_info(process_limit). // 查看系统的进程限制
3.ERL_MAX_ETS_TABLES 或者 +e
ets表的数量限制
4.+K true
标识启用epoll(epoll有边沿式触发类型)
5.-smp enable 启用多核支持
6.-hidden enable(true/false)
作用:在集群中隐藏节点,就可以避免全联通
Note:erlang节点注意一个问题,默认erlang节点是全联通的, 也就是当一个节点加入集群时,集群其他所有节点会和新加入的节点建立联系。全联通带来的问题,集群节点间两两连接,随着节点增加,连接数量呈N*(N-1)/2增长,越发恐怖,连接本身占用了端口资源。更坏的是,为了检测节点的存活,erlang会定期发心跳包检查,即使一分钟一个tick,节点多的话也会造成大量的网络风暴。
作者:没有开花的树
来源:CSDN
原文:https://blog.csdn.net/mycwq/article/details/50939354
版权声明:本文为博主原创文章,转载请附上博文链接!
7.+spp true/false
开启并行port并行调度队列,当开启后会大大增加系统吞吐量,如果关闭,则会牺牲吞吐量换取更低的延迟。
8.+sub true/false
开启CPU负载均衡,false的时候是采用的CPU密集调度策略,优先在某个CPU线程上运行任务,直到该CPU负载较高为止。
9.+zdbbl 65536
分布式erlang的端口buffer大小,当buffer满的时候,向分布式的远程端口发送消息会阻塞.erlang端口buff大小,buff满时,消息会阻塞,范围是1-2097151,默认是1024,单位是kb。
10.+pc latin1/unicode
这个选项的作用就是选择Shell可打印字符的范围.默认情况下,erl启动参数是latin.
- Latin:是ISO-8859-1的别名,有些环境下写作Latin-1。ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。
- Unicode:(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。
- 实例:erl +pc unicode
1> <<230,136,145,228,187,172,229,173,166,228,185,160>>.
<<"我们学习"/utf8>>
erl (默认是latin)
1> <<230,136,145,228,187,172,229,173,166,228,185,160>>.
<<230,136,145,228,187,172,229,173,166,228,185,160>>.
Note: 之前提到过的Erlang Shell中显示文本常量的各种奇怪,其实源于字符串启发式检测机制("Heuristic String Detection"),简单讲就是Erlang Shell会检测List,Binary里面的数据是否可以有可打印的字符,比如下面的二进制串<<230,136,145,228,187,172,229,173,166,228,185,160>>. 就被认为检测到可打印的,就输出了<<"我们学习"/utf8>>.还记得那个输出数据的技巧吗?输出的数据内容被Shell自作聪明的打印成了字符,怎么解决的呢?在数据尾部追加一个0,比如[25105].会打印出来"我",[25105,0]就原样输出了. 这个技巧实际上是通过加0避开了"Heuristic String Detection"机制.
11.export ERL_COMPILER_OPTIONS=bin_opt_info
使用bin_opt_info选项可让编译器打印大量关于二进制优化的信息。
警告如下所示:
./efficiency_guide.erl:60: Warning: NOT OPTIMIZED: sub binary is used or returned
./efficiency_guide.erl:62: Warning: OPTIMIZED: creation of sub binary delayed
12.-s Mod [Func [A1,A2,...]] 开始启动执行的模块game的start_server方法
当系统初始化的时候执行确定的函数,如果不存在Func,则默认是start,也可以使用-run代替
- 例子:-s foo bar 1 2 -s foo -s foo bar
- 参考:Erlang --init http://erlang.org/doc/man/init.html
13.-name sd2@127.0.0.1 设置节点名称,-name 设置长名,-sname 设置短名
14.-setcookie sd2
不同nodes之间通信的一个暗号。只有拥有相同暗号的nodes之间才能进行通信。
也可以进入erlang的console之后用erlang:set_cookie(node(), cookie)进行设置,并用erlang:get_cookie()进行查询。
15.-boot start_sasl -config log
**-boot **指定一个引导文件;此种情况表明:默认配置文件下启动SASL,启动指定配置文件log.config
sasl是一个应用,sasl的一个重要功能便是可以记录系统进程相关日志,如进程启动、结束、崩溃错误等信息。sasl的日志功能是基于erlang自带的日志模块error_logger来实现的。
- 参考:Erlang SASL https://blog.csdn.net/blog_lee/article/details/39024361
17.-kernel dist_auto_connect never
通常,当其他节点被引用时会自动的建立连接,设置成never的作用是禁止这种行为。
在一些情况下,连接必须使用connect_node() 明确的建立。
- 参考:1.net_kernel http://erlang.org/doc/man/net_kernel.html
- 参考2:kernel http://erlang.org/doc/man/kernel_app.html
18.-extra 127.0.0.1 5566 0
定义一些额外的参数,可以指定如:数据库相关配置等数据
19.-noshell
没有shell框erlang运行系统
Starts an Erlang runtime system with no shell. This flag makes it possible to have the Erlang runtime system as a component in a series of Unix pipes.
20.-detached
启动erlang运行系统与系统命令框隔离。运行在后台进程和守护进程。
21. -remsh node(onhook_dev@127.0.0.1)
设置当前节点如node节点一样执行
获取参数值
- init:get_argument(smp/hidden...) -->可以获取该参数命令对应的值
init:get_plain_arguments(). --> 获取extra参数命令的值