Search results for: “jmeter”

  • JMeter #01: การสร้าง Load Test เบื้องต้น

    Apache JMeter เป็น Open Source Software ที่พัฒนาด้วย Java 100% ออกแบบมาใช้สำหรับการทดสอบโหลดของพฤติกรรมการใช้งาน และวัดประสิทธิภาพ เดิมใช้เพื่อทดสอบ Web Application แต่ปัจจุบันสามารถใช้งานทดสอบได้หลากหลายขึ้นด้วย

    อ่านเพิ่มเติม: http://jmeter.apache.org/index.html

    บทความที่เกี่ยวข้อง: https://sysadmin.psu.ac.th/?s=jmeter

    ในการใช้งานทั่วไปเบื้องต้น สามารถอ่านได้จาก การติดตั้งโปรแกรมตรวจสอบประสิทธิภาพ Server : Apache JMeter บนเครื่อง Windows

     

    การวัดประสิทธิภาพ (Performance Test) [1] แบ่งออกเป็น

    1. Performance Testing
    2. Load Testing
    3. Stress Testing

    ในที่นี้จะใช้ JMeter ในการทำ Load Testing โดยจะทดสอบ Web Application ตามเป้าหมายต่อไปนี้

    • ทดสอบกับ Web Page ที่ตั้งไว้ ซึ่งประกอบด้วยภาพจำนวนมาก
    • จำนวน Connection ต่อวินาที ในระดับต่างๆ
    • ในแต่ระดับ จะมีหยุดรอ 10 วินาที ก่อนจะยกระดับที่สูงขึ้น

    ขั้นตอนการใช้งาน JMeter สร้าง Load Testing

    1. เนื่องจากการทดสอบจะยิงไปที่ Web Page เดียวกันตลอด จึงสร้าง HTTP Request Default เพื่อให้ง่ายต่อการเปลี่ยนแปลง
      โดยคลิกขวาที่ Test Pane เลือก Add > Config Element > HTTP Request Default
    2. ใน HTTP Request Default กรอก
      Server Name or IP
      Port Number
      Path ตามต้องการ
      เช่น ต้องการทดสอบ http://192.168.107.107:80/wordpress/?p=4
    3. คลิกขวาที่ Test Plan เลือก Add > Threads (Users) > Thread Group
    4. กรอก Name และ Number of Threads (users)
      ในตัวอย่างนี้ ตั้งค่า Number of Threads (users) เป็น 10 และ Ramp-Up Period (in seconds) เป็น 1 เพราะต้องการให้ทดสอบระบบว่า เมื่อ มีผู้ใช้ใช้งานพร้อมกัน 10 คนในวินาทีเดียวกันนั้น ระบบจะตอบสนองอย่างไร
    5. คลิกขวาที่ Thread Group นี้ (ตอนนี้จะเปลี่ยนชื่อจาก Thread Group เป็น 10 แล้ว) แล้วเลือก Add > Sampler > Http Request
    6. ในส่วนนี้ ไม่ต้องแก้ไขอะไร โดย JMeter จะไปเอาค่าที่ตั้งไว้ใน HTTP Request Default ข้างต้นมาใช้
    7. ต่อไป เป็นส่วนของการแสดงผล
      คลิกขวาที่ Test Plan เลือก Add > Listener > Summary Report
    8. ต่อไป ใส่ Timer เพื่อให้ระบบ หยุดพักการทดสอบ เมื่อทำแต่ละ Thread Group เสร็จ เป็นเวลา 10 วินาที ก่อนจะเริ่ม Thread Group ต่อไป
      คลิกขวาที่ Test Plan เลือก Add > Timer > Constant Timer 
      แล้วใส่ค่า 10000 milliseconds หรือ 10 วินาที
    9. Save บ้าง อะไรบ้าง
    10. ในที่นี้ ต้องการทดสอบที่ 10 Users แล้วไป 20 Users ไป จนกระทั่ง 100 Users
      ก็ให้ทำการ Duplicate ตัว Thread Group ที่ชื่อ 10 ขึ้นมา

      ล้วแก้ Name กับ Number of Threads (users) เป็น 20

      แล้วทำซ้ำไปเรื่อยๆ จนได้จำนวนที่ต้องการ (เช่น 10 ถึง 100 เป็นต้น)
    11. สุดท้าย ทำการกำหนดให้ JMeter ทำงานทีละ Thread ตามลำดับ
      โดยการ คลิกที่ Test Plan
      แล้ว เลือก Run Thread Groups consecutively (i.e.run groups one at a time)
    12. ต่อไปก็ทำการทดสอบ
      ให้คลิก Summary Report
      เลือก Include group name in label
      แล้วคลิกปุ่ม Run
    13. ก็จะได้รายงานผล

      สามารถ Save Table Data เป็น .csv

      เอาไป Plot Graph ให้สวยงามได้

    Reference:

    [1] https://msdn.microsoft.com/en-us/library/bb924356.aspx

  • การติดตั้งโปรแกรมตรวจสอบประสิทธิภาพ Server : Apache Jmeter บนเครื่อง Windows

    โปรแกรม Jmeter เป็นโปรแกรมสารพัดประโยชน์ใช้สำหรับทดสอบประสิทธิภาพการรองรับโหลดจำนวนมาก โดยในเบื้องต้นผมยังจะไม่อธิบายรายละเอียดโปรแกรมมากนะครับ จะนำเสนอแค่วิธีติดตั้ง และการ Test ในส่วนที่เป็น Web Server แบบไม่มี Script อะไรพิเศษเป็นหลัก แล้ววันหลังค่อยมาเปล่าในส่วนอื่น ๆ เช่นการ Test Load Database, LDAP, FTP, WebService ฯลฯ ถ้ามีโอกาสครับ

    ความต้องการพื้นฐานสำหรับโปรแกรม Jmeter
    1. Java 6 ขึ้นไป
    2. OS ซึ่งรองรับทั้ง Unix, Windows

    วิธีการติดตั้งบน Windows 
    Test OS : Windows 8.1
    1. ติดตั้ง JAVA สามารถทำการ Download และติดตั้งได้จาก

    http://www.java.com/en/download/index.jsp
    

    2. ดาวน์โหลดโปรแกรม Jmeter ได้จาก

    http://jmeter.apache.org/download_jmeter.cgi
    

    3. Save file .zip ดังรูป
    2014-05-22_202646

    4. ทำการแตกไฟล์ออกมา และทำการรันไฟล์ ApacheMeter.jar ดังรูป (จะปรากฎเป็น icon java สามารถ double click รันได้เลย)
    2014-05-22_203814

    ตัวอย่างการสร้าง Test Plan เพื่อทดสอบ Web Server

    1. ทำการสร้าง Thread Group ภายใต้ Test Plan ดังรูป
    2014-05-22_204434

    2. หลังจากนั้นจะปรากฎหน้าต่างให้ตั้งค่าได้ดังนี้
    2014-05-22_205548

    Number of Threads (users) : จำนวนผู้ใช้งานที่ต้องการ ณ เวลานั้น ๆ (concurrent users)
    Ramp-up Period (in seconds) : เวลาหน่วงในการเพิ่มผู้ใช้งานจนถึงจำนวน Number of Threads ที่ตั้งไว้ เช่น Number of Threads = 300, Ramp-up Period = 60 แสดงว่า ภายใน 60 วินาทีจะมี จำนวนผู้ใช้เข้าสู่ระบบรวม 300 คน (ค่อย ๆ เพิ่มเข้าไปจนครบ 300 ใน 60 วินาที)
    Loop Count : คือจำนวนรอบที่ทำ ถ้าติด Forever ก็แสดงว่าทำตลอดไป

    *หมายเหตุ ระวังอย่างตั้งค่าเว่อร์จนเกินไป เครื่องผู้ที่สั่ง Test อาจจะทำงานไม่ไหว Hang ได้

    3. จากนั้นทำการสร้าง Sampler ที่เป็น HTTP Request เพื่อกำหนดค่า config เบื้องต้นที่จำเป็นในการทดสอบ ดังรูป
    2014-05-22_212211

    4. จะปรากฎให้ตั้งค่า หลัก ๆ ถ้าต้องการยิงทดสอบธรรมดา ๆ ให้ใส่เฉพาะ Server Name หรือ IP และ Path เช่น /regist.php ถ้าต้องการยิงหน้าแรกก็ใส่ / เฉย ๆ ดังรูป

    2014-05-22_212413

    5. หลังจากนั้นทำการเพิ่มในส่วนของรายงานผล โดยแนะนำ 2 ตัวคือ View Results Tree และ Graph Results
    2014-05-22_210512

    6. ตัวอย่างผลลัพธ์จาก Results Tree (วิธีการรัน Test ให้กดที่ปุ่ม Play สีเขียว และปุ่ม Stop สีแดงเพื่อหยุด)2014-05-22_212755

    7. ตัวอย่างผลลัพธ์ในรูปแบบ Graph Results2014-05-22_213206

    Reference :
    [1] http://www.narisa.com/forums/index.php?app=blog&blogid=9&showentry=3019
    [2] http://www.narisa.com/forums/index.php?app=blog&blogid=9&showentry=2873

  • Juju #07 – กระจายโหลดข้ามเครื่อง

    ที่ผ่านมา เป็นการติดตั้ง Juju ซึ่งเบื้องหลังคือ LXD Container แต่ทั้งหมดยังอยู่บนเครื่องเดียวกัน

    ภาพต่อไปนี้ เป็นการทดสอบความเร็วในการตอบสนองของ WordPress ซึ่งเป็น Post ที่มีภาพจำนวนมาก และมีขนาดในการ Download ทั้งหมด 5 MB ใช้เวลาประมาณ 1.24 วินาที

    เมื่อใช้ jMeter ระดมยิงด้วยความเร็ว 100 Connections ต่อ 1 วินาที ต่อเนื่อง 10 วินาที ได้ผลว่า เวลาเฉลี่ยคือ 2.478 วินาที

    ต่อมาลองเพิ่มจำนวน Container จาก 1 เครื่องไปเป็น 3 เครื่อง แต่ทำงานอยู่บน Physical Server เดียวกัน

    แล้วทดลองยิงแบบเดิม ได้ผลออกมาคือ ใช้เวลาเฉลี่ย 1.663 วินาที

    จากนั้น ทดสอบแยก Container ออกไป เป็น 3 Physical Servers

    ได้ผลออกมาว่า ใช้เวลาลดลงเหลือเพียง 1.056 วินาทีเท่านั้น

    สรุป การกระจายโหลดออกไปยังหลายๆ Physical Servers ทำให้สามารถรับโหลดจำนวนมากได้

    ในบทความต่อไปจะมาลงรายละเอียดในการ Setup กัน

     

    Reference:
    https://www.digitalocean.com/company/blog/horizontally-scaling-php-applications/
    https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-in-ubuntu-16-04
    http://php.net/manual/de/mysqlnd-ms.loadbalancing.php
    https://serversforhackers.com/video/php-fpm-configuration-the-listen-directive
    http://nginx.org/en/docs/http/request_processing.html
    http://stackoverflow.com/questions/5328844/nginx-load-balance-with-dedicated-php-fpm-server
    https://code.google.com/archive/p/sna/wikis/NginxWithPHPFPM.wiki
    http://nginx.org/en/docs/http/load_balancing.html
    – http://opensource.cc.psu.ac.th/KM-container

  • การทดสอบประสิทธิภาพ Web Server ประเภท Static Page : Apache2 vs Lighttpd บนเครื่อง Ubuntu 14.04 LTS

    เครื่องมือในการทดสอบ
    Web Server OS : Ubuntu 14.04 LTS
    Client OS : Windows 8.1
    Software : Apache Jmeter 2.11

    Environment :
    Web Server
    Ubuntu Server (Oracle VM VirtualBox)
    Intel Haswell 1.6GHz (2.30GHz) 4 core RAM 512G
    Client
    Windows 8.1 (Physical Notebook)
    Intel Haswell 1.6GHz (2.30GHz) Intel Haswell 4 core RAM 8G
    – รันอยู่บนเครื่องเดียวกัน
    – ใช้ค่า Default ไม่มีการ Tuning เพิ่มเติม

    วิธีการทดสอบ

    1. ทำการตั้งค่า Apache ให้อยู่คนละ Port กับ Lighttpd2014-05-23_063514

    2. ทำการสร้าง Static Page โดยมีตำแหน่ง และ HTML Code (index.html) ดังนี้

    Apache : /var/www/html/index.html
    สำหรับ Apache ให้ rename ไฟล์เดิมก่อนเนื่องจากมีไฟล์อยู่แล้วด้วยคำสั่งดังนี้

    sudo mv /var/www/html/index.html /var/www/html/index.html_bak
    

    Lighttpd : /var/www/index.html

    <!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
    <title>Webserver test</title>
    </head>
    <body>
    This is a webserver test page.
    </body>
    </html>

    3. เปิดโปรแกรม Jmeter ทำการ Add Thread Group, HTTP Request, View Results Tree และ Graph Results
    2014-05-23_063658

    4. ทำการทดสอบโดยชี้ไปที่ Web Site ของ Web Server ที่ต้องการ โดยมีตัวอย่างดังรูป
    (จะสังเกตุว่ามีการตั้งค่า Timeout = 1500 ms เพื่อป้องกันโปรแกรมค้าง เนื่องจาก Web Server ไม่ยอมตอบ)
    2014-05-23_105637

    *หมายเหตุ ระหว่างรัน Test สามารถตรวจสอบการทำงานของเครื่อง Web Server โดยติดตั้งโปรแกรมชื่อ htop ดังนี้

    sudo apt-get install -y htop
    

    พิมพ์คำสั่ง htop จะปรากฎหน้าจอดังรูป2014-05-23_065732

    การตั้งค่าทดสอบ

    Number of Threads (users) : 500,1000,2000,2500,3000
    Ramp-Up Period (in seconds) : 1
    Loop Count : 1

    ตัวอย่างการทดสอบ

    จำนวน Users ที่เปิด Page ไม่สำเร็จ

    Number of Threads (users) 500 1000 2000 2500 3000
    Apache2 0 28 424 2232 Jmeter Hang
    Lighttpd 0 0 3 1418 Jmeter Hang

    ซึ่งการทดสอบแบบไม่มีการ Tuning อาจจะไม่ Fair สำหรับแต่ละ Web Server (แม้ผลจะออกมาชัดว่า Lighttpd เหนือกว่า) เพราะยังไม่ได้มีการดึงประสิทธิภาพหรือตั้งค่า Limit Connection ให้รองรับได้สูงสุด และยังมีในส่วนของ Cache หลาย ๆ แบบที่จะช่วยให้ไม่ต้องประมวลผล Page เดิม ๆ ซ้ำบ่อย ๆ แต่ถึงกระนั้นวิธีนี้เป็นวิธีการหนึ่งที่ใช้ในการทดสอบก่อนจะมีการใช้งานจริง เพื่อทำให้เราเตรียมการได้ทันท่วงที เช่นทดสอบแล้วมีบ้าง SQL ที่ใช้เวลานานกว่าปกติ หรือ database connection limit

    สำหรับ Jmeter นั้นสามารถทำอะไรได้อีกมากมาย สามารถเขียน Script ในลักษณะของ Batch Job เพื่อดู Flow การทำงานของทั้ง Web Database และอื่น ๆ ถ้าใครอยากศึกษาเพิ่มเติมสามารถหาอ่านได้จาก Google ทั่ว ๆ ไปครับ

    Reference :
    [1] http://www.cyberciti.biz/tips/howto-performance-benchmarks-a-web-server.html

  • WorkShop : Load Balance Web Server (Server High Availability)

    “ทำไม Web ล่มบ่อยจัง, ทำอย่างไรได้บ้างถ้าไม่ต้องซื้อ Server แพง ๆ เพื่อใช้งานหนักเพียงไม่กี่วัน, Web ล่มแล้วจะติดต่อใครได้บ้าง” คำถามเหล่านี้เคยกวนใจคุณบ้างหรือเปล่า ?

    ขอนำเสนอวิธีการง่าย ๆ ที่ใครก็ทำได้ โดยในเนื้อหาหลักจะอธิบายแบบกว้าง ๆ และผมจะแยกเขียน blog อธิบายแบบละเอียดเป็นหัวข้อ ๆ ไปนะครับ ถ้าใครไม่เข้าใจสามารถคลิกเข้าไปดูเป็นเรื่อง ๆ ได้ครับ

    Workshop Outline
    ftp://ftp.psu.ac.th/pub/psu-lbs/workshop-outline.pdf

    เครื่องที่ใช้ในการทดสอบ (Oracle VM VirtualBox)
    *แนะนำให้เปิดกับโปรแกรม version ล่าสุด
    ** User : testlab , Password : 123456

    มีทั้งหมด 3 เครื่อง เป็น Web Server 2 เครื่อง และเครื่องสำหรับทำ Load Balance 1 เครื่อง
    สามารถ Download ได้ตาม Link นี้

    รายละเอียด URL
    Ubuntu Load Balance Server
    Ubuntu Web Server 1
    Ubuntu Web Server 2
    http://ftp.psu.ac.th/pub/psu-lbs/workshop.ova

    โดยจะแบ่งเป็น 7 ตอนโดยแยกเป็น 7 Blog ดังนี้

    ตอนที่ ชื่อตอน
    ตอนที่ 1 Server High Availability คืออะไร
    ตอนที่ 2 การติดตั้ง Apache2 + PHP5 บนเครื่อง Ubuntu 14.04 LTS
    ตอนที่ 3 การติดตั้ง Lighttpd + PHP5 บนเครื่อง Ubuntu 14.04 LTS
    ตอนที่ 4 การติดตั้งโปรแกรมตรวจสอบประสิทธิภาพ Server : Apache Jmeter บนเครื่อง Windows
    ตอนที่ 5 การทดสอบประสิทธิภาพ Web Server ประเภท Static Page : Apache2 vs Lighttpd บนเครื่อง Ubuntu 14.04 LTS
    ตอนที่ 6 การตรวจสอบสถานะการให้บริการ Web Server ด้วย WGET และสร้าง Shell Script เพื่อตรวจสอบอัตโนมัติ
    ตอนที่ 7 การสร้างระบบ Load Balance Web Server ด้วยวิธีการ URL Redirect
    บทความเพิ่มเติม
    วิธีการเขียน Script ตรวจสอบ Server Performance สำหรับเครื่อง Linux Server
    วิธีการเขียน Script ตรวจสอบ Server Performance สำหรับเครื่อง Windows 2008 R2
    วิธีการ Sync Source Code ระหว่างเครื่อง Linux (กำลังดำเนินการ)
    วิธีการ Sync Source Code ระหว่างเครื่อง Windows (กำลังดำเนินการ)