คู่มือเกมแลค › L11 ดิสก์
ดิสก์เต็ม Disk full
ID สาเหตุ dk-full · ผู้รับผิดชอบหลัก อินฟราเซิร์ฟเวอร์ (ทีมอินฟรา) · ร่วมกับ อินฟรา DB (ทีมอินฟรา), พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม)
เปิดการ์ดในฉบับหลักที่มีภาพและการทดลอง →
ถ้า log และ dump สะสมจนดิสก์เต็ม การเขียนจะล้มเหลว และถ้าไม่ได้เตรียมรับมือไว้ เซิร์ฟเวอร์จะล่ม
ทำไม log, dump และไฟล์ชั่วคราวสะสมจนถึง 100% → ผลคือ เขียนไม่สำเร็จ ถ้าไม่มีการจัดการข้อผิดพลาดจะแครช ถ้ามีก็เซฟไม่สำเร็จ → บนหน้าจอ หลุด, ความคืบหน้าถูกโรลแบ็ค
อาการ หลุด , กดไม่ติด/โรลแบ็ค
ปัจจัย การหยุดชะงัก
ใครเจอ ทั้งเซิร์ฟเวอร์
เกิดเมื่อไร ยิ่งเปิดไว้นานยิ่งเป็น
ผู้รับผิดชอบ ผู้รับผิดชอบหลัก อินฟราเซิร์ฟเวอร์ (ทีมอินฟรา) · ร่วมกับ อินฟรา DB (ทีมอินฟรา), พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม)
งานฝั่งทีมพัฒนาเกม จัดการกรณีเขียนไม่สำเร็จให้ลองเซฟใหม่และแจ้ง alert แทนการแครช, ลด log และ dump ที่ไม่จำเป็น
งานฝั่งทีมอินฟรา เครื่องเซิร์ฟเวอร์/OS: ทำ log rotation, ตั้ง alert พื้นที่ดิสก์, แยกดิสก์ log กับดิสก์ข้อมูล เครื่อง DB: เฝ้าดูไม่ให้ transaction log ของ DB (WAL, binlog) สะสมเพราะ replication หยุดหรือขาดการสำรอง log
บนกราฟ ค่อย ๆ สูงขึ้น · อัตราการใช้พื้นที่ดิสก์
จุดที่ต้องดู อัตราการใช้พื้นที่จาก df -h และอัตราการใช้ inode จาก df -i และหาข้อผิดพลาด ENOSPC ใน log ของเซิร์ฟเวอร์และ DB ฝั่ง DB ดู slot ที่ active เป็น false ใน pg_replication_slots ของ PostgreSQL, จำนวนและขนาดไฟล์จาก SHOW BINARY LOGS ของ MySQL, log_reuse_wait_desc ใน sys.databases ของ SQL Server และ FreeStorageSpace ของ RDS สัญญาณว่าใช่ อัตราการใช้พื้นที่ค่อย ๆ สูงขึ้นตลอดหลายวัน ช่วงที่แตะ 100% ตรงกับช่วงที่แครชหรือเซฟไม่สำเร็จ และมี ENOSPC ใน log สัญญาณว่าไม่ใช่ พื้นที่ยังเหลือพอแต่เขียนไม่สำเร็จ: น่าจะเป็นสาเหตุอื่น เช่น สิทธิ์ (permission) หรือขีดจำกัดขนาดไฟล์ วิธีตรวจ ใช้เครื่องมือฝั่งอินฟรา (ไม่ต้องใช้โค้ดเกม)
รายละเอียดเพิ่มเติม transaction log ของ DB (WAL, binlog ฯลฯ) จะไม่ถูกลบและสะสมไปเรื่อย ๆ ถ้า replica หยุดหรือการสำรอง log ขาดไป ถ้าดิสก์นี้เต็ม การเขียนทั้งหมดของ DB จะหยุด การเซฟและการเทรดจึงล้มเหลวพร้อมกันทั้งหมด
แหล่งอ้างอิง write(2) — Linux manual page Linux man-pages ถ้าอุปกรณ์ไม่มีพื้นที่เหลือ การเขียนจะล้มเหลวด้วยข้อผิดพลาด ENOSPC Monitoring Disk Usage (PostgreSQL Documentation) PostgreSQL ถ้าดิสก์ของ WAL เต็ม เซิร์ฟเวอร์ DB อาจ panic และปิดตัว Log-Shipping Standby Servers (PostgreSQL Documentation) PostgreSQL replication slot จะไม่ลบ WAL จนกว่า replica จะรับไป จึงอาจใช้พื้นที่ pg_wal จนเต็ม (จำกัดด้วย max_slot_wal_keep_size) Troubleshoot a full transaction log (SQL Server Error 9002) Microsoft SQL Server ถ้า log เต็ม DB จะอ่านได้อย่างเดียวและแก้ไขไม่ได้, สาเหตุที่พบบ่อยที่ขวางการล้าง log คือขาดการสำรอง log, replication lag และทรานแซกชันที่ยาว, ดูว่าอะไรขวางอยู่ได้จาก log_reuse_wait_desc ใน sys.databases df(1) — Linux manual page coreutils ปริมาณการใช้แยกตามไฟล์ซิสเต็ม, -i แสดงการใช้ inode แทนบล็อก pg_replication_slots (PostgreSQL Documentation) PostgreSQL active: slot นี้กำลัง stream อยู่หรือไม่, wal_status: WAL ที่ slot กันไว้เกิน max_wal_size แล้วหรือยัง SHOW BINARY LOGS Statement MySQL รายการไฟล์ binary log ของเซิร์ฟเวอร์และขนาดไฟล์ (File_size) Amazon CloudWatch metrics for Amazon RDS AWS FreeStorageSpace: พื้นที่จัดเก็บที่เหลือของอินสแตนซ์ DB
สาเหตุที่ควรดูประกอบ
ชั้นเดียวกัน: L11 ดิสก์
สาเหตุจากชั้นอื่นที่ทำให้เกิดอาการเดียวกัน (หลุด)
ดูการ์ดในฉบับหลักที่มีภาพและการทดลอง