SlideShare une entreprise Scribd logo
1  sur  34
Easy distributed load test with Tsung




                               Ngoc Dao
Source code:

     https://github.com/ngocdaothanh/tsart




                    Full doc:

http://tsung.erlang-projects.org/user_manual.html
Agenda
●   Install Tsung
●   Load test from one machine
●   Distributed load test
●   Test WebSocket
Install Tsung
How to install Tsung
1. Install Erlang
2. Install Tsung
                       Tsung is a program
                       written in Erlang language
                       (Erlang presentation next time)
Install Erlang
sudo yum install yum install gcc
                                                    For connecting to
sudo yum install openssl-devel                       other machines
                                                     to do distributed
sudo yum install ncurses-devel                    load test (later slides)


wget http://www.erlang.org/download/otp_src_R15B01.tar.gz
tar xzf otp_src_R15B01.tar.gz
                                    For Erlang
cd otp_src_R15B01                  command line



./configure –prefix=$HOME/opt/erlang-R15B01
make install

          http://www.erlang.org/download.html
Install Tsung
export PATH=$PATH:$HOME/opt/erlang-R15B01/bin


wget http://tsung.erlang-projects.org/dist/tsung-1.4.2.tar.gz
tar xzf tsung-1.4.2.tar.gz
cd tsung-1.4.2                         Need “erlc” command
                                         to compile Tsung

./configure –prefix=$HOME/opt/tsung-1.4.2
make install


export PATH=$PATH:$HOME/opt/tsung-1.4.2/bin



         http://tsung.erlang-projects.org/dist/
Load test from one machine
share/doc/tsung/examples




                                                                Load test
                                        (2)                      target
                                      Requests
test.xml                                       (3)
                (1)       Tsung             Responses



                            (4)


                                            lib/tsung/bin/tsung_stats.pl


                         Reports       sudo yum install gnuplot
                                       sudo cpan Template
To be able to create many
                  connections
●   Each connection is seen as an open file; default limit:
    Linux: limit -n => 1024
    Mac: launchctl limit => 256
●   Linux:
    Edit /etc/security/limits.conf:
    *        soft      nofile    1000000
    *        hard      nofile    1000000
●   Mac:
    sudo launchctl limit maxfiles 1000000 1000000

    Or create /etc/launchd.conf:
    limit maxfiles 1000000 1000000
●   More info on tuning:
    http://ngocdaothanh.github.com/xitrum/guide/deploy
test.xml


  https://github.com/ngocdaothanh/tsart/blob/master/single.xml


Pitfall:
<!DOCTYPE tsung SYSTEM "path/to/tsung-1.0.dtd">

The path must be correct.
Be careful if you copy the XML file from other machines.
Bypassing 30k limit
Each IP can only create about 25 thousands
connections. To bypass this problem:
  1. Create multiple IPs for one network interface
  2. Set "ports_range" option


http://tsung.erlang-projects.org/user_manual.html
http://lists.process-one.net/pipermail/tsung-users/2010-Oct
<load>...</load>

<options>
 <option name="ports_range" min="1025" max="65535"/>
</options>

<sessions>...</sessions>
Demo
●   Run test:
    tsung-1.4.2/bin/tsung -f test.xml -l . start
●   See status during test:
    tail -f tsung_controller.log
    tsung-1.4.2/bin/tsung status
●   Create reports:
    perl tsung-1.4.2/lib/tsung/bin/tsung_stats.pl
Distributed load test
Tsung
                                    worker


                                    Tsung
test.xml          Tsung                           (3)           Target
           (1)                (2)   worker
                 controller


                                    Tsung
                                    worker
                    (4)




                                      EC2 is very convenient!
                 Reports
test.xml
https://github.com/ngocdaothanh/tsart/blob/master/distributed.xml

  <clients>
    <!-- Must be hostname, can't be IP -->
    <client host="t1" cpu="8" maxusers="200000"/>
    <client host="t2" cpu="8" maxusers="200000"/>
    <client host="t3" cpu="8" maxusers="200000"/>
  </clients>


                    Distributed test is easy:
                     Just add more clients
(1)
                           ssh machine2 erl
                               (port: 22)
    Tsung                                                     Tsung
  controller                      (2)                         worker
(Erlang node)         Erlang node – Erlang node           (Erlang node)
 machine1              standard communication               machine2
                         (port: 4369 and ???)




                          http://linux.die.net/man/1/epmd
            http://www.erlang.org/doc/apps/erts/erl_dist_protocol.html
