ดาวน์โหลดโปรแกรมฟรี
       
   สมัครสมาชิก   เข้าสู่ระบบ
THAIWARE.COM | ทิปส์ไอที
 

Memory Leak คืออะไร ? หน่วยความจำรั่วไหลเกิดจากอะไร ? ส่งผลอะไรบ้าง ?

Memory Leak คืออะไร ? หน่วยความจำรั่วไหลเกิดจากอะไร ? ส่งผลอะไรบ้าง ?
ภาพจาก : https://www.freepik.com/free-vector/semiconductor-isometric-design-concept_17962022.htm
เมื่อ :
|  ผู้เข้าชม : 1,929
เขียนโดย :
0 Memory+Leak+%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3+%3F+%E0%B8%AB%E0%B8%99%E0%B9%88%E0%B8%A7%E0%B8%A2%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1%E0%B8%88%E0%B8%B3%E0%B8%A3%E0%B8%B1%E0%B9%88%E0%B8%A7%E0%B9%84%E0%B8%AB%E0%B8%A5%E0%B9%80%E0%B8%81%E0%B8%B4%E0%B8%94%E0%B8%88%E0%B8%B2%E0%B8%81%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3+%3F+%E0%B8%AA%E0%B9%88%E0%B8%87%E0%B8%9C%E0%B8%A5%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3%E0%B8%9A%E0%B9%89%E0%B8%B2%E0%B8%87+%3F
A- A+
แชร์หน้าเว็บนี้ :

Memory Leak คืออะไร ? หน่วยความจำรั่วไหลเกิดจากอะไร ? ส่งผลอะไรบ้าง ?

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

บทความเกี่ยวกับ Memory อื่นๆ

แล้วปัญหานี้มันมีสาเหตุมาจากอะไรล่ะ ?

ส่วนมากแล้ว อาการนี้นั้นเกิดขึ้นจากปัญหาที่ถูกเรียกว่า "หน่วยความจำรั่ว (Memory Leak)" ซึ่งในบทความนี้เราอยากจะมาอธิบายว่ามันคืออะไร ? สาเหตุมาจากไหนกันแน่ ?

เนื้อหาภายในบทความ

หน่วยความจำรั่ว คืออะไร ? (What is Memory Leak ?)

ก่อนอื่น เพื่อให้เข้าใจเรื่องของ หน่วยความจำรั่ว (Memory Leak) ได้ง่ายขึ้น เราจะขอยกตัวอย่างเปรียบเทียบ เพื่อให้เห็นภาพได้ง่ายขึ้น

ลองจินตนาการว่าคอมพิวเตอร์ของเราคือเมือง ๆ หนึ่ง ถนนที่อยู่ภายในเมืองคือหน่วยความจำของคอมพิวเตอร์ และซอฟต์แวร์ที่ทำงานบนคอมพิวเตอร์ก็คือยานพาหนะต่าง ๆ ที่เคลื่อนที่อยู่บนถนน ทีนี้ ลองคิดว่าจะเกิดอะไรขึ้น หากรถที่วิ่งทำธุระเสร็จแล้วแทนที่จะวิ่งออกจากถนนไปหาที่จอดที่ถูกต้อง มันกลับเลือกที่จะจอดข้างถนนแบบไทยสไตล์ ก็ฉันจะจอดแบบนี้น่ะใครจะทำไม ? และเมื่อมีคันหนึ่งทำได้ ทุกคนก็ทำตาม จนสุดท้ายมีรถจอดเต็มถนนไปหมด ส่งผลให้พื้นที่ถนนหายไป การจราจรติดขัดไม่สามารถเคลื่อนที่ได้รวดเร็วเหมือนอย่างเคย ซึ่งนี่แหละที่ทางคอมพิวเตอร์เราจะเรียกว่า Memory Leak

Memory Leak คืออะไร ? หน่วยความจำรั่วไหลเกิดจากอะไร ? ส่งผลอะไรบ้าง ?
ภาพจาก : https://www.baeldung.com/java-memory-leaks

Memory Leak จัดว่าเป็นปัญหาที่เกิดจากการเขียนซอฟต์แวร์ผิดพลาด ทำให้มันจัดสรรการใช้ทรัพยากรผิดพลาด โดยในการทำงานของซอฟต์แวร์  มันจะมีการส่ง Object (ในทางโปรแกรมคอมพิวเตอร์มันเป็นสิ่งที่รวมข้อมูล และสิ่งที่จำเป็นต่อการทำงานเข้าด้วยกัน) เข้าไปเก็บไว้บนแรม โดยซอฟต์แวร์จะมีการกำหนดขนาดพื้นที่ และตำแหน่งของหน่วยความจำที่ต้องการใช้ เมื่อ Object ทำงานเสร็จแล้ว ก็จะคืนทรัพยากรพื้นที่กลับให้ระบบ แต่หากตัวซอฟต์แวร์มีการเขียนโค้ดมาไม่ดี ลืมสั่งให้ซอฟต์แวร์คืนพื้นที่ ทรัพยากรหน่วยความจำของระบบก็จะถูกจองสะสมไปเรื่อย ๆ ทำให้ระบบคอมพิวเตอร์ทำงานได้ช้าลง หรือหากอาการรุนแรงก็อาจทำให้ระบบล่มหยุดทำงานจนต้องรีสตาร์ตเริ่มระบบใหม่

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

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

วงจรการรั่วไหลของหน่วยความจำ (Memory Leak Cycle)
ภาพจาก : https://favtutor.com/blogs/memory-leaks-cpp

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

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

ปัญหาที่เกิดจาก หน่วยความจำรั่ว (Problems from Memory Leak)

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

โดยเมื่อพื้นที่หน่วยความจำลดลง ซอฟต์แวร์  และระบบคอมพิวเตอร์จะทำงานได้ช้าลง จากการที่หน่วยความจำเหลือน้อย ซึ่งเป็นประสบการณ์ที่ผู้ใช้งานไม่อยากเจอกันอย่างแน่นอน นอกจากนี้ ยังเป็นการใช้ทรัพยากรที่ระบบมีไปอย่างเปล่าประโยชน์

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

เราจะตรวจสอบว่ามี หน่วยความจำรั่ว ได้อย่างไร ? (How do we detect Memory Leak ?)

เราเข้าใจแล้วว่า Memory Leak คืออะไร ? แล้วเราจะรู้ได้อย่างไร ? ว่าคอมพิวเตอร์ของเราเกิด Memory Leak อยู่ ก็มีหลายวิธีที่สามารถตรวจสอบได้ อย่างเช่น

  • ตรวจสอบการใช้ทรัพยากรว่าแรมว่าสูงผิดปกติหรือไม่ ด้วยเครื่องมือที่มีอยู่แล้วในระบบ เช่น Taks Manager, Activity Monitor ฯลฯ
  • ใช้เครื่องมือ Profiling tools ซึ่งส่วนใหญ่จะมาพร้อมกับตัว Software Development Kits (SDK) อยู่แล้ว มันมีไว้เพื่อตรวจสอบการใช้หน่วยความจำได้แบบเรียลไทม์
  • อาศัยเครื่องมือที่ออกแบบมาเพื่อใช้ตรวจสอบ Memory Leak โดยเฉพาะ อย่างเช่น Visual Studio debugger หรือ C run-time Library
  • เอาข้อมูล Heap dumps (เหมือน บันทึก (Log) การทำงานของแรม) มาตรวจสอบการทำงานของหน่วยความจำ
  • ใช้เครื่องมือตรวจสอบซอฟต์แวร์ที่กำลังทำงานอยู่แบบอัตโนมัติ อย่างพวกกรอบการทดสอบหน่วยความจำ (Memory Testing Frameworks)
  • บางแพลตฟอร์มจะมีระบบแจ้งเตือน Memory Leak ให้มาในตัวเลย เช่น Java เป็นต้น

Memory Leak คืออะไร ? หน่วยความจำรั่วไหลเกิดจากอะไร ? ส่งผลอะไรบ้าง ?
ภาพจาก : https://docs.oracle.com/cd/E13188_01/jrockit/docs50/usingMMLeak/memleak.html


ที่มา : www.makeuseof.com , www.educative.io , medium.com , owasp.org , www.ibm.com , en.wikipedia.org , codete.com , www.computerworld.com

0 Memory+Leak+%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3+%3F+%E0%B8%AB%E0%B8%99%E0%B9%88%E0%B8%A7%E0%B8%A2%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1%E0%B8%88%E0%B8%B3%E0%B8%A3%E0%B8%B1%E0%B9%88%E0%B8%A7%E0%B9%84%E0%B8%AB%E0%B8%A5%E0%B9%80%E0%B8%81%E0%B8%B4%E0%B8%94%E0%B8%88%E0%B8%B2%E0%B8%81%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3+%3F+%E0%B8%AA%E0%B9%88%E0%B8%87%E0%B8%9C%E0%B8%A5%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3%E0%B8%9A%E0%B9%89%E0%B8%B2%E0%B8%87+%3F
แชร์หน้าเว็บนี้ :
Keyword คำสำคัญ »
เขียนโดย
ระดับผู้ใช้ : Admin    Thaiware
แอดมินสายเปื่อย ชอบลองอะไรใหม่ไปเรื่อยๆ รักแมว และเสียงเพลงเป็นพิเศษ
 
 
 

ทิปส์ไอทีที่เกี่ยวข้อง

 


 

แสดงความคิดเห็น