【ejabberd stress】use Jabsimul

【ejabberd stress】use Jabsimul

環境

  • aws instance t2.micro
  • ubuntu 16.04

安裝

  1. 安裝 ejabberd 本體
    • apt-get update
    • 到安裝頁面,選擇 deb,wget {download source}
    • dpkg -i {download file}
    • su ejabberd && cd ~
    • 檢查你的 host 請更改為 localhost : vi ./conf/ejabberd.yml
    • 先記錄 {host}
    • 啟動 ejabberd, ./bin/ejabberdctl start
    • 建立管理者 : ./bin/ejabberdctl register admin {host} admin
  2. 安裝壓力測試編譯時需要的套件 : apt-get install cvs make gcc libexpat1-dev libncurses5-dev libssl-dev bison byacc flex -y
  3. 安裝 Jabber Test Suite,官方 : http://jabbertest.sourceforge.net/
    1. 確定切換回 root, cd /home/ubuntu
    2. cvs -z3 -d:pserver:anonymous@jabbertest.cvs.sourceforge.net:/cvsroot/jabbertest co testsuite
    3. cd testsuite/ && cp Makefile.linux Makefile && make userreg
    4. 查詢 ./userreg -? 的使用方法
    5. ./userreg -h 127.0.0.1 -u 3000 -n 1 -o ./output
    6. cat ./output 如果成功會顯示類似,無意外會有 3000 筆資訊
    7. 如果沒有,請將 ejabberd stop then start
  4. 安裝 Jabsimul
    1. 確定切換回 root, cd /home/ubuntu
    2. wget http://www.ejabberd.im/files/other/jabsimul.tar.gz
    3. tar xzf jabsimul.tar.gz
    4. cp jab_simul.xml.example jab_simul.xml
    5. ./configure && make
    6. 調整設定值,開啟 jab_simul.xml : 參考 http://tkabber.jabber.ru/files/badlop/jab_simul.xml.chat60
    7. 注意 jab_simul.xml 中,server 的位置,必須是可解析的 DNS,不能用 ip
    8. 開始執行壓力測試 ./jab_simul
    9. 請壓到你預設的數據人數,再去查看現在的資源狀態
  5. 如何檢查你的壓力測試 user login 正常?
    1. 檢查你的 ejabberd.log
    2. 檢查 /tmp 底下的 xml testuser 中的訊息
  6. jab_simul 執行後的錯誤訊息
    • Socket creation error ! (Too many open files) : 請調整 ulimit 參考其他參數調整
    • Segmentation fault (core dumped) : 伺服器超載

其他參數調整

如果要模擬 2000 個用戶,在同一台機上上進行壓力測試,必須設定限制高於 4000 以上

  • Linux : ulimit -n 16000

shaper 是設定查詢允許的流量速度…應該被受限在硬體的效能上…

  • shaper normal & fast

在 ejabberdctl.cfg 中,可設定 ERL_MAX_PORTS & ERL_MAX_ETS_TABLES

  • ERL_MAX_PORTS : Maximum number of simultaneously open Erlang ports
    • ejabberd consumes two or three ports for every connection, either from a client or from another Jabber server. So take this into account when setting this limit.
  • ERL_MAX_ETS_TABLES : Maximum number of Erlang processes
    • The number of concurrent ETS and Mnesia tables is limited. When the limit is reached, errors will appear in the logs: ** Too many db tables **. You can safely increase this limit when starting ejabberd. It impacts memory consumption but the difference will be quite small.

什麼是 ETS => Erlang Term Storage 什麼是 DETS => Disk Erlang Term Storage

查詢壓力測試數據

  • 記憶體
    1. 測試前 : free -k
    2. 測試後 : free -k
  • 使用 top 指令
  • 可參考 : http://fecbob.pixnet.net/blog/post/39256167-linux%E4%B8%AD%E6%9F%A5%E7%9C%8B%E7%B3%BB%E7%B5%B1%E8%B3%87%E6%BA%90%E4%BD%94%E7%94%A8%E6%83%85%E6%B3%81%E7%9A%84%E5%91%BD%E4%BB%A4

壓力測試數據參考

在 t2.micro 底下約 7500 人,同時在線

1
2
  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                                      
12022 root      20   0   84416  68836   4084 R 66.0  6.8   0:30.64 jab_simul