Should not be 127.0.0.1
  =>
● /etc/hosts on t1:

  <ip1> t1
  <ip2> t2
  <ip3> t3
● /etc/hosts on t2, t3:

  <ip1> t1
=>
● Add erl to PATH:

  sudo echo 'pathmunge
  /home/ngoc/opt/erlang-R15B01/bin' >
  /etc/profile.d/erlang.sh

  sudo chmod +x /etc/profile.d/erlang.sh
● Or edit /etc/environment:

  PATH=”/home/ngoc/opt/erlang-R15B01/bin...”
Install once, copy everywhere
Basically, you only have to install on one
machine, then copy to others:
●   /etc/hosts
●   /etc/environment
●   /etc/sysctl.conf
●   /etc/security/limits.conf
●   Erlang
●   Tsung
Confirm
From the controller machine (t1):
ssh t1 erl
ssh t2 erl                                         Pitfall:
                                             Remember to run
ssh t3 erl                              this command to confirm,
                                                if you use
ssh localhost erl                   <client host="localhost"/>



Trouble shooting:
http://tsung.erlang-projects.org/user_manual.html
> Frequently Asked Questions
Demo
Test WebSocket


This one is good:
https://github.com/onlychoice/tsung/tree/websocket

This one may be better:
https://github.com/wulczer/tsung_ws
Example
https://github.com/wulczer/tsung_ws/blob/master/websocket.xml
Pitfall
●   I installed tsung-1.4.2 on t1, t2, t3. Then installed
    tsung-1.4.2-with-websocket-plugin on t1, but forgot to
    install it on t2 and t3.
    =>
    Install same version of Erlang and Tsung on all
    machines, at same paths
●   Tsung by default only creates 800 connections on
    each Erlang VM. It will spawn more Erlang nodes to
    create more connections. But Tsung will stop working
    when there are too many nodes (~100)
    =>
    Set maxusers to a large number (~200K/client).
<clients>
  <client host="t1" cpu="8" maxusers="200000">
    <ip scan="true" value="eth0"/>
  </client>
</clients>
Amazon EC2
●   Good: There is no Data Transfer charge between Amazon EC2
    and other Amazon Web Services within the same region
    http://aws.amazon.com/ec2/pricing/
    => Use private DNS address or IP instead of public ones
●
    m1.xlarge can create about 200 new connections/s
●
    Use Amazon VPC (Virtual Private Cloud) feature to create multiple
    virtual IPs for one network interface
●
    Pitfall: IP addresses of machines change after each restart =>
    Need to update /etc/hosts of the controller machine
Bypassing 30k limit on EC2
1. Create VPC
2. Use admin page to add instance to the VPC
3. Use admin page to add virtual IPs
4. Assign virtual IPs to network inteface eth0
5. Confirm
MAC_ADDR=$(ifconfig eth0 | sed -n
's/.*HWaddr ([a-f0-9:]*).*/1/p')

IP=($(curl http://169.254.169.254/latest/meta-
data/network/interfaces/macs/$MAC_ADDR/local-
ipv4s))

for ip in ${IP[@]:1}; do
     echo "Adding IP: $ip"
     sudo ip addr add dev eth0 $ip/24
done

ip addr show

http://about.silkapp.com/page/Multiple%20IP%20addresses%2
More topics
●   tsung-recorder:
    Use normal browsers to create test.xml
●   tsplot:
    Merge various tsung_stats.pl graphs into one
●   Monitoring:
    Erlang, SNMP, Munin
●   Loops, variables etc.

http://tsung.erlang-projects.org/user_manual.html

Contenu connexe

Tendances

Tendances (20)

Java Foundations: Basic Syntax, Conditions, Loops
Java Foundations: Basic Syntax, Conditions, LoopsJava Foundations: Basic Syntax, Conditions, Loops
Java Foundations: Basic Syntax, Conditions, Loops
 
Run time storage
Run time storageRun time storage
Run time storage
 
Introduction to the Disruptor
Introduction to the DisruptorIntroduction to the Disruptor
Introduction to the Disruptor
 
Python Programming Essentials - M6 - Code Blocks and Indentation
Python Programming Essentials - M6 - Code Blocks and IndentationPython Programming Essentials - M6 - Code Blocks and Indentation
Python Programming Essentials - M6 - Code Blocks and Indentation
 
Swing
SwingSwing
Swing
 
