ดิสก์ I / O สูงเมื่อใช้แคช


9

ไม่กี่วันที่ผ่านมาฉันสังเกตเห็นว่าดิสก์ I / O รอและกิจกรรมดิสก์ลดลง (ซึ่งยอดเยี่ยม) จากนั้นฉันก็สังเกตเห็นว่าแคชของฉันเต็ม (*) และแยกส่วน จากนั้นฉันล้างแคช หลังจากนั้นเวลาแฝงดิสก์และกิจกรรมดิสก์เพิ่มขึ้นถึงระดับก่อนหน้า (ซึ่งไม่ดี)

IOtop แสดงว่า [jbd2 / sda2-8] และ [flush-8: 00] อยู่ด้านบนของการใช้ดิสก์เสมอ นี่คือ Dell R210, ฮาร์ดแวร์ RAID 1 (H200) ที่มีหน่วยความจำฟรีจำนวนมาก (รวม 16 GB ซึ่งประมาณ 8 GB เป็นบัฟเฟอร์ / แคช)

(*) แคชคือ APC opcode cache สำหรับ PHP ซึ่งจะช่วยลดการเข้าถึงดิสก์สำหรับการประมวลผลสคริปต์ PHP แคชเต็มและแยกส่วนเพราะมันรวมไฟล์จากอินสแตนซ์การพัฒนา เมื่อฉันสังเกตเห็นว่าฉันกรองพวกเขาออก

คำถามคือ: ทำไมดิสก์ I / O เพิ่มขึ้นเมื่อทางทฤษฎีควรลดลง? ด้านล่างนี้คือกราฟบางส่วนจาก munin แคชเต็มจาก 6 กุมภาพันธ์ถึง 8

ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่ APC cache ไม่เป็นไร

เปลี่ยนหลังจากฉันแสดงความคิดเห็น apc.mmap_file_mask ตามที่บอกโดย @ cyberx86

ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่

และหลังจากนั้นสองสามวันhttps://serverfault.com/a/362152/88934


2
กราฟนั้นไม่แสดงการเพิ่มขึ้นของ IO
psusi

1
หากคุณใช้การจับคู่หน่วยความจำที่สำรองไฟล์ (เช่นapc.mmap_file_mask=/tmp/apc.XXXXXX) คุณอาจเห็น I / O ที่ยกระดับ ลองตั้งค่าapc.mmap_file_maskให้ใช้หน่วยความจำที่แบ่งใช้ (เช่น/apc.shm.XXXXXX) หรือ/dev/zero(หน่วยความจำ mmapped แบบไม่ระบุชื่อ)
cyberx86

1
@psusi จาก 6 กุมภาพันธ์ 12: 00-08: 00 8: 00 มันต่ำแล้วเพิ่มขึ้น
jcisio

@ cyberx86 ฉันเพิ่งจะเปลี่ยนมัน (แสดงความคิดเห็นว่าบรรทัดนั้นเพื่อใช้หน่วยความจำ mmapped แบบไม่ระบุชื่อ) และดูเหมือนว่าช่วยได้ ฉันจะตรวจสอบอีกไม่กี่นาทีเพื่อดู ขอบคุณ
jcisio

2
@psusi มี / มีปัญหาหลายอย่างที่ฉันสามารถดำเนินการต่อได้เท่านั้นไม่อธิบาย: 1 / APC cache miss (แต่ระบบปฏิบัติการ cache hit สำหรับไฟล์ PHP เหล่านั้นดังนั้นดิสก์ I / O ที่น้อยมากจึงรอเวลาน้อยลง แต่ใช้เวลาเฉลี่ย I / O มากขึ้น ซึ่งการทำธุรกรรม MySQL InnoDB ส่วนใหญ่กระทำ) 2 / APC cache hit แต่ APC ใช้ไฟล์ (จากนั้น OS แคชพลาดไม่รู้ว่าทำไม) 3 / สั้น ๆ คำถามของฉันคือ "เมื่อแคชทำงานไม่ดีมี (เกือบ) ไม่มีดิสก์ I / O "- สิ่งที่คุณพูดนั้นตรงกันข้ามอย่างสิ้นเชิง
jcisio

คำตอบ:


10

หากคุณใช้การแมปหน่วยความจำที่สำรองไฟล์ (เช่นapc.mmap_file_mask=/tmp/apc.XXXXXX) คุณอาจเห็น I / O ที่ยกระดับ

ลองตั้งค่าapc.mmap_file_maskให้ใช้หน่วยความจำที่แบ่งใช้ (เช่น/apc.shm.XXXXXX) หรือ/dev/zero(หน่วยความจำ mmapped แบบไม่ระบุชื่อ) การตั้งค่าที่ไม่ได้กำหนดไว้เป็นค่าเริ่มต้นเป็นการใช้หน่วยความจำ mmapped แบบไม่ระบุชื่อ

โดยปกติแล้วไฟล์ mmapped นั้นเป็นสิ่งที่ยอดเยี่ยม:

  • เมื่อเทียบกับการจัดเก็บบางอย่างในหน่วยความจำไฟล์ mmapped มักต้องการหน่วยความจำน้อยกว่า
  • เมื่อเทียบกับการบันทึกบางอย่างลงในไฟล์ไฟล์ที่แมปจะต้องใช้ดิสก์ I / O น้อยกว่า (เนื่องจากสามารถรวมการเขียนไว้ด้วยกันได้)

อย่างไรก็ตามเมื่อเปรียบเทียบกับการจัดเก็บบางอย่างไว้ในหน่วยความจำล้วนมีการเพิ่ม I / O - อย่างมากดังนั้นเมื่อไฟล์มีการเปลี่ยนแปลงอย่างต่อเนื่อง ข้อเสียของการไม่ใช้ไฟล์ mmapped คือการขาดการคงอยู่ - แคชของคุณจะไม่สามารถรีสตาร์ทได้เนื่องจากจะถูกเก็บไว้ในหน่วยความจำเท่านั้น

บางคนอาจแนะนำว่าในขณะที่แคชกำลังเติมและทำให้เสถียร แต่มันก็อยู่ระหว่างการเปลี่ยนแปลงส่วนใหญ่ซึ่งจะต้องเขียนลงดิสก์อย่างต่อเนื่อง เมื่อแคชเต็มแล้ว ttl สำหรับแต่ละวัตถุจะชะลออัตราที่ข้อมูลในแคชถูกหมุนลดการเปลี่ยนแปลงและลดการเขียนดิสก์


4

หลังจากสองสามวันตอนนี้ฉันต้องการกลับมาพร้อมกราฟบางอย่าง การเปลี่ยนแปลงช่วยให้สถานการณ์ดีขึ้นมาก มันลดทุกอย่างยกเว้นเวลาการให้บริการของ IO (ฉันคิดว่าเป็นเพราะไม่มีไฟล์ PHP ขนาดเล็กอ่านอีกต่อไปซึ่งราคาถูก)

ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่

โหลดเซิร์ฟเวอร์ (มันค่อนข้างต่ำอยู่แล้วดังนั้นฉันไม่ได้ค้นพบการเปลี่ยนแปลง)

ป้อนคำอธิบายรูปภาพที่นี่


คุณช่วยระบุการเปลี่ยนแปลงที่คุณทำไว้ได้ไหม?
Mircea Vutcovici

อ่านความคิดเห็นของคำถามและคำตอบที่ยอมรับได้ ฉันแสดงความคิดเห็นapc.mmap_file_mask=/tmp/apc.XXXXXX
jcisio

เฮ้ขอโทษที่รบกวนคุณ คุณเคยเห็นผลข้างเคียงใด ๆ จากการแสดงความคิดเห็นในบรรทัด mmap_file_mask หรือไม่? ฉันเห็นปัญหาเดียวกัน ... และนี่แก้ไขปัญหาการใช้งาน I / O ของฉันได้อย่างชัดเจน แต่ฉันสงสัย ... ถ้าไม่มีอะไรจะพัง! ขอบคุณ!
Jorge Leandro Perez

ฉันไม่มีปัญหาใด ๆ ที่แสดงความคิดเห็นในบรรทัดนั้น
jcisio
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.