CentOS erlang安装、emqtt_benchmark配置
由于想对EMQTT进行压力测试,所有使用了官方推荐的emqtt_benchmark测试,但一解压就出现了问题。
[root@home bak]# cd emqtt_benchmark/
[root@home emqtt_benchmark]# ls
CHANGELOG.md emqtt_bench_pub emqtt_bench_sub LICENSE Makefile README.md rebar rebar.config src
[root@iZuf6ixy03u72vzno4jsiuZ emqtt_benchmark-master]# make
/usr/bin/env: escript: No such file or directory
make: *** [get-deps] Error 127
- 1
- 2
- 3
- 4
- 5
- 6
网上查看escrpt是erlang的一种高级特性,所以需要先安装Erlang,先安装的是otp_src_R14B04,但执行emqtt_benchmark时一起报错,后更新为otp_src_18配置成功。
安装erlang
如果未安装以后程序,请先安装依赖
$sudo yum install gcc gcc-c++ glibc-devel make ncurses-devel openssl-devel autoconf java-1.8.0-openjdk-devel git
- 1
wget http://erlang.org/download/otp_src_18.3.tar.gz
tar zxvf otp_src_18.tar.gz#(解压)
cd otp_src_18.3/ #(进入到解压好的文件夹中)
- 1
- 2
- 3
编译安装
./configure --prefix=/home/erlang(指定安装目录)
make(编译)
make install(安装)
- 1
- 2
- 3
配置环境变量
更新环境变量
vim /etc/profile
- 1
在最后一行加上
export PATH=/home/erlang/bin:$PATH
- 1
保存退出后
source /etc/profile
- 1
或者
添加系统环境变量
export PATH=$PATH:/home/erlang/bin
- 1
查看环境变量:
echo $PATH
- 1
验证erlang
命令行中输入erl看是否安装成功!
[root@iZuf6ixy03u72vzno4jsiuZ bak]# erl
Erlang/OTP 18 [erts-7.3] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V7.3 (abort with ^G)
1>
- 1
- 2
- 3
- 4
- 5
验证emqtt_benchmark
[root@home emqtt_benchmark-master]# make
WARN: Expected /chroot/www/bak/emqtt_benchmark-master/deps/emqttc to be an app dir (containing ebin/*.app), but no .app found.
WARN: Expected /chroot/www/bak/emqtt_benchmark-master/deps/getopt to be an app dir (containing ebin/*.app), but no .app found.
==> emqtt_benchmark-master (get-deps)
WARN: Expected /chroot/www/bak/emqtt_benchmark-master/deps/emqttc to be an app dir (containing ebin/*.app), but no .app found.
WARN: Expected /chroot/www/bak/emqtt_benchmark-master/deps/getopt to be an app dir (containing ebin/*.app), but no .app found.
Pulling emqttc from {git,"git://github.com/emqtt/emqttc.git",
{branch,"master"}}
Cloning into 'emqttc'...
Pulling getopt from {git,"https://github.com/jcomellas/getopt.git",
{branch,"master"}}
Cloning into 'getopt'...
WARN: Expected /chroot/www/bak/emqtt_benchmark-master/deps/gen_logger to be an app dir (containing ebin/*.app), but no .app found.
==> emqttc (get-deps)
WARN: Expected /chroot/www/bak/emqtt_benchmark-master/deps/gen_logger to be an app dir (containing ebin/*.app), but no .app found.
Pulling gen_logger from {git,"https://github.com/emqtt/gen_logger.git",
{branch,"master"}}
Cloning into 'gen_logger'...
WARN: Expected /chroot/www/bak/emqtt_benchmark-master/deps/lager to be an app dir (containing ebin/*.app), but no .app found.
==> gen_logger (get-deps)
WARN: Expected /chroot/www/bak/emqtt_benchmark-master/deps/lager to be an app dir (containing ebin/*.app), but no .app found.
Pulling lager from {git,"https://github.com/basho/lager.git",
{branch,"master"}}
Cloning into 'lager'...
WARN: Expected /chroot/www/bak/emqtt_benchmark-master/deps/goldrush to be an app dir (containing ebin/*.app), but no .app found.
==> lager (get-deps)
WARN: Expected /chroot/www/bak/emqtt_benchmark-master/deps/goldrush to be an app dir (containing ebin/*.app), but no .app found.
Pulling goldrush from {git,"https://github.com/basho/goldrush.git",
{tag,"0.1.9"}}
Cloning into 'goldrush'...
==> goldrush (get-deps)
==> getopt (get-deps)
==> goldrush (compile)
Compiled src/gr_param.erl
Compiled src/gr_counter_sup.erl
Compiled src/glc_ops.erl
Compiled src/gr_app.erl
Compiled src/gr_param_sup.erl
Compiled src/glc_run.erl
Compiled src/gre.erl
Compiled src/gr_sup.erl
Compiled src/gr_manager.erl
Compiled src/gr_context.erl
Compiled src/gr_manager_sup.erl
Compiled src/gr_counter.erl
Compiled src/glc_lib.erl
Compiled src/glc.erl
Compiled src/glc_code.erl
==> lager (compile)
Compiled src/lager_util.erl
Compiled src/lager_transform.erl
Compiled src/lager_backend_throttle.erl
Compiled src/lager_handler_watcher_sup.erl
Compiled src/lager_crash_log.erl
Compiled src/lager_format.erl
Compiled src/lager_sup.erl
Compiled src/lager_file_backend.erl
Compiled src/lager_manager_killer.erl
Compiled src/error_logger_lager_h.erl
Compiled src/lager_msg.erl
Compiled src/lager_default_formatter.erl
Compiled src/lager_common_test_backend.erl
Compiled src/lager_console_backend.erl
Compiled src/lager_trunc_io.erl
Compiled src/lager_handler_watcher.erl
Compiled src/lager_config.erl
Compiled src/lager_app.erl
Compiled src/lager.erl
Compiled src/lager_stdlib.erl
==> gen_logger (compile)
Compiled src/gen_logger.erl
Compiled src/error_logger_logger.erl
Compiled src/console_logger.erl
Compiled src/lager_logger.erl
==> emqttc (compile)
Compiled src/emqttc_reconnector.erl
Compiled src/emqttc_message.erl
Compiled src/emqttc_serialiser.erl
Compiled src/emqttc_socket.erl
Compiled src/emqttc_parser.erl
Compiled src/emqttc_opts.erl
Compiled src/emqttc_protocol.erl
Compiled src/emqttc_keepalive.erl
Compiled src/emqttc_packet.erl
Compiled src/emqttc_topic.erl
/chroot/www/bak/emqtt_benchmark-master/deps/emqttc/src/emqttc.erl:658: Warning: variable 'Logger' is unused
/chroot/www/bak/emqtt_benchmark-master/deps/emqttc/src/emqttc.erl:658: Warning: variable 'Name' is unused
Compiled src/emqttc.erl
==> getopt (compile)
Compiled src/getopt.erl
==> emqtt_benchmark-master (compile)
Compiled src/emqtt_benchmark.erl
==> emqtt_benchmark-master (xref)
[root@home emqtt_benchmark-master]# ./emqtt_bench_sub --help
Usage: emqtt_bench_sub [--help <help>] [-h [<host>]] [-p [<port>]]
[-c [<count>]] [-n [<startnumber>]]
[-i [<interval>]] [-t <topic>] [-q [<qos>]]
[-u <username>] [-P <password>] [-k [<keepalive>]]
[-C [<clean>]] [-S [<ssl>]]
[--certfile <certfile>] [--keyfile <keyfile>]
[--ifaddr <ifaddr>]
--help help information
-h, --host mqtt server hostname or IP address [default:
localhost]
-p, --port mqtt server port number [default: 1883]
-c, --count max count of clients [default: 200]
-n, --startnumber start number [default: 0]
-i, --interval interval of connecting to the broker [default: 10]
-t, --topic topic subscribe, support %u, %c, %i variables
-q, --qos subscribe qos [default: 0]
-u, --username username for connecting to server
-P, --password password for connecting to server
-k, --keepalive keep alive in seconds [default: 300]
-C, --clean clean session [default: true]
-S, --ssl ssl socoket for connecting to server [default: false]
--certfile client certificate for authentication, if required by
server
--keyfile client private key for authentication, if required by
server
--ifaddr local ipaddress or interface address
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
什么是Erlang
Erlang([‘ə:læŋ])是一种通用的面向并发的编程语言,它由瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境。Erlang问世于1987年,经过十年的发展,于1998年发布开源版本。Erlang是运行于虚拟机的解释性语言,但是现在也包含有乌普萨拉大学高性能Erlang计划(HiPE)开发的本地代码编译器,自R11B-4版本开始,Erlang也开始支持脚本式解释器。在编程范型上,Erlang属于多重范型编程语言,涵盖函数式、并发式及分布式。顺序执行的Erlang是一个及早求值, 单次赋值和动态类型的函数式编程语言。
Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此非常适 合于构建分布式,实时软并行计算系统。使用Erlang编写出的应用运行时通常由成千上万个轻量级进程组成,并通过消息传递相互通讯。进程间上下文切换对于Erlang来说仅仅 只是一两个环节,比起C程序的线程切换要高效得多得多了。
使用Erlang来编写分布式应用要简单的多,因为它的分布式机制是透明的:对于程序来说并不知道自己是在分布式运行。Erlang运行时环境是一个虚拟机,有点像Java虚拟机,这样代码一经编译,同样可以随处运行。它的运行时系统甚至允许代码在不被中断 的情况下更新。另外如果需要更高效的话,字节代码也可以编译成本地代码运行。