Linux command ppt
Linux command pptLinux command ppt
Linux command ppt
 
Python.ppt
Python.pptPython.ppt
Python.ppt
 
Python Scipy Numpy
Python Scipy NumpyPython Scipy Numpy
Python Scipy Numpy
 
Mock your way with Mockito
Mock your way with MockitoMock your way with Mockito
Mock your way with Mockito
 
Configuring global infrastructure in terraform
Configuring global infrastructure in terraformConfiguring global infrastructure in terraform
Configuring global infrastructure in terraform
 
Java 8 Lambda and Streams
Java 8 Lambda and StreamsJava 8 Lambda and Streams
Java 8 Lambda and Streams
 
My sql connector.c++ 기본 가이드
My sql connector.c++ 기본 가이드My sql connector.c++ 기본 가이드
My sql connector.c++ 기본 가이드
 
A Role of Lexical Analyzer
A Role of Lexical AnalyzerA Role of Lexical Analyzer
A Role of Lexical Analyzer
 
Python Visual Studio | Edureka
Python Visual Studio | EdurekaPython Visual Studio | Edureka
Python Visual Studio | Edureka
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
Python Unit 3 - Control Flow and Functions
Python Unit 3 - Control Flow and FunctionsPython Unit 3 - Control Flow and Functions
Python Unit 3 - Control Flow and Functions
 
Java swing
Java swingJava swing
Java swing
 
Presentation on-exception-handling
Presentation on-exception-handlingPresentation on-exception-handling
Presentation on-exception-handling
 
Networking in python by Rj
Networking in python by RjNetworking in python by Rj
Networking in python by Rj
 
Introduction to Java 11
Introduction to Java 11 Introduction to Java 11
Introduction to Java 11
 

Similaire à Easy distributed load test with Tsung

Steps to build and run oai
Steps to build and run oaiSteps to build and run oai
Steps to build and run oai
ssuser38b887
 
Docker Introduction + what is new in 0.9
Docker Introduction + what is new in 0.9 Docker Introduction + what is new in 0.9
Docker Introduction + what is new in 0.9
Jérôme Petazzoni
 
Android Boot Time Optimization
Android Boot Time OptimizationAndroid Boot Time Optimization
Android Boot Time Optimization
Kan-Ru Chen
 
Summit demystifying systemd1
Summit demystifying systemd1Summit demystifying systemd1
Summit demystifying systemd1
Susant Sahani
 
Lightweight Virtualization with Linux Containers and Docker I YaC 2013
Lightweight Virtualization with Linux Containers and Docker I YaC 2013Lightweight Virtualization with Linux Containers and Docker I YaC 2013
Lightweight Virtualization with Linux Containers and Docker I YaC 2013
Docker, Inc.
 

Similaire à Easy distributed load test with Tsung (20)

CoreOS Intro
CoreOS IntroCoreOS Intro
CoreOS Intro
 
OpenNebula 5.4 Hands-on Tutorial
OpenNebula 5.4 Hands-on TutorialOpenNebula 5.4 Hands-on Tutorial
OpenNebula 5.4 Hands-on Tutorial
 
Steps to build and run oai
Steps to build and run oaiSteps to build and run oai
Steps to build and run oai
 
Docker and Containers for Development and Deployment — SCALE12X
Docker and Containers for Development and Deployment — SCALE12XDocker and Containers for Development and Deployment — SCALE12X
Docker and Containers for Development and Deployment — SCALE12X
 
CoreOS, or How I Learned to Stop Worrying and Love Systemd
CoreOS, or How I Learned to Stop Worrying and Love SystemdCoreOS, or How I Learned to Stop Worrying and Love Systemd
CoreOS, or How I Learned to Stop Worrying and Love Systemd
 
AEO Training - 2023.pdf
AEO Training - 2023.pdfAEO Training - 2023.pdf
AEO Training - 2023.pdf
 
Dev ops
Dev opsDev ops
Dev ops
 
Plone deployment made easy
Plone deployment made easyPlone deployment made easy
Plone deployment made easy
 
Deep Dive on Amazon EC2 Instances (March 2017)
Deep Dive on Amazon EC2 Instances (March 2017)Deep Dive on Amazon EC2 Instances (March 2017)
Deep Dive on Amazon EC2 Instances (March 2017)
 
Driver_linux
Driver_linuxDriver_linux
Driver_linux
 
Run Run Trema Test
Run Run Trema TestRun Run Trema Test
Run Run Trema Test
 
Vagrant, Ansible, and OpenStack on your laptop
Vagrant, Ansible, and OpenStack on your laptopVagrant, Ansible, and OpenStack on your laptop
Vagrant, Ansible, and OpenStack on your laptop
 
Docker Introduction, and what's new in 0.9 — Docker Palo Alto at RelateIQ
Docker Introduction, and what's new in 0.9 — Docker Palo Alto at RelateIQDocker Introduction, and what's new in 0.9 — Docker Palo Alto at RelateIQ
Docker Introduction, and what's new in 0.9 — Docker Palo Alto at RelateIQ
 
Docker Introduction + what is new in 0.9
Docker Introduction + what is new in 0.9 Docker Introduction + what is new in 0.9
Docker Introduction + what is new in 0.9
 
LISA15: systemd, the Next-Generation Linux System Manager
LISA15: systemd, the Next-Generation Linux System Manager LISA15: systemd, the Next-Generation Linux System Manager
LISA15: systemd, the Next-Generation Linux System Manager
 
Android Boot Time Optimization
Android Boot Time OptimizationAndroid Boot Time Optimization
Android Boot Time Optimization
 
Proactive monitoring with Monit
Proactive monitoring with MonitProactive monitoring with Monit
Proactive monitoring with Monit
 
Summit demystifying systemd1
Summit demystifying systemd1Summit demystifying systemd1
Summit demystifying systemd1
 
Lightweight Virtualization with Linux Containers and Docker | YaC 2013
Lightweight Virtualization with Linux Containers and Docker | YaC 2013Lightweight Virtualization with Linux Containers and Docker | YaC 2013
Lightweight Virtualization with Linux Containers and Docker | YaC 2013
 
Lightweight Virtualization with Linux Containers and Docker I YaC 2013
Lightweight Virtualization with Linux Containers and Docker I YaC 2013Lightweight Virtualization with Linux Containers and Docker I YaC 2013
Lightweight Virtualization with Linux Containers and Docker I YaC 2013
 

Plus de Ngoc Dao

Actor-based concurrency and Akka Fundamentals
Actor-based concurrency and Akka FundamentalsActor-based concurrency and Akka Fundamentals
Actor-based concurrency and Akka Fundamentals
Ngoc Dao
 
Xitrum HOWTOs
Xitrum HOWTOsXitrum HOWTOs
Xitrum HOWTOs
Ngoc Dao
 
Xitrum @ Scala Conference in Japan 2013
Xitrum @ Scala Conference in Japan 2013Xitrum @ Scala Conference in Japan 2013
Xitrum @ Scala Conference in Japan 2013
Ngoc Dao
 
SockJS Intro
SockJS IntroSockJS Intro
SockJS Intro
Ngoc Dao
 
How to start using Scala
How to start using ScalaHow to start using Scala
How to start using Scala
Ngoc Dao
 
Xitrum internals
Xitrum internalsXitrum internals
Xitrum internals
Ngoc Dao
 
Camellia General
Camellia GeneralCamellia General
Camellia General
Ngoc Dao
 
Nhập môn BDD
Nhập môn BDDNhập môn BDD
Nhập môn BDD
Ngoc Dao
 

Plus de Ngoc Dao (20)

Model with actors and implement with Akka
Model with actors and implement with AkkaModel with actors and implement with Akka
Model with actors and implement with Akka
 
I18nize Scala programs à la gettext
I18nize Scala programs à la gettextI18nize Scala programs à la gettext
I18nize Scala programs à la gettext
 
Develop realtime web with Scala and Xitrum
Develop realtime web with Scala and XitrumDevelop realtime web with Scala and Xitrum
Develop realtime web with Scala and Xitrum
 
BIG DATA サービス と ツール
BIG DATA サービス と ツールBIG DATA サービス と ツール
BIG DATA サービス と ツール
 
How to write a web framework
How to write a web frameworkHow to write a web framework
How to write a web framework
 
Xitrum @ Scala Matsuri Tokyo 2014
Xitrum @ Scala Matsuri Tokyo 2014Xitrum @ Scala Matsuri Tokyo 2014
Xitrum @ Scala Matsuri Tokyo 2014
 
Actor-based concurrency and Akka Fundamentals
Actor-based concurrency and Akka FundamentalsActor-based concurrency and Akka Fundamentals
Actor-based concurrency and Akka Fundamentals
 
Xitrum HOWTOs
Xitrum HOWTOsXitrum HOWTOs
Xitrum HOWTOs
 
Xitrum @ Scala Conference in Japan 2013
Xitrum @ Scala Conference in Japan 2013Xitrum @ Scala Conference in Japan 2013
Xitrum @ Scala Conference in Japan 2013
 
SockJS Intro
SockJS IntroSockJS Intro
SockJS Intro
 
How to start using Scala
How to start using ScalaHow to start using Scala
How to start using Scala
 
Cloud Erlang
Cloud ErlangCloud Erlang
Cloud Erlang
 
Xitrum internals
Xitrum internalsXitrum internals
Xitrum internals
 
Những lỗi bảo mật web thường gặp ở phần application
Những lỗi bảo mật web thường gặp ở phần applicationNhững lỗi bảo mật web thường gặp ở phần application
Những lỗi bảo mật web thường gặp ở phần application
 
Erlang Web
Erlang WebErlang Web
Erlang Web
 
Nitrogen Web Framework
Nitrogen Web FrameworkNitrogen Web Framework
Nitrogen Web Framework
 
スポイトができるまで
スポイトができるまでスポイトができるまで
スポイトができるまで
 
Camellia General
Camellia GeneralCamellia General
Camellia General
 
Nhập môn BDD
Nhập môn BDDNhập môn BDD
Nhập môn BDD
 
何でRuby
何でRuby何でRuby
何でRuby
 

Dernier

Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Dernier (20)

Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 

Easy distributed load test with Tsung

  • 1. Easy distributed load test with Tsung Ngoc Dao
  • 2. Source code: https://github.com/ngocdaothanh/tsart Full doc: http://tsung.erlang-projects.org/user_manual.html
  • 3. Agenda ● Install Tsung ● Load test from one machine ● Distributed load test ● Test WebSocket
  • 5. How to install Tsung 1. Install Erlang 2. Install Tsung Tsung is a program written in Erlang language (Erlang presentation next time)
  • 6. Install Erlang sudo yum install yum install gcc For connecting to sudo yum install openssl-devel other machines to do distributed sudo yum install ncurses-devel load test (later slides) wget http://www.erlang.org/download/otp_src_R15B01.tar.gz tar xzf otp_src_R15B01.tar.gz For Erlang cd otp_src_R15B01 command line ./configure –prefix=$HOME/opt/erlang-R15B01 make install http://www.erlang.org/download.html
  • 7. Install Tsung export PATH=$PATH:$HOME/opt/erlang-R15B01/bin wget http://tsung.erlang-projects.org/dist/tsung-1.4.2.tar.gz tar xzf tsung-1.4.2.tar.gz cd tsung-1.4.2 Need “erlc” command to compile Tsung ./configure –prefix=$HOME/opt/tsung-1.4.2 make install export PATH=$PATH:$HOME/opt/tsung-1.4.2/bin http://tsung.erlang-projects.org/dist/
  • 8. Load test from one machine
  • 9. share/doc/tsung/examples Load test (2) target Requests test.xml (3) (1) Tsung Responses (4) lib/tsung/bin/tsung_stats.pl Reports sudo yum install gnuplot sudo cpan Template
  • 10. To be able to create many connections ● Each connection is seen as an open file; default limit: Linux: limit -n => 1024 Mac: launchctl limit => 256 ● Linux: Edit /etc/security/limits.conf: * soft nofile 1000000 * hard nofile 1000000 ● Mac: sudo launchctl limit maxfiles 1000000 1000000 Or create /etc/launchd.conf: limit maxfiles 1000000 1000000
  • 11. More info on tuning: http://ngocdaothanh.github.com/xitrum/guide/deploy
  • 12. test.xml https://github.com/ngocdaothanh/tsart/blob/master/single.xml Pitfall: <!DOCTYPE tsung SYSTEM "path/to/tsung-1.0.dtd"> The path must be correct. Be careful if you copy the XML file from other machines.
  • 13. Bypassing 30k limit Each IP can only create about 25 thousands connections. To bypass this problem: 1. Create multiple IPs for one network interface 2. Set "ports_range" option http://tsung.erlang-projects.org/user_manual.html http://lists.process-one.net/pipermail/tsung-users/2010-Oct
  • 14. <load>...</load> <options> <option name="ports_range" min="1025" max="65535"/> </options> <sessions>...</sessions>
  • 15. Demo ● Run test: tsung-1.4.2/bin/tsung -f test.xml -l . start ● See status during test: tail -f tsung_controller.log tsung-1.4.2/bin/tsung status ● Create reports: perl tsung-1.4.2/lib/tsung/bin/tsung_stats.pl
  • 17. Tsung worker Tsung test.xml Tsung (3) Target (1) (2) worker controller Tsung worker (4) EC2 is very convenient! Reports
  • 18. test.xml https://github.com/ngocdaothanh/tsart/blob/master/distributed.xml <clients> <!-- Must be hostname, can't be IP --> <client host="t1" cpu="8" maxusers="200000"/> <client host="t2" cpu="8" maxusers="200000"/> <client host="t3" cpu="8" maxusers="200000"/> </clients> Distributed test is easy: Just add more clients
  • 19. (1) ssh machine2 erl (port: 22) Tsung Tsung controller (2) worker (Erlang node) Erlang node – Erlang node (Erlang node) machine1 standard communication machine2 (port: 4369 and ???) http://linux.die.net/man/1/epmd http://www.erlang.org/doc/apps/erts/erl_dist_protocol.html
  • 20. Should not be 127.0.0.1 => ● /etc/hosts on t1: <ip1> t1 <ip2> t2 <ip3> t3 ● /etc/hosts on t2, t3: <ip1> t1
  • 21. => ● Add erl to PATH: sudo echo 'pathmunge /home/ngoc/opt/erlang-R15B01/bin' > /etc/profile.d/erlang.sh sudo chmod +x /etc/profile.d/erlang.sh ● Or edit /etc/environment: PATH=”/home/ngoc/opt/erlang-R15B01/bin...”
  • 22. Install once, copy everywhere Basically, you only have to install on one machine, then copy to others: ● /etc/hosts ● /etc/environment ● /etc/sysctl.conf ● /etc/security/limits.conf ● Erlang ● Tsung
  • 23. Confirm From the controller machine (t1): ssh t1 erl ssh t2 erl Pitfall: Remember to run ssh t3 erl this command to confirm, if you use ssh localhost erl <client host="localhost"/> Trouble shooting: http://tsung.erlang-projects.org/user_manual.html > Frequently Asked Questions
  • 24. Demo
  • 25. Test WebSocket This one is good: https://github.com/onlychoice/tsung/tree/websocket This one may be better: https://github.com/wulczer/tsung_ws
  • 27. Pitfall ● I installed tsung-1.4.2 on t1, t2, t3. Then installed tsung-1.4.2-with-websocket-plugin on t1, but forgot to install it on t2 and t3. => Install same version of Erlang and Tsung on all machines, at same paths ● Tsung by default only creates 800 connections on each Erlang VM. It will spawn more Erlang nodes to create more connections. But Tsung will stop working when there are too many nodes (~100) => Set maxusers to a large number (~200K/client).
  • 28. <clients> <client host="t1" cpu="8" maxusers="200000"> <ip scan="true" value="eth0"/> </client> </clients>
  • 29. Amazon EC2 ● Good: There is no Data Transfer charge between Amazon EC2 and other Amazon Web Services within the same region http://aws.amazon.com/ec2/pricing/ => Use private DNS address or IP instead of public ones ● m1.xlarge can create about 200 new connections/s ● Use Amazon VPC (Virtual Private Cloud) feature to create multiple virtual IPs for one network interface ● Pitfall: IP addresses of machines change after each restart => Need to update /etc/hosts of the controller machine
  • 30.
  • 31.
  • 32. Bypassing 30k limit on EC2 1. Create VPC 2. Use admin page to add instance to the VPC 3. Use admin page to add virtual IPs 4. Assign virtual IPs to network inteface eth0 5. Confirm
  • 33. MAC_ADDR=$(ifconfig eth0 | sed -n 's/.*HWaddr ([a-f0-9:]*).*/1/p') IP=($(curl http://169.254.169.254/latest/meta- data/network/interfaces/macs/$MAC_ADDR/local- ipv4s)) for ip in ${IP[@]:1}; do echo "Adding IP: $ip" sudo ip addr add dev eth0 $ip/24 done ip addr show http://about.silkapp.com/page/Multiple%20IP%20addresses%2
  • 34. More topics ● tsung-recorder: Use normal browsers to create test.xml ● tsplot: Merge various tsung_stats.pl graphs into one ● Monitoring: Erlang, SNMP, Munin ● Loops, variables etc. http://tsung.erlang-projects.org/user_manual.html