Wednesday, March 15, 2006

Native Leak?

App ที่ผมทำให้ลูกค้ารายหนึ่ง
เดิม run อยู่บน IBM P-series
ก็ใช้ได้ปกติดี ตายบ้างเป็นปกติ (ปีละ 2-3 ครั้ง)
เวลาล่ม ก็มีทั้ง user ทำล่ม
เช่น เรียก report ใหญ่ๆในเวลาที่ load online กำลัง peak
พอ report response ช้า ก็ submit เข้ามาใหม่
ส่วนกรณีที่เป็นที่ system ก็คือ
java มันเบื่อขึ้นมา มันก็ core dump ซะเฉยๆ

พอย้ายไปอยู่บน mainframe
คราวนี้ล่มรายอาทิตย์เลย
(โชคดีที่เขาจัดจ้าง team อื่นเข้ามาดูเรื่องนี้โดยเฉพาะ
ไม่ใช่หน้าที่ของบริษัทผม
ผมก็เลยไม่ต้องปวดหัวมากนัก)

ช่วงแรกๆ หลายๆคนที่เกี่ยวข้อง ก็ชี้นิ้วอย่างเดียว
เขียนโปรแกรมอย่างไง
ใช้ technique ถูกต้องหรือเปล่า
system ไม่มีปัญหา ล่มเพราะ app แหง๋ๆ
(แปลกที่ไม่มีใครย้อนไปดูเลยว่า app มัน run มาปีกว่าแล้ว)
ปากเปียกปากแฉะ อธิบายไป
พร้อมกับช่วยจำแนก อธิบายวิธีแก้ปัญหา

ปัญหาก็ค่อยๆแก้ไปเรื่อยๆ
ช่วงนี้เหลือ error หนักๆ ก็คือ
มันจะค่อยมี error out of memory ขึ้นมาอยู่เรื่อยๆ
(ไม่ถี่มาก แต่ก็ถือว่าเป็นปัญหา เพราะเป็นระบบ online
ที่ให้บริการ ณ counter ทั่วประเทศ)

วันนี้ได้ cc จดหมายจาก IBM

Javacore shows that both the Xms and Xmx have been set to 1280 m.
The heapdump shows that only 380 mb of heap is occupied.
Verbose GC shows that at least 80% heap is free when the oom occured.
This looks to be a case of native memory exhaustion.
...
Based on these facts we would reccomend the changing the Xmx and Xms
Heap Settigns as below to ensure that we have enough native memory
left with us for native allocation Reduce the Xmx value to 1024 mb
Reduce the Xms value to 256 mb


ตอนนี้ผู้ต้องสงสัยเบอร์ 1 คือ jdbc type 2
แต่โชคร้ายที่ jdbc type 4 มันก็มี known issue ของมันอยู่
ทำให้ไม่สามารถ switch ไปเฉยๆได้

Note: ข้อเตือนใจ
เขียน app run ใน type 2 ได้
อย่าคาดหวังว่าแค่เปลี่ยน driver type
แล้วมันจะ smooth run ต่อได้นะครับ

ลืมบอกไป
product ผู้สนับสนุน bug อย่างเป็นทางการ ก็คือ websphere 5 ครับ

Related link from Roti

No comments: