CentOS erlang安装、emqtt_benchmark配置

本文介绍了如何在CentOS系统上安装Erlang并配置emqtt_benchmark工具进行MQTT压力测试的过程。包括解决依赖问题、编译安装Erlang、配置环境变量以及编译emqtt_benchmark。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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虚拟机,这样代码一经编译,同样可以随处运行。它的运行时系统甚至允许代码在不被中断 的情况下更新。另外如果需要更高效的话,字节代码也可以编译成本地代码运行。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/xianglingchuan/article/details/80059963
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值