한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

คู่มือเกมแลค › 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 จะหยุด การเซฟและการเทรดจึงล้มเหลวพร้อมกันทั้งหมด

แหล่งอ้างอิง

  1. write(2) — Linux manual page Linux man-pages
    ถ้าอุปกรณ์ไม่มีพื้นที่เหลือ การเขียนจะล้มเหลวด้วยข้อผิดพลาด ENOSPC
  2. Monitoring Disk Usage (PostgreSQL Documentation) PostgreSQL
    ถ้าดิสก์ของ WAL เต็ม เซิร์ฟเวอร์ DB อาจ panic และปิดตัว
  3. Log-Shipping Standby Servers (PostgreSQL Documentation) PostgreSQL
    replication slot จะไม่ลบ WAL จนกว่า replica จะรับไป จึงอาจใช้พื้นที่ pg_wal จนเต็ม (จำกัดด้วย max_slot_wal_keep_size)
  4. Troubleshoot a full transaction log (SQL Server Error 9002) Microsoft SQL Server
    ถ้า log เต็ม DB จะอ่านได้อย่างเดียวและแก้ไขไม่ได้, สาเหตุที่พบบ่อยที่ขวางการล้าง log คือขาดการสำรอง log, replication lag และทรานแซกชันที่ยาว, ดูว่าอะไรขวางอยู่ได้จาก log_reuse_wait_desc ใน sys.databases
  5. df(1) — Linux manual page coreutils
    ปริมาณการใช้แยกตามไฟล์ซิสเต็ม, -i แสดงการใช้ inode แทนบล็อก
  6. pg_replication_slots (PostgreSQL Documentation) PostgreSQL
    active: slot นี้กำลัง stream อยู่หรือไม่, wal_status: WAL ที่ slot กันไว้เกิน max_wal_size แล้วหรือยัง
  7. SHOW BINARY LOGS Statement MySQL
    รายการไฟล์ binary log ของเซิร์ฟเวอร์และขนาดไฟล์ (File_size)
  8. Amazon CloudWatch metrics for Amazon RDS AWS
    FreeStorageSpace: พื้นที่จัดเก็บที่เหลือของอินสแตนซ์ DB

สาเหตุที่ควรดูประกอบ

ชั้นเดียวกัน: L11 ดิสก์

สาเหตุจากชั้นอื่นที่ทำให้เกิดอาการเดียวกัน (หลุด)

ดูการ์ดในฉบับหลักที่มีภาพและการทดลอง