ค้นหาและแก้ไข Memory Leaks ใน Windows 11/10

หน่วย ความจำรั่ว(Memory Leak)คือการวางทรัพยากรที่ไม่ถูกต้องในโปรแกรมคอมพิวเตอร์เนื่องจากการจัดสรรหน่วยความจำผิดพลาด เกิดขึ้นเมื่อตำแหน่งRAMที่ไม่ได้ใช้งานยังคงไม่ถูกเผยแพร่ หน่วยความจำรั่วไม่ควรสับสนกับการรั่วไหลของพื้นที่ ซึ่งหมายถึงโปรแกรมที่ใช้RAMเกินความจำเป็น มีการกล่าวกันว่าหน่วยความจำรั่วในWindows 11/10/8/7เกิดขึ้นเมื่อหน่วยความจำไม่สามารถเข้าถึงได้แม้ว่าจะไม่ได้ใช้งานอยู่ก็ตาม

หน่วยความจำรั่วใน Windows 11/10

ก่อนที่คุณจะเริ่มต้น คุณควรรู้ว่าหน่วยความจำ(Memory)รั่วไหลเป็นปัญหาของซอฟต์แวร์ที่ต้องแก้ไข ตัวอย่างเช่น ในJava , JavaScript , C/C++, Windowsฯลฯ ไม่จำเป็นต้องเปลี่ยนRAMหรือฮาร์ดดิสก์ ทางกายภาพ

หน่วยความจำรั่วใน Windows 10

ทำไมมันแย่

เห็นได้ชัดว่าหน่วยความจำรั่วนั้นไม่ดีเพราะเป็นข้อบกพร่อง ข้อบกพร่องในระบบ แต่มาดูกันว่ามันส่งผลต่อระบบอย่างไร:

  1. เนื่องจากหน่วยความจำจะไม่ว่างแม้เมื่อไม่ได้ใช้งาน จึงส่งผลให้หน่วยความจำหมด
  2. ความอ่อนล้าของหน่วยความจำส่งผลให้เกิดอายุซอฟต์แวร์
  3. หน่วยความจำที่ลดลงทำให้เวลาตอบสนองเพิ่มขึ้นและประสิทธิภาพของระบบลดลง
  4. การรั่วไหลของหน่วยความจำที่ไม่ได้ตรวจสอบในท้ายที่สุดอาจนำไปสู่ความผิดพลาดของแอปพลิเคชัน

เพื่อระบุหน่วยความจำรั่ว โปรแกรมเมอร์จำเป็นต้องเข้าถึงซอร์สโค้ดของโปรแกรม

ค้นหาจุดรั่ว

เพื่อแก้ปัญหา เราต้องระบุมันก่อน ขั้นตอนพื้นฐานในการค้นหาหน่วยความจำรั่วคือ:

  1. การยืนยัน(Affirmation) : การพิจารณาว่ามีการรั่วไหลเกิดขึ้นหรือไม่.
  2. การค้นหาหน่วยความจำโหมดเคอร์เนลรั่ว(Finding Kernel-mode memory leak) : การค้นหาการรั่วที่เกิดจากส่วนประกอบไดรเวอร์โหมดเคอร์เนล
  3. การค้นหาหน่วยความจำรั่วในโหมดผู้ใช้(Finding User-mode memory leak) : การค้นหาการรั่วที่เกิดจากไดรเวอร์โหมดผู้ใช้หรือแอป

การจัดสรรหน่วยความจำ

มีโหมดต่างๆ ที่แอปพลิเคชันจัดสรรRAM หากไม่มีพื้นที่ว่างหลังการใช้งาน หน่วยความจำรั่วจะเกิดขึ้นโดยไม่คำนึงถึงโหมดการจัดสรร รูปแบบการจัดสรรทั่วไปบางรูปแบบ ได้แก่

  1. ฟังก์ชัน HealAlloc(HealAlloc)สำหรับการจัดสรรหน่วยความจำฮีป เทียบเท่ารันไทม์ C/C++ คือ malloc และใหม่
  2. ฟังก์ชัน VirtualAlloc(VirtualAlloc)สำหรับการจัดสรรโดยตรงจาก OS
  3. Kernel32 APIsเพื่อเก็บหน่วยความจำเคอร์เนลสำหรับแอป ตัวอย่าง(Example)CreateFile , CreateThread _ _
  4. User32 API และ Gdi32 API

ป้องกันการรั่วไหลของหน่วยความจำใน Windows

เราทุกคนรู้ดีว่าการป้องกันดีกว่าการรักษา ดังนั้นนี่คือวิธีป้องกันหน่วยความจำรั่ว

ติดตามนิสัย

หน่วยความจำรั่วใน Windows 10

คุณต้องจับตาดูการ ใช้ RAM ที่ผิดปกติ โดยโปรแกรมและแอปพลิเคชันแต่ละรายการ คุณสามารถไปที่Windows Task Managerได้โดยกดCTRL+SHIFT+ESCและเพิ่มคอลัมน์ เช่นHandles , User Objects , GDI Objectsเป็นต้น

ซึ่งจะช่วยให้คุณตรวจสอบการใช้ทรัพยากรได้อย่างง่ายดาย

อ่าน(Read) : ประเภทของหน่วยความจำในคอมพิวเตอร์คืออะไร?(What are the Types of Memory in a computer?)

เครื่องมือ ของ Microsoft(Microsoft)เพื่อวินิจฉัยการรั่วไหลของหน่วยความจำ

เครื่องมือต่างๆ วินิจฉัยการรั่วไหลของหน่วยความจำสำหรับโหมดการจัดสรรต่างๆ:

  1. Application Verifierวินิจฉัยการรั่วไหลของฮีป
  2. UMDH ( ส่วนประกอบของWindows Debugging Tools ) วินิจฉัยการรั่วไหลสำหรับแต่ละกระบวนการโดยการตรวจสอบการจัดสรรหน่วยความจำฮีป
  3. Trace Captureสำหรับการวิเคราะห์การใช้RAM อย่างละเอียด(RAM)
  4. Xperf จะติดตามรูปแบบการจัดสรรฮีพด้วย
  5. CRT Debug Heapไม่เพียงแต่ติดตามการจัดสรรฮีปเท่านั้น แต่ยังเปิดใช้งานแนวทางการเข้ารหัสเพื่อลดการรั่วไหล
  6. JavaScript Memory Leak Detectorดีบักหน่วยความจำรั่วในโค้ด

เคล็ดลับการใช้งาน

  1. ใช้เคอร์เนลHANDLEและตัวชี้อัจฉริยะอื่นๆ สำหรับ ทรัพยากร Win32และการจัดสรรฮีป
  2. รับ(Get)คลาสสำหรับการจัดการทรัพยากรอัตโนมัติสำหรับการจัดสรรเคอร์เนลจากไลบรารีATL มาตรฐาน C++ มีauto_ptrสำหรับการจัดสรรฮีป
  3. ห่อหุ้มพอยน์เตอร์อินเทอร์เฟซ COM(Encapsulate COM)ภายใน "ตัวชี้อัจฉริยะ" โดยใช้_com_ptr_tหรือ_bstr_tหรือ_variant_t
  4. ตรวจสอบ(Monitor)รหัส.NETสำหรับการใช้หน่วยความจำที่ผิดปกติ
  5. หลีกเลี่ยง(Avoid)เส้นทางทางออกหลายทางสำหรับฟังก์ชันเพื่อให้การจัดสรรเป็นอิสระจากตัวแปรในบล็อกส่วนใหญ่เมื่อสิ้นสุดฟังก์ชัน
  6. ใช้(Use)ข้อยกเว้นดั้งเดิมหลังจากปล่อยการจัดสรรทั้งหมดในบล็อก_finally ให้ว่างเท่านั้น (_finally)ล้อม(Wrap)กองทั้งหมดและจัดการการจัดสรรลงในตัวชี้อัจฉริยะเพื่อใช้ข้อยกเว้น C++
  7. เรียกใช้ ฟังก์ชัน PropVariantClear ทุกครั้ง(PropVariantClear)ก่อนที่จะเริ่มต้นใหม่หรือยกเลิกอ็อบเจ็กต์PROPVARIANT

แก้ไขปัญหา(Troubleshoot)หน่วยความจำรั่วในWindows

เช่นเดียวกับวิธีต่างๆ ในการป้องกันหน่วยความจำรั่ว มีหลายวิธีในการหยุดการรั่วไหลของหน่วยความจำ แต่ก่อนที่คุณจะเริ่ม อย่าลืมสร้างจุดคืนค่าระบบก่อน

1] ปิดกระบวนการและเริ่มต้นใหม่

หากคุณเห็นว่ากระบวนการที่ไม่จำเป็นใช้ RAM(RAM)มากเกินไปคุณสามารถสิ้นสุดกระบวนการในตัวจัดการ(Task Manager)งาน คุณจะต้องรีสตาร์ทอุปกรณ์เพื่อให้พื้นที่ว่างพร้อมใช้งานโดยกระบวนการอื่น หากไม่มี ปัญหาการรั่วไหลของหน่วยความจำ รีสตาร์ท(Restart)จะไม่ได้รับการแก้ไข กระบวนการหนึ่งที่มีข้อบกพร่องในการทำให้พีซี ช้าลงคือRuntime Broker ลองใช้ดูว่าการปิดใช้งานเพียงอย่างเดียวนั้นได้ผลหรือไม่

2] เครื่องมือวินิจฉัยหน่วยความจำ

การวินิจฉัยหน่วยความจำของ Windows

ในการเข้าถึงเครื่องมือวินิจฉัยหน่วยความจำ(Memory Diagnostic Tool) ภายใน สำหรับ Windows:

  1. บันทึกงานสำคัญทั้งหมดของคุณ
  2. กดWin + Rเพื่อเปิดหน้าต่างRun
  3. พิมพ์คำสั่งmdsched.exeในหน้าต่างRun
  4. รีสตาร์ทพีซี
  5. หลังจากรีสตาร์ทแล้ว ให้สแกนขั้นพื้นฐานหรือไปที่ ตัวเลือก ' ขั้นสูง(Advanced) ' เช่น ' ทดสอบผสม(Test mix) ' หรือ ' จำนวนผ่าน(Pass count) '
  6. กดF10เพื่อเริ่มการทดสอบ

สิ่งเหล่านี้ยังคงเป็นการแก้ไขชั่วคราว

3] ตรวจสอบการอัปเดตไดรเวอร์

อัปเดตซอฟต์แวร์ไดรเวอร์

ไดรเวอร์ที่ล้าสมัยทำให้เกิดการรั่วไหลของหน่วยความจำ อัพเดทไดรเวอร์ทั้งหมด :

  1. กดWin + Rแล้วเปิดหน้าต่างRun พิมพ์devmgmt.mscแล้วกดEnter จะพาคุณไปที่Device Manager(Device Manager)
  2. ตรวจสอบ(Check)ไดรเวอร์ที่ล้าสมัยและอัปเดตทั้งหมด
  3. สำหรับการอัปเดตที่คุณอาจพลาดไป ให้ตรวจสอบในWindows Update(Windows Update)

นี้เป็นเรื่องง่าย

4] เพิ่มประสิทธิภาพการทำงาน

ปรับประสิทธิภาพให้ดีที่สุด

การปรับ Windows สำหรับประสิทธิภาพจะจัดการทุกอย่างรวมถึงการจัดกำหนดการโปรเซสเซอร์และการใช้หน่วยความจำเพื่อหยุดการรั่วไหลของหน่วยความจำ ทำตามขั้นตอนเหล่านี้:

  1. คลิกขวาที่ ' พีซีเครื่องนี้(This PC) ' และเลือก การตั้งค่า ' ขั้นสูง(Advanced) ' ในบานหน้าต่างด้านซ้าย
  2. ภายใต้ แท็บ ' ขั้นสูง(Advanced) ' ไปที่ ' ประสิทธิภาพ(Performance) ' ตามด้วย ' การตั้งค่า(Settings) '
  3. ทำเครื่องหมายที่ ' ปรับเพื่อประสิทธิภาพที่ดีที่สุด(Adjust for best performance) ' แล้วคลิกตกลง(OK)
  4. รีสตาร์ท(Restart)และตรวจสอบว่าปัญหาได้รับการแก้ไขแล้วหรือไม่

หากวิธีแก้ปัญหาง่ายๆ นี้ไม่ได้ผล ให้ลองวิธีแก้ไขปัญหาถัดไป

5] ปิด การใช้งาน โปรแกรม(Programs)ที่ทำงานบนStartup

โปรแกรมเริ่มต้น

การปิดใช้งานโปรแกรมที่มีปัญหาเป็นวิธีเดียวที่จะกำจัดปัญหาหน่วยความจำรั่ว ไปที่Task Managerและปิดการใช้งานโปรแกรมสร้างปัญหา หากคุณไม่ทราบว่าโปรแกรมใดสร้างปัญหา ให้ทำดังนี้

  1. ไปที่ ' ตัวจัดการงาน(Task Manager) '
  2. ไปที่ ' เริ่มต้น(Startup) '
  3. ปิดใช้งานโปรแกรมเริ่มต้นที่(Disable the startup programs)คุณไม่จำเป็นต้องเรียกใช้โดยค่าเริ่มต้น

6] Defrag ฮาร์ดไดรฟ์

การจัดเรียงข้อมูลบนดิสก์

แม้ว่าWindows 10จะทำสิ่งนี้ให้คุณโดยอัตโนมัติ แต่คุณอาจต้องทำการDefrag ฮาร์ดไดรฟ์เป็นครั้งคราวเพื่อเพิ่มประสิทธิภาพ:

  1. ไปที่ ' พีซีเครื่องนี้(This PC) ' หรือ ' คอมพิวเตอร์ของฉัน(My Computer) '
  2. คลิกขวา(Right-Click)ที่ฮาร์ดไดรฟ์ระบบ (โดยปกติคือไดรฟ์ C:)
  3. ไปที่ ' เครื่องมือ(Tools) ' ใต้ ' คุณสมบัติ(Properties) ' และเลือก ' เพิ่มประสิทธิภาพ(Optimize) '
  4. เลือกไดรฟ์ที่จะ Defrag และเลือก ' วิเคราะห์(Analyze) '

รีสตาร์ทคอมพิวเตอร์หลังจากการแตกแฟรกเมนต์ใหม่

7] ไฟล์ ClearPage เมื่อปิดเครื่อง

ตอนนี้มันซับซ้อนขึ้น แต่อย่ากังวล ต่อไปนี้เป็นวิธีล้างไฟล์เพจเมื่อปิดเครื่องทุกครั้ง(clear the Page File at every shutdown) :

  • พิมพ์regeditในSearchเพื่อเรียกใช้Registry Editor(Registry Editor)
  • เข้าสู่เส้นทางนี้:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management
  • เปลี่ยนค่าของClearPageFileAtShutDown เป็น '1'( ClearPageFileAtShutDown to ‘1’.)
  • บันทึกการเปลี่ยนแปลงและรีสตาร์ท(Restart)อุปกรณ์

นี้ควรจะทำ อย่าลืมว่ากระบวนการปิดระบบจะใช้เวลาเพิ่มขึ้นเล็กน้อย

9] ปิดการใช้งาน Superfetch

บริการ Windows(Windows Service)นี้ปรับประสิทธิภาพการทำงานให้เหมาะสมโดยลดเวลาในการบู๊ต ช่วยให้Windowsจัดการการใช้RAM ชีวิต(Life)หลังปิดใช้งานSuperfetchไม่สะดวก แต่ทำถ้าคุณต้องการ อย่างน้อยก็ลองทำสิ่งนี้คนเดียวเพื่อแยกปัญหาออก:

  1. ค้นหาservices.mscและไปที่ Services Manager
  2. มองหา ' Superfetch ' และคลิกขวาเพื่อไปที่ ' Properties '
  3. เลือก ' หยุด(Stop) '
  4. ' ปิดใช้งาน(Disable) ' บริการจากเมนูแบบเลื่อนลงด้วย
  5. รีสตาร์ทพีซีและตรวจสอบว่าประสิทธิภาพดีขึ้นหรือไม่

เปิดใช้งาน Superfetch หากวิธีนี้ใช้ไม่ได้ผล

10] ตรวจสอบมัลแวร์

ใช้ซอฟต์แวร์ป้องกันไวรัสของบริษัทอื่นหรือWindows Defender ของ Windows 10 เพื่อสแกนและกำจัดมัลแวร์ ตรวจสอบ ให้(Make)แน่ใจว่าโปรแกรมป้องกันไวรัสได้รับการอัปเดตเพื่อรองรับระบบปฏิบัติการของคุณ เพื่อไม่ให้กลายเป็นสาเหตุของหน่วยความจำรั่ว

ทุกโซลูชันที่คุณอาจจำเป็นต้องค้นหาหรือป้องกันการรั่วไหลของหน่วยความจำอยู่ที่นี่ คุณสามารถอ่านเพิ่มเติมเกี่ยวกับการรั่วไหลของหน่วยความจำในMSDNและMicrosoft



About the author

ฉันเป็นผู้เชี่ยวชาญด้านการสนับสนุนลูกค้า windows 10/11/10 ที่มีประสบการณ์มากกว่า 5 ปี ฉันยังเป็นนักเล่นเกมตัวยงในช่วงไม่กี่ปีที่ผ่านมาและมีความสนใจอย่างมากใน xbox One จุดสนใจปัจจุบันของฉันคือการช่วยเหลือลูกค้าเกี่ยวกับปัญหาที่เกิดขึ้นกับระบบ windows 10 หรือ Windows 11 บ่อยครั้งผ่านการใช้เครื่องมือบริการลูกค้าของเรา เช่น การสนับสนุนคอลเซ็นเตอร์และความช่วยเหลือออนไลน์



Related posts