หนึ่งใน ไฟล์เซิร์ฟเวอร์ การรัน Windows Server 2008 R2 พบปัญหาการโหลด RAM สูง ส่งผลให้เกิดปัญหากับประสิทธิภาพของเซิร์ฟเวอร์และแอปพลิเคชัน ปรากฎว่าหน่วยความจำล้นโดย แคชไฟล์ระบบ มีระบบไฟล์ ข้อมูลเมตา . ปัญหาอาจส่งผลต่อเซิร์ฟเวอร์ไฟล์ทั้งหมดที่มีไฟล์จำนวนมากที่ผู้ใช้เข้าถึงได้ เป็นสิ่งสำคัญที่สุดสำหรับรุ่น x64 Windows ซึ่งขนาดของไฟล์ข้อมูลเมตาในหน่วยความจำสามารถขยายได้เกือบเท่ากับขนาด RAM ทั้งหมด
โหลด RAM สูงบน Windows File Server
ปัญหาปรากฏดังนี้:ในตัวจัดการงาน เราเห็นว่าหน่วยความจำกายภาพกำลังยุ่งอยู่โดย 95-99 %.
ใน กระบวนการ แท็บไม่มีกระบวนการรั่วไหลใด ๆ ที่มีการใช้หน่วยความจำสูงผิดปกติ นอกจากนี้ หากคุณรวมค่าหน่วยความจำโดยประมาณที่ใช้โดยกระบวนการทั้งหมด คุณจะไม่ได้รับหน่วยความจำกายภาพ 50% ที่คุณมีบนเซิร์ฟเวอร์ด้วยซ้ำ กินความทรงจำแล้วได้อะไร?
ข้อมูลจริงเกี่ยวกับการใช้ RAM สามารถรับได้โดยใช้ยูทิลิตี้ขนาดเล็ก – RAMMap (โดย Mark Russinovich) ดาวน์โหลดไฟล์เก็บถาวรที่มีเครื่องมือและเรียกใช้ RAMMap.exe ด้วยสิทธิ์ของผู้ดูแลระบบ ใน จำนวนการใช้ แท็บ เราจะเห็นว่า Metafile กำลังใช้ RAM จำนวนมากที่สุด (ในกรณีของเรามันใช้ 11 จาก 25 GB ของ RAM เซิร์ฟเวอร์)
Metafile ใน Windows คืออะไร
metafile เป็นส่วนหนึ่งของแคชของระบบที่มีข้อมูลเมตา NTFS และใช้เพื่อเพิ่มประสิทธิภาพของระบบไฟล์เมื่อเข้าถึงไฟล์ ข้อมูลเมตาของ NTFS รวมถึงข้อมูลของ MFT (Master File Table) สำหรับแต่ละไฟล์หรือโฟลเดอร์ที่เข้าถึงโดยผู้ใช้ จะมีการสร้างบล็อกที่เกี่ยวข้องอย่างน้อย 1 KB (บันทึกของแอตทริบิวต์ของแต่ละไฟล์คือ 1 KB และแต่ละไฟล์มีแอตทริบิวต์อย่างน้อยหนึ่งรายการ) ใน metafile ดังนั้น ในไฟล์เซิร์ฟเวอร์ที่มีไฟล์จำนวนมาก ขนาด metafile (แคช NTFS) อาจเกินหลายสิบกิกะไบต์
เป็นไปไม่ได้ที่จะปิดการใช้งานแคชนี้หรือจัดการโดยใช้เครื่องมือ Windows ในตัว วิธีแก้ปัญหา คุณสามารถเพิ่มขนาดของหน่วยความจำบนเซิร์ฟเวอร์ได้ แต่ไม่สามารถทำได้เสมอไป
หากต้องการเพิ่มหน่วยความจำ คุณสามารถรีสตาร์ทเซิร์ฟเวอร์ได้ แต่ในบางครั้ง ขนาดของเมตาไฟล์ในหน่วยความจำจะเริ่มเพิ่มขึ้นอย่างไม่น่าเชื่อ
ตัวอย่างเช่น คุณสามารถประมาณขนาดของ MFT โดยใช้เครื่องมืออื่นโดย Russinovich – ntfsinfo . ในกรณีของเรา ขนาดของ MFT บนดิสก์ 2 TB คือ 13 GB
วิธีล้างเมตาไฟล์อย่างรวดเร็ว
RAMMap ช่วยให้ล้างหน่วยความจำที่ใช้อย่างรวดเร็วจากขยะ MFT โดยไม่ต้องรีสตาร์ทเซิร์ฟเวอร์ ในการดำเนินการ ให้เลือก ว่าง -> ล้างชุดการทำงานของระบบ ในเมนู
หลังจากนั้น ขนาดของเมตาไฟล์ในหน่วยความจำก็ลดลงหลายสิบเท่า และเปอร์เซ็นต์ของการใช้ RAM โดย CPU ลดลงจาก 95% เป็น 26%
ข้อเสียเปรียบหลักของวิธีนี้คือการหักบัญชีด้วยตนเองและไม่สามารถทำได้โดยอัตโนมัติ
บริการแคชแบบไดนามิกเพื่อจัดการแคชไฟล์
วิธีแก้ปัญหาที่สำคัญกว่าของการโหลดหน่วยความจำสูงโดย metafile ระบบไฟล์คือการติดตั้ง ไดนามิก แคช บริการ ( https://www.microsoft.com/en-us/download/details.aspx?id=9258) บริการนี้ช่วยให้จัดการพารามิเตอร์ของแคช MFT เฉพาะโดยใช้ API ของระบบ
สำคัญ ใช้วิธีแก้ปัญหานี้เฉพาะเมื่อเกิดปัญหาที่อธิบายไว้ข้างต้น การติดตั้งบริการนี้ไม่ใช่วิธีแก้ปัญหาสากลสำหรับสาเหตุอื่นของการใช้หน่วยความจำสูงบนเซิร์ฟเวอร์ของคุณการติดตั้ง DynCache ค่อนข้างง่าย (มีคำแนะนำโดยละเอียดในไฟล์เก็บถาวร)
- คัดลอกไฟล์ DynCache.exe ถึง %SystemRoot%\System32 โฟลเดอร์
- สร้าง DynCache บริการ โดยใช้คำสั่งนี้:
sc create DynCache binpath= %SystemRoot%\System32\DynCache.exe start= auto type= own DisplayName= "Dynamic Cache Service"
- นำเข้า DynCache.reg ไปยังรีจิสทรี (มีค่าเริ่มต้น)
- เปลี่ยนค่าของรีจิสเตอร์คีย์ต่อไปนี้:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DynCache\Parameters
- MaxSystemCacheMBytes :4096 (dec) – ขนาดแคชสูงสุด (Mb)
- MinSystemCacheMBytes :100 (ธ.ค.) – ขนาดแคชขั้นต่ำ (MB)
หมายเหตุ . ต้องแก้ไขการตั้งค่าเหล่านี้และการตั้งค่าบริการ DynCache อื่นๆ ตามขนาด RAM โหลดของเซิร์ฟเวอร์ ประสิทธิภาพที่ต้องการ ฯลฯ ตามกฎแล้ว ไม่แนะนำให้ตั้งค่าขนาดแคชมากกว่าครึ่งหนึ่งของ RAM จริงที่ติดตั้งบนเซิร์ฟเวอร์ หลังจากทำการเปลี่ยนแปลงแล้ว คุณไม่จำเป็นต้องรีสตาร์ท DynCache เนื่องจากการเปลี่ยนแปลงทั้งหมดจะถูกนำไปใช้แบบไดนามิก
- เรียกใช้บริการโดยใช้คำสั่งนี้:
sc start DynCache
ในกรณีของเรา หลังจากติดตั้งบริการ DynCache แล้ว การใช้หน่วยความจำโดย metafile หยุดรับมากกว่า 4 GB ที่เราตั้งไว้ ผู้ใช้ไม่ได้รายงานปัญหาด้านประสิทธิภาพใด ๆ ในไฟล์เซิร์ฟเวอร์