ทดสอบการโหลดด้วย AB …คำขอที่ล้มเหลวปลอม (ความยาว)


209

ในการทำการทดสอบโหลดสำหรับความอยากรู้อยากเห็นของฉันเองบนเซิร์ฟเวอร์ของฉันฉันวิ่ง:

ab -kc 50 -t 200 http://localhost/index.php

สิ่งนี้จะเปิดการเชื่อมต่อที่คงอยู่ 50 การเชื่อมต่อเป็นเวลา 200 วินาทีและเพียงติเตียนเซิร์ฟเวอร์ของฉันด้วยการร้องขอ index.php

ในผลลัพธ์ของฉันฉันจะได้รับ:

Concurrency Level:      50
Time taken for tests:   200.007 seconds
Complete requests:      33106
Failed requests:        32951
   (Connect: 0, Receive: 0, Length: 32951, Exceptions: 0)
Write errors:           0
Keep-Alive requests:    0
Total transferred:      1948268960 bytes
HTML transferred:       1938001392 bytes
Requests per second:    165.52 [#/sec] (mean)
Time per request:       302.071 [ms] (mean)
Time per request:       6.041 [ms] (mean, across all concurrent requests)
Transfer rate:          9512.69 [Kbytes/sec] received

โปรดสังเกตคำขอ 32951 "ล้มเหลว" ฉันไม่สามารถเข้าใจได้

ในขณะที่การทดสอบกำลังทำงานอยู่ฉันสามารถเข้าถึงเว็บไซต์ของฉันจากคอมพิวเตอร์ที่บ้านได้อย่างสมบูรณ์แบบถึงแม้ว่าเวลาในการโหลดหน้าเว็บที่ด้านล่างของหน้าจะรายงานเป็น. 5 แทนที่จะเป็น. 02 ปกติ อย่างไรก็ตามฉันไม่เคยมีคำขอที่ล้มเหลว

เหตุใด AB จึงรายงานว่าครึ่งหนึ่งของการเชื่อมต่อล้มเหลว และ "ความยาว:" หมายถึงอะไรในบริบทนั้น


เว็บไซต์ของคุณมีตัวโหลดบาลานซ์หรือไม่? ดูโพสต์บล็อกของฉันเกี่ยวกับการทดสอบโหลดด้วยตัวโหลดบาลานซ์ที่อาจอธิบายสถานการณ์ "ใช้งานได้สำหรับฉัน" ในการทดสอบโหลด
แพทริค Lightbody

คำตอบ:


361

ไม่เป็นไร. "ความยาวล้มเหลว" เพียงระบุว่าประมาณครึ่งเวลาที่ความยาวของการตอบสนองนั้นแตกต่างกัน

เนื่องจากเนื้อหาเป็นแบบไดนามิกจึงอาจเป็นตัวระบุเซสชันหรือสิ่งที่คล้ายกัน


8
เฮ้ฉันเพิ่งเจอปัญหา "เดียวกัน" และดีใจที่คำตอบนี้อยู่ที่นี่ Thanx!
Richard Hurt

2
ขอบคุณสำหรับคำตอบฉันมีข้อสงสัยเหมือนกันทั้งหมด
Saiyine

63
ใช่สองปีต่อมาคำตอบนี้ยังคงมีประโยชน์จริงๆ
Sergi

11
อย่ารวดเร็วเกินกว่าที่จะระบุแอตทริบิวต์นี้กับความยาวของตัวแปรที่ไม่ตรงกัน ab ไม่ได้รายงานรหัสสถานะ HTTP 500 ว่าเป็นข้อผิดพลาดในบทสรุป สาเหตุของความยาวที่ไม่ตรงกันอาจเป็นเพราะคุณมีข้อผิดพลาดจริง คุณสามารถใช้ -v 4 เพื่อรับข้อมูลเพิ่มเติม (ไปป์ที่ดีกว่ากับไฟล์เพราะจะมีงานพิมพ์จำนวนมาก)
Tal Lev-Ami

3
จริงๆแล้วมันอธิบายไว้ในคู่มือ ab ที่นี่httpd.apache.org/docs/current/programs/ab.html "หากความยาวของเอกสารเปลี่ยนไปในระหว่างการทดสอบการตอบสนองจะถือว่าเป็นข้อผิดพลาด"
Захар Joe

132

หากต้องการอธิบายปัญหาในคำอื่น ๆ :

เครื่องมือเปรียบเทียบ apache (ab) ถือว่าความยาวของเนื้อหาการตอบสนองจะเท่ากันในระหว่างการทดสอบทั้งหมด มันเก็บความยาวเนื้อหาของการตอบสนองครั้งแรก หากคำตอบใด ๆ เพิ่มเติมมีความยาวเนื้อหาต่างกันจะส่งผลให้ "ความยาวล้มเหลว"

รายงานข้อผิดพลาด apache ต่อไปนี้ดูเหมือนจะยืนยันว่า: ASF Bug 42040

สรุป : หากคุณให้บริการเนื้อหาที่มีความยาวผันแปรใด ๆ คุณควรเพิกเฉยต่อคำขอประเภท ab นี้ที่ล้มเหลว

แก้ไข : ฉันเพิ่งสังเกตเห็นว่าabคำสั่งมีตัวเลือกใหม่ (อย่างน้อยสำหรับฉัน):

-l   Accept variable document length (use this for dynamic pages)

ฉันเห็นได้ในab เวอร์ชัน 2.3 <$ Revision: 1528965 $>แต่ไม่เห็นในab เวอร์ชัน 2.3 <$ Revision: 655654 $>ดังนั้นมันอาจจะถูกเพิ่มเร็ว ๆ นี้


4
สำหรับทุกคนใน Mac โอกาสที่รุ่น ab ของคุณล้าหลังและ -l จะไม่ใช้ คุณสามารถติดตั้งจากแหล่งที่มาหรือผ่าน homebrew แต่ "brew install ab" ไม่ทำงานเนื่องจากเป็นส่วนหนึ่งของแพ็คเกจ apache - คุณสามารถติดตั้งได้ด้วย "brew install homebrew / apache / ab"
netpoetica

8

ขออภัยที่จะตอบคำถามเก่าอีกครั้ง แต่เป็นคำถามแรกที่โผล่ขึ้นมาใน Google บางครั้งข้อผิดพลาดความยาวที่รายงานโดย ab อาจเกิดจากปัญหาจริง: หากการเชื่อมต่อถูกปิดฝั่งเซิร์ฟเวอร์ก่อนจำนวนไบต์ทั้งหมดที่ประกาศในส่วนหัวความยาวเนื้อหาไม่ได้รับโดยไคลเอ็นต์ ที่สามารถเกิดขึ้นได้หากมีฝ่ายอื่น ๆ ระหว่างลูกค้าและเซิร์ฟเวอร์เช่นซื่อๆโหลดบาลานเซอร์แบบไร้เดียงสา (กรณีของฉัน)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.