Score:0

จะสอบถามเคอร์เนล linux ได้อย่างไรว่าการดำเนินการที่เกี่ยวข้องกับการจัดเก็บข้อมูลกำลังเรียกใช้ในระดับของคอนโทรลเลอร์ FS / block layer / SATA อย่างไร

ธง cn

ในบางครั้ง เซิร์ฟเวอร์ Linux LAMP ของเรา (ที่ใช้ PHP-FPM, XFS บน thin LVM บน HW RAID, Centos8) จะไม่สามารถเข้าถึงได้และหยุดตอบสนองต่อคำขอ HTTP(S)

จากการบันทึกแบบรวมศูนย์ เราพบว่าในกรณีเหล่านั้น ค่าเฉลี่ยของโหลดจะเพิ่มขึ้นเป็นร้อยอย่างรวดเร็ว ในขณะที่กระบวนการจำนวนมากขึ้นเรื่อยๆ (systemd-journald, กระบวนการ php, เคอร์เนล xfs/dm threads...) เข้าสู่สถานะ D จากข้อมูลของ iostat และ pidstat CPU และดิสก์ไม่ได้ถูกโหลดมากนัก ในขณะที่ค่าเฉลี่ยของโหลดอยู่ที่ประมาณ 170 ซึ่งค่อนข้างแปลก จากเอาต์พุต htop/ps ไม่มีกระบวนการอันธพาลกลุ่มเดียวหรือกลุ่มเดียวที่จะอธิบายพฤติกรรมนี้ได้ เป็นเพียงกระบวนการมาตรฐานที่ดูเหมือนจะพบกับ "สิ่งกีดขวาง" บางอย่าง

สิ่งที่แปลกเพียงอย่างเดียวของการตรวจสอบดิสก์คือในระหว่างเหตุการณ์โอเวอร์โหลดเหล่านั้น iostat รายงาน w_await ค่อนข้างสูงเป็นระยะสำหรับพาร์ติชัน /var (2500-5000ms ในขณะที่พาร์ติชันอื่นๆ เช่น /var/log, /var/lib/mysql ส่วนใหญ่ไม่ผ่าน 10ms). พาร์ติชันนี้ควรเงียบเป็นส่วนใหญ่ ดังนั้นจึงไม่ชัดเจนว่าทำไม iostat จึงรายงาน w_await ครั้งใหญ่ที่นั่น

ทางออกเดียวคือเปิดวงจรเซิร์ฟเวอร์

สิ่งนี้เกิดขึ้นในสองเซิร์ฟเวอร์ที่เป็นประเภทเดียวกัน ไม่เคยเกิดขึ้นบนเซิร์ฟเวอร์อื่น ดูเหมือนว่าจะเป็นความผิดปกติของ FS/block layer/controller/disk กระบวนการจำนวนมากเริ่มรอดิสก์หรืออย่างอื่นในเคอร์เนลอย่างกระทันหัน แต่จากข้อมูลของ iotop/iostat ดิสก์ไม่ได้ทำอะไรมาก

มีวิธีการสืบค้น Linux kernel FS/block layer/controller driver ว่าพวกเขากำลังทำอะไรกับที่เก็บข้อมูลและในนามของกระบวนการใด เครื่องมือมาตรฐานเช่น iotop/iostat บอกฉันเฉพาะชื่อกระบวนการที่แอ็คทีฟของ I/O และกิจกรรมของพาร์ติชันดิสก์ แต่ไม่รู้ว่ากระบวนการใดเข้าถึงพาร์ติชันดิสก์ใดและสิ่งที่พวกเขากำลังทำอยู่

Wilson Hauck avatar
jp flag
การโพสต์หน้าแรกของ htop จะเป็นข้อมูลที่ค่อนข้างดี
cn flag
เป็นเรื่องยากที่จะเข้าใจ เนื่องจากการโอเวอร์โหลดเกิดขึ้นเร็วมาก และจากนั้นจึงไม่สามารถเข้าสู่ระบบได้ อย่างไรก็ตาม จากบันทึกของเอาต์พุต ps และ iostat ของเรา เป็นที่ชัดเจนว่าทั้ง CPU และดิสก์ไม่ได้รับผลกระทบใดๆ ผู้บริโภค CPU และดิสก์ที่ยิ่งใหญ่ที่สุดคือ MariaDB แต่ดูเหมือนจะไม่ใช่สาเหตุเนื่องจากบันทึกของคำสั่ง SQL "แสดงรายการกระบวนการทั้งหมด" การแสดงข้อความค้นหาที่รันนั้นง่ายมาก หรือไม่มีเลย (รายการกระบวนการคิวรีว่างเปล่า)
Wilson Hauck avatar
jp flag
โปรดโพสต์ htop และแสดงรายการกระบวนการทั้งหมด เมื่อไหร่ก็ได้ ไม่ว่าจะยุ่งหรือไม่ว่าง ขอบคุณ
Score:2
ธง ua

ในสถานการณ์เช่นนี้ ฉันพบว่ามันช่วยเร่งจำนวนการเชื่อมต่อให้สูงขึ้นในสแต็ก

เมื่อมากกว่าพูด 100 คล่องแคล่ว กระบวนการต่างๆ กำลังดำเนินไป พวกเขาสะดุดกันเอง พวกเขากำลังแย่งชิงทรัพยากร (CPU ฯลฯ) ผลสุทธิก็คือว่า ทั้งหมด กระบวนการทำงานช้าลง บางครั้งถึงจุดที่คุณรู้สึกว่าทางออกเดียวคือการรีบูตเซิร์ฟเวอร์

ในกรณีของ MariaDB ฉันแนะนำให้เปิดสโลว์ล็อก เพื่อให้คุณสามารถระบุการสืบค้นที่มีผลกระทบต่อระบบมากที่สุด แล้วเร่งความเร็วขึ้น หากคุณต้องการความช่วยเหลือ ให้ระบุแบบสอบถาม อธิบายและสร้างตาราง มากกว่า: http://mysql.rjweb.org/doc.php/mysql_analysis#slow_queries_and_slowlog

การเร่งการค้นหาสองสามรายการมีแนวโน้มที่จะลด 170 Load Average และ I/O ซึ่งจะช่วยบรรเทาปัญหาคอขวดได้

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา