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

網上查看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
wget http://erlang.org/download/otp_src_18.3.tar.gz
tar zxvf otp_src_18.tar.gz#(解壓) 
cd otp_src_18.3/ #(進入到解壓好的文件夾中)

編譯安裝

./configure  --prefix=/home/erlang(指定安裝目錄)
make(編譯) 
make install(安裝)

配置環境變量

更新環境變量

vim /etc/profile

在最後一行加上

export PATH=/home/erlang/bin:$PATH 

保存退出後

source /etc/profile

或者

添加系統環境變量

export PATH=$PATH:/home/erlang/bin

查看環境變量:

echo $PATH

驗證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> 

驗證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

什麼是Erlang

Erlang([‘ə:læŋ])是一種通用的面向併發的編程語言,它由瑞典電信設備製造商愛立信所轄的CS-Lab開發,目的是創造一種可以應對大規模併發活動的編程語言和運行環境。Erlang問世於1987年,經過十年的發展,於1998年發佈開源版本。Erlang是運行於虛擬機的解釋性語言,但是現在也包含有烏普薩拉大學高性能Erlang計劃(HiPE)開發的本地代碼編譯器,自R11B-4版本開始,Erlang也開始支持腳本式解釋器。在編程範型上,Erlang屬於多重範型編程語言,涵蓋函數式、併發式及分佈式。順序執行的Erlang是一個及早求值, 單次賦值和動態類型的函數式編程語言。
Erlang是一個結構化,動態類型編程語言,內建並行計算支持。最初是由愛立信專門爲通信應用設計的,比如控制交換機或者變換協議等,因此非常適 合於構建分佈式,實時軟並行計算系統。使用Erlang編寫出的應用運行時通常由成千上萬個輕量級進程組成,並通過消息傳遞相互通訊。進程間上下文切換對於Erlang來說僅僅 只是一兩個環節,比起C程序的線程切換要高效得多得多了。
使用Erlang來編寫分佈式應用要簡單的多,因爲它的分佈式機制是透明的:對於程序來說並不知道自己是在分佈式運行。Erlang運行時環境是一個虛擬機,有點像Java虛擬機,這樣代碼一經編譯,同樣可以隨處運行。它的運行時系統甚至允許代碼在不被中斷 的情況下更新。另外如果需要更高效的話,字節代碼也可以編譯成本地代碼運行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章