搬运下存到云笔记的东西
目录结构
-doc
-ebin
-include
-priv
-src
应用元数据文件
ebin/simple_cache.app
{
application, simple_cache,
[{description, "A simple caching system"},
{vsn, "0.1.0"},
{modules, [
sc_app,
sc_sup
]},
{registered, {sc_sup}},
{applications, [kernel, stdlib]},
{mod, {sc_app, []}}
]}.
启动应用
1.
编译src目录下所有代码
erlc -o ebin src/*.erl
windows下erlc编译错误:
E:\my_server>erlc -o ebin src/*.erl
e:/my_server/src/*.erl:none: I/O error
erlc -o ebin src/*.erl命令在linux上是能够正常工作的,但在windows上却出现问题。原因是linux下的shell能够自动解释*.erl,windows shell却没有这样的功能。
我们可以使用for...do语句来解决 :(首先确保新建项目中有src和ebin文件夹)
for %%f in (src/*.erl) do erlc -o ebin src/%%f
注意,for语句中的变量需要用%%f来表示,如果是在命令行中则需要改为%f
即 cmd>for %f in (src/*.erl) do erlc -o ebin src/%f
for %f in (src/*.erl) do erlc -o src src/%f (备用)
Linux
在Linux下,可以直接这样:
root@compute0:~/Mangix# erlc -o ebin src/*.erl
2. erl -pa ebin
application:start(simple_cache).
proc_lib没模块是erlang stdlib应用的一部分,利用它可以按otp的方式来启动
进程,他会安装otp的一些必要规范对进程进行设置,最好用proc_lib:spawn
来启动进程
节点的启动
给erl、werl加上-name,-sname就可以以分布式模式启动erlang节点
例如:erl -name simple_cache, erl -sname simple_cache
nodes().查看除了自身的节点
节点互联 net_adm:ping('b@ZWWXD164').
通信成功返回pong,否则pang
检查系统中运行的进程
ps ax | grep -i epmd
EPMD代表erlang端口映射守护进程
检查当前erlang节点的cookie, auth:get_cookie().
可通过set_cookie(Node, Cookie)设置不同节点的不同cookie
在 Erlang shell 中按下^G键,就可以看到作业控制模式(JCL mode)的菜单
q().是inits:stop().的简写,安全退出使用ctrl g,ctrl c
erl -sname mynode -pa ..simple_cache/ebin -pa ./resource_discovery/ebin
application:start(sasl).
mnesia:start().
-----------------------------
打包部署:
application:start(AppName, temporary)应用意外终止,运行时系统其它部分不会受影响
application:start(AppName, permanent),应用是目标系统中不可或缺的组成部分
发布镜像文件拓展名.rel,
simple_cache.rel
{release,
{"simple_cache", "0.1.0"},
{erts, "5.7.2"},
[ {kernel, "2.13.2"},
{stdlib, "1.16.2"},
{sasl, "2.1.5.3"},
{mnesia, "4.4.10"},
{resource_discovery, "0.1.0"},
{simple_cache, "0.3.0"}
]}.
unix系统按ctrl-c呼出break菜单,werl下ctrl-break,进入选项v
调用systools模块(SASL应用的一部分)来生成.boot和.script文件
systools:make_script("simple_cache", [local]).
(修改了.script文件,重新生成.boot文件用systools:script2boot(Release))
配置文件sys.config
[
{sasl, {sasl_error_logger, {file, "/tmp/simple_camp.sasl_log"}}},%sasl log path
{simple_cache, [contact_nodes, ['contact1@localhost', 'contact1@localhost']]}
% 联络节点节点名
].
启动目标系统
erl -sname cache -boot ./simple_cahce -config ./sys -detached
% -detached 加上是不期望打开erl shell 让其以守护进程的形态在后台运行
appmon:start(). 可监视查看otp状态
创建发布镜像包
systools:make_script("simple_cache", []).
systools:make_tar("simple_cache", [{erts, code:root_dir()}]).
erts选项表示运行时系统(ERTS)也要一并打包在内,这样创建出的
发布镜像可以在任何兼容主机上安装和启动,code:root_dir()定位ERTS的安装根目录
解压 tar -xzf ./simple_cache.tar.gz
erl shell中解压
erl_tar:extract("simple_cache.tar.gz", [{cwd, "tmp"}, compressed]).
http://erlware.org/ 自动化打包安装工具
性能调优
计算调用次数
%编译代码
cprof:start().
% 运行代码
cprof:pause().
cprof:analyse(module).
cprof:stop().
fprof测定执行时间
% 编译代码
fprof:trace(start). % 开始 跟踪
% 代码run
fprof:trace(stop).
fprof:profile(). % 处理跟踪过程
fprof:analyse({dest, "module.txt"}). % 分析
erlang:hibernate(Mode, Func, Args)可令进程休眠