โดยพบปัญหาว่าทดสอบแค่ 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
No comments:
Post a Comment