GotoKnow
  • เข้าระบบ
  • สมัครสมาชิก
  • แผงจัดการ
  • ออกจากระบบ
GotoKnow

หน่วยความจำรั่ว (memory leak)

เชื่อผมเถอะครับ ว่า GotoKnow.org ที่ทำงานด้วย KnowledgeVolution นี้ทำงานได้เร็วผิดหูผิดตาจาก version ที่แล้วเยอะมาก แต่ เอ่อ... มีแต่ด้วย คือตอนนี้ KnowledgeVolution มี bug หนึ่งตัวใหญ่ๆ เป็นปัญหา memory leak ซึ่ง memory leak คือการที่โปรแกรมจองหน่วยความจำเพื่อใช้งานแล้วไม่ยอมคืนให้ระบบ หรือคืนให้ไม่หมด ทำให้ระบบไม่มีหน่วยความจำเหลือ

ปัญหานี้ทำให้ GotoKnow.org ใช้งานได้ช้ามากๆ เป็นพักๆ ไป จนกว่าผมจะมา restart โปรแกรม ดังนั้นถ้าช่วงนี้ GotoKnow.org หยุดทำงานใครมีเบอร์โทรผมหรือ ดร.จันทวรรณ โทรมาบอกได้เลยนะครับ จะได้ restart โปรแกรม

ปรากฎว่าสาเหตุที่ memory leak คิดว่าน่าจะเกิดจาก RMagick ซึ่งเป็น Ruby module เราใช้ในการสร้างภาพตัวเลขเพื่อตรวจสอบนี่ล่ะ (กรุณาอ่านตรงนี้ประกอบ) ตอนนี้ผมได้แก้ไขแล้ว (ด้วยบังคับ GC.start เมื่อสิ้นสุดการประมวลผลภาพ) แต่จากที่หาข้อมูลมา ปัญหานี้แก้ไม่ได้หมดจริงๆ ผลลัพธ์ก็ยังได้โปรแกรมที่กินหน่วยความจำมากพอประมาณอยู่ดี ก็คงต้องหาวิธีการแก้อื่นต่อไปครับ ท่านใดมีคำแนะนำก็เพิ่มเติมได้ในความคิดเห็นจะเป็นพระคุณอย่างสูงครับ

ไม่น่าเชื่อว่าเขียนด้วย dynamic language อย่าง Ruby ซึ่งมีการจัดการหน่วยความจำอัตโนมัติแล้วยังต้องตามแก้ปัญหา memory leak ซึ่งปกติเป็นเรื่องที่ต้องทำสำหรับพวกที่เขียนโปรแกรมด้วยภาษา C/C++ (ซึ่งผู้เขียนโปรแกรมต้องจัดการหน่วยความจำเอง) เป็นความรู้ว่าแม้ช่วงหลังๆ เราจะเน้นการเรียนการสอนในการเขียนโปรแกรมด้วยภาษาที่มีการจัดการหน่วยความจำอัตโนมัติ (อาทิเช่น Java) แต่ความรู้เรื่องการจัดการหน่วยความจำด้วยตัวผู้เขียนโปรแกรมเองนั้น ก็ยังเป็นเรื่องจำเป็นที่ต้องเรียนรู้กันให้ดี

บันทึกนี้เขียนที่ GotoKnow โดย 

คำสำคัญ (keywords): knowledgevolutionrubyrailsrmagickbug
หมายเลขบันทึก: 33350
เขียน:
แก้ไข:
อ่าน:
สัญญาอนุญาต: สงวนสิทธิ์ทุกประการ

ความเห็น (0)