ทุกระบบมีขีดจำกัดว่าจะรอคำตอบได้นานแค่ไหน เมื่อเซิร์ฟเวอร์ตัวหน้าส่งงานไปให้ตัวหลังแล้วรอจนครบเวลาที่ตั้งไว้โดยยังไม่ได้คำตอบ มันจะเลิกรอและตอบผู้ใช้ด้วยรหัส 504
สิ่งที่คนมักทำเป็นอย่างแรกคือเพิ่มเวลารอให้นานขึ้น ซึ่งทำให้ error หายไปจริง แต่แทบไม่เคยเป็นทางแก้ที่ถูกต้อง บทความนี้อธิบายว่าทำไม และควรไปแก้ตรงไหนแทน
504 ต่างจาก 502 ยังไง
สอง error นี้เกิดในโครงสร้างเดียวกันคือมีเซิร์ฟเวอร์ตัวหน้าส่งงานต่อให้ตัวหลัง แต่ต่างกันที่ผลลัพธ์ 502 คือได้คำตอบกลับมาแล้วแต่ใช้ไม่ได้ หรือปลายสายถูกตัด ส่วน 504 คือไม่ได้คำตอบเลยจนหมดเวลา
ความต่างนี้ชี้ทิศทางการแก้คนละทาง 502 มักแปลว่าโปรเซสเบื้องหลังตายหรือตั้งค่าที่อยู่ผิด ส่วน 504 มักแปลว่าโปรเซสยังอยู่และยังทำงานอยู่ แต่ทำงานนั้นช้าเกินไป
| อาการ | 502 Bad Gateway | 504 Gateway Timeout |
|---|---|---|
| ปลายทางตอบไหม | ตอบ แต่คำตอบใช้ไม่ได้ หรือถูกตัดกลางคัน | ไม่ตอบเลยจนหมดเวลา |
| เกิดเร็วแค่ไหน | มักเกิดแทบจะทันที | ต้องรอจนครบเวลาที่ตั้งไว้ก่อน |
| สาเหตุที่พบบ่อย | โปรเซสเบื้องหลังไม่ทำงาน หรือชี้ที่อยู่ผิด | งานหนักผิดปกติ เช่น คิวรีช้า หรือรอ API ภายนอก |
งานแบบไหนที่มักทำให้เกิด 504
- คิวรีฐานข้อมูลที่ไม่มี index รองรับ ทำให้ต้องไล่อ่านทั้งตารางทุกครั้ง ยิ่งข้อมูลเยอะยิ่งช้าขึ้นเรื่อย ๆ
- การเรียก API ของบริการภายนอกที่ตอบช้า แล้วโค้ดของเราไม่ได้ตั้งเวลารอไว้เอง
- การอัปโหลดหรือประมวลผลไฟล์ขนาดใหญ่ผ่านคำขอปกติ แทนที่จะแยกไปทำเป็นงานเบื้องหลัง
- การส่งอีเมลจำนวนมากในคำขอเดียว เช่น กดส่งข่าวสารถึงสมาชิกทั้งหมดพร้อมกัน
- การสร้างรายงานสรุปที่ต้องรวมข้อมูลย้อนหลังหลายเดือนแบบสด ๆ ทุกครั้งที่เปิดหน้า
- งานนำเข้าหรือส่งออกข้อมูลก้อนใหญ่ที่ทำผ่านหน้าเว็บโดยตรง
ทำไมการเพิ่มค่า timeout ถึงไม่ใช่ทางแก้
การขยายเวลารอทำให้ error หายไปจากสายตา แต่ปัญหาที่แท้จริงยังอยู่ครบ งานที่ใช้เวลาสามสิบวินาทีก็ยังใช้สามสิบวินาทีเหมือนเดิม ต่างกันแค่ตอนนี้ผู้ใช้ต้องนั่งมองหน้าจอเปล่าจนครบแทนที่จะเห็น error
ที่แย่กว่านั้นคือทุกคำขอที่ค้างอยู่กินหนึ่งช่องของ worker ไปด้วย เมื่อขยายเวลารอ ช่องเหล่านั้นก็ถูกยึดไว้นานขึ้น คนอื่นที่เข้ามาพร้อมกันจะเริ่มเจอ 503 แทน เท่ากับเปลี่ยนปัญหาจากคนกลุ่มเดียวไปเป็นทั้งเว็บ
ค่า timeout ควรถูกมองเป็นสัญญาณเตือน ไม่ใช่ปุ่มปรับ ถ้ามีงานที่ชนเพดานเวลาบ่อย ๆ แปลว่างานนั้นไม่ควรทำในคำขอปกติตั้งแต่แรก
แก้ที่ต้นเหตุยังไง
ถ้าอาการหลักคือเว็บช้าทั้งเว็บ ไม่ใช่ค้างเฉพาะบางงาน อ่าน วิธีแก้เว็บโหลดช้า และถ้าอยากเข้าใจว่าฐานข้อมูลเป็นคอขวดตรงไหน อ่าน MySQL คืออะไร
- 1หาให้เจอก่อนว่าช้าที่ขั้นตอนไหน — เปิดการบันทึกคิวรีที่ช้ากว่าค่าที่กำหนด แล้วดูว่ามีคิวรีตัวไหนโผล่ซ้ำ ๆ
- 2เพิ่ม index ให้ตรงกับเงื่อนไขที่ใช้ค้นจริง ในหลายกรณีนี่คือการแก้จุดเดียวที่ลดเวลาจากหลายวินาทีเหลือหลักมิลลิวินาที
- 3ย้ายงานหนักออกไปทำเบื้องหลัง — ให้หน้าเว็บตอบทันทีว่ารับเรื่องแล้ว แล้วค่อยแจ้งผลเมื่อเสร็จ
- 4ตั้งเวลารอสำหรับการเรียก API ภายนอกในโค้ดของเราเอง อย่าปล่อยให้ปลายทางเป็นคนกำหนดว่าเว็บเราจะค้างนานแค่ไหน
- 5เก็บผลลัพธ์ที่คำนวณยากไว้ล่วงหน้า เช่น สร้างรายงานสรุปตอนกลางคืนแทนการคำนวณสดทุกครั้งที่เปิดหน้า
- 6ถ้าทำครบแล้วยังช้าเพราะข้อมูลโตขึ้นจริง ค่อยพิจารณาขยายสเปกเครื่อง
งานหนักขึ้นจนเครื่องเดิมรับไม่ไหว
VPS ของ Plusweb ให้ CPU และ RAM ที่กันไว้ให้คุณโดยเฉพาะ เลือกสเปกได้ตามงานจริง ทีมงานคนไทยดูแล 24 ชม.
คำถามที่พบบ่อย
504 เกิดจากเน็ตของเราช้าหรือเปล่า
ไม่ใช่ 504 ถูกส่งมาจากฝั่งเซิร์ฟเวอร์ หมายถึงเซิร์ฟเวอร์ตัวหน้ารอเซิร์ฟเวอร์อีกตัวจนหมดเวลา ไม่เกี่ยวกับความเร็วเน็ตของผู้ใช้ ถ้าเน็ตผู้ใช้มีปัญหาจริง เบราว์เซอร์จะแสดง error คนละแบบ เช่น ต่อไม่ติดหรือหมดเวลาเชื่อมต่อ
ตั้งค่า timeout เท่าไหร่ถึงเหมาะ
สำหรับหน้าเว็บทั่วไป ค่าประมาณ 30 ถึง 60 วินาทีก็เกินพอแล้ว เพราะงานปกติควรเสร็จในไม่กี่วินาที ถ้าต้องตั้งเกินกว่านี้เพื่อให้เว็บใช้งานได้ ให้ถือเป็นสัญญาณว่ามีงานที่ควรย้ายไปทำเบื้องหลัง มากกว่าที่จะเป็นเรื่องของค่าที่ตั้งไว้ต่ำเกิน
ใช้ CDN แล้วเจอ 504 หมายความว่าอะไร
หมายความว่า CDN ส่งคำขอไปยังเซิร์ฟเวอร์ต้นทางของคุณแล้วรอไม่ไหว ต้นตอยังอยู่ที่เซิร์ฟเวอร์ของคุณเหมือนเดิม CDN ช่วยได้เฉพาะไฟล์ที่แคชไว้ได้ ส่วนหน้าที่ต้องประมวลผลสดยังต้องวิ่งไปหาเครื่องต้นทางอยู่ดี
GUIDES
บทความที่เกี่ยวข้อง
อ่านต่อในหัวข้อใกล้เคียง
502 Bad Gateway คืออะไร? เข้าใจว่าใครคุยกับใครไม่รู้เรื่อง
502 ไม่ได้แปลว่าเว็บพัง แต่แปลว่าเซิร์ฟเวอร์สองตัวคุยกันไม่รู้เรื่อง บทความนี้อธิบายว่าใครคือ gateway ใครคือปลายทาง สาเหตุที่พบบ่อย และลำดับการไล่ตรวจที่ใช้ได้จริง
อ่านต่อ503 Service Unavailable คืออะไร? เมื่อเซิร์ฟเวอร์ยังอยู่แต่รับงานไม่ไหว
503 เป็น error ตัวเดียวในกลุ่ม 5xx ที่บางครั้งเป็นสิ่งที่เราตั้งใจให้เกิด บทความนี้อธิบายว่าเมื่อไหร่มันคือปัญหา เมื่อไหร่มันคือการทำงานที่ถูกต้อง และควรตั้งค่าอย่างไรตอนปิดปรับปรุง
อ่านต่อเว็บโหลดช้าเกิดจากอะไร? 8 สาเหตุยอดฮิต + วิธีแก้ให้เร็วขึ้น
เว็บช้าแค่ 1–2 วินาทีก็ทำให้คนกดปิดหนีและอันดับ SEO ตกได้ มาดูว่าอะไรทำให้เว็บช้า และแก้ยังไงให้กลับมาไวโดยไม่ต้องรื้อทำใหม่
อ่านต่อ