SlideShare a Scribd company logo
1 of 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

More Related Content

What's hot

Gestion des disques et des permission sous Linux
Gestion des disques et des permission sous LinuxGestion des disques et des permission sous Linux
Gestion des disques et des permission sous Linux
Oussama Bessrour
 
HDH_chuong 1_2019_color.pdf
HDH_chuong 1_2019_color.pdfHDH_chuong 1_2019_color.pdf
HDH_chuong 1_2019_color.pdf
HongVitc
 
Programmation web1 complet
Programmation web1 completProgrammation web1 complet
Programmation web1 complet
Annabi Gihed
 
Mise en oeuvre des framework de machines et deep learning v1
Mise en oeuvre des framework de machines et deep learning v1 Mise en oeuvre des framework de machines et deep learning v1
Mise en oeuvre des framework de machines et deep learning v1
ENSET, Université Hassan II Casablanca
 
Correction examen-java-avancé-1
Correction examen-java-avancé-1Correction examen-java-avancé-1
Correction examen-java-avancé-1
vangogue
 

What's hot (20)

Metrique
MetriqueMetrique
Metrique
 
Gestion des disques et des permission sous Linux
Gestion des disques et des permission sous LinuxGestion des disques et des permission sous Linux
Gestion des disques et des permission sous Linux
 
Co so ly thuyet ve bao mat
Co so ly thuyet ve bao matCo so ly thuyet ve bao mat
Co so ly thuyet ve bao mat
 
HDH_chuong 1_2019_color.pdf
HDH_chuong 1_2019_color.pdfHDH_chuong 1_2019_color.pdf
HDH_chuong 1_2019_color.pdf
 
Programmation web1 complet
Programmation web1 completProgrammation web1 complet
Programmation web1 complet
 
Đệ Quy, Quay Lui, Nhánh Cận
Đệ Quy, Quay Lui, Nhánh CậnĐệ Quy, Quay Lui, Nhánh Cận
Đệ Quy, Quay Lui, Nhánh Cận
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
 
Cs lab04 win-form assignment
Cs lab04   win-form assignmentCs lab04   win-form assignment
Cs lab04 win-form assignment
 
Complete Java Course
Complete Java CourseComplete Java Course
Complete Java Course
 
Mise en oeuvre des framework de machines et deep learning v1
Mise en oeuvre des framework de machines et deep learning v1 Mise en oeuvre des framework de machines et deep learning v1
Mise en oeuvre des framework de machines et deep learning v1
 
Les collections en Java
Les collections en JavaLes collections en Java
Les collections en Java
 
Correction examen-java-avancé-1
Correction examen-java-avancé-1Correction examen-java-avancé-1
Correction examen-java-avancé-1
 
Go Lang Tutorial
Go Lang TutorialGo Lang Tutorial
Go Lang Tutorial
 
froglogic Coco Code Coverage Presentation
froglogic Coco Code Coverage Presentationfroglogic Coco Code Coverage Presentation
froglogic Coco Code Coverage Presentation
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategy
 
Hệ thống quản lý rạp chiếu phim
Hệ thống quản lý          rạp chiếu phimHệ thống quản lý          rạp chiếu phim
Hệ thống quản lý rạp chiếu phim
 
Appels de procédures distants (RPC)
Appels de procédures distants (RPC)Appels de procédures distants (RPC)
Appels de procédures distants (RPC)
 
Marzouk jsp
Marzouk jspMarzouk jsp
Marzouk jsp
 
The definitive guide to java agents
The definitive guide to java agentsThe definitive guide to java agents
The definitive guide to java agents
 
Bao cao atbmhttt
Bao cao atbmhtttBao cao atbmhttt
Bao cao atbmhttt
 

Similar to 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.
 

Similar to 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
 

More from 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
 

More from 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
 

Recently uploaded

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Recently uploaded (20)

AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Design and Development of a Provenance Capture Platform for Data Science
Design and Development of a Provenance Capture Platform for Data ScienceDesign and Development of a Provenance Capture Platform for Data Science
Design and Development of a Provenance Capture Platform for Data Science
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
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​
 
Modernizing Legacy Systems Using Ballerina
Modernizing Legacy Systems Using BallerinaModernizing Legacy Systems Using Ballerina
Modernizing Legacy Systems Using Ballerina
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Navigating Identity and Access Management in the Modern Enterprise
Navigating Identity and Access Management in the Modern EnterpriseNavigating Identity and Access Management in the Modern Enterprise
Navigating Identity and Access Management in the Modern Enterprise
 
Choreo: Empowering the Future of Enterprise Software Engineering
Choreo: Empowering the Future of Enterprise Software EngineeringChoreo: Empowering the Future of Enterprise Software Engineering
Choreo: Empowering the Future of Enterprise Software Engineering
 
WSO2 Micro Integrator for Enterprise Integration in a Decentralized, Microser...
WSO2 Micro Integrator for Enterprise Integration in a Decentralized, Microser...WSO2 Micro Integrator for Enterprise Integration in a Decentralized, Microser...
WSO2 Micro Integrator for Enterprise Integration in a Decentralized, Microser...
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
ChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps ProductivityChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps Productivity
 
API Governance and Monetization - The evolution of API governance
API Governance and Monetization -  The evolution of API governanceAPI Governance and Monetization -  The evolution of API governance
API Governance and Monetization - The evolution of API governance
 

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