Thursday, May 18, 2006

Rail - load testing

คุณ Revolution ถามเกี่ยวกับเรื่อง performance มา
โดยพบปัญหาว่าทดสอบแค่ 100 concurrent connection ก็เจอ Error 500 ซะแล้ว

ผมก็เลยทดลองดูบ้าง
โดยกำหนดสถานะการณ์เป็น 2 แบบคือ
  • 100 request รุมเข้าไปภายใน 1 วินาที โดยมีการกระจายตัวแบบ Gaussian
  • เหมือนข้อแรก แต่ยิงติดต่อกัน 3 วินาที (300 request)

UPDATE - page ที่ใช้ทดสอบเป็น scaffold page ในส่วนของ list method
โดยดึง data จาก mysql โดยในเบื้องต้น ยังไม่สนเรื่อง ขนาดของ Database

เครื่องที่ใช้ทดสอบคือ
  • Laptop Compaq Presario 2545AP
    cpu pentium 4 2.6GHz, Ram 1 GB.
  • Apple G5, Dual Cpu 1.8 GHz, Ram 1.25 GB


config ของ Fcgi กำหนดให้ start ไว้ 7 processes
<IfModule mod_fastcgi.c>
FastCgiIpcDir /tmp/fcgi_ipc
FastCgiServer /Library/WebServer/Documents/perf/dispatch.fcgi
-idle-timeout 60 -initial-env RAILS_ENV=production -processes 7
</IfModule>


ผลการทดสอบ (หน่วยเวลา เป็น millisec)
50% หมายความว่า request จำนวน 50 % response กลับมาภายในเวลาที่ระบุ


Load Server 50% 90%
=====================================================
100 request/1 sec/1 ครั้ง Laptop 2410 3473
100 request/1 sec/3 ครั้ง Laptop 238 9781
100 request/1 sec/1 ครั้ง g5 348 1202
100 request/1 sec/3 ครั้ง g5 274 3543


เท่าที่ทดลองมายังไม่พบ Error 500
, Error 500 น่าจะเกิดจาก Fastcgi ที่ทำงานเกินค่าที่กำหนดไว้ใน
idle-timeout
ถ้า apache พบว่ามี process ที่ทำงานเกิน ก็จะ assume ว่า
process นั้น crash ไปแล้ว และจะ return Error 500 กลับไปให้ user
ส่วน process fcgi ก็อาจจะถูก kill และ start ใหม่


Laptop - 7 Processes - 100 request - 1 Sec - 1 loop


Laptop - 7 Processes - 100 request - 1 Sec - 3 loop


G5 - 7 Processes - 100 request - 1 Sec - 1 loop


G5 - 7 Processes - 100 request - 1 Sec - 3 loop

Related link from Roti

No comments: