WAS¿¡¼ Áö¼ÓÀûÀÎ Heap Memory ´©¼öÇö»óÀÌ ÀÖ¾ú³ª¿ä?
Á¦´ÏÆÛ 2.5¿¡¼ óÀ½ ¼±º¸ÀÎ ¡°Áö¼ÓÀûÀÎ Heap Memory Leak¡±À» Àâ¾Æ°¡´Â ÄÝ·º¼Ç ÃßÀû °úÁ¤Àº ´ÙÀ½°ú
°°½À´Ï´Ù.
1. [Åë°èºÐ¼®]->[¸Þ¸ð¸®] ¸Þ´º·Î °¡¼Å¼ Áö³ ¸çÄ¥µ¿¾ÈÀÇ Heap MemoryÀÇ °æ°ú¸¦ ¸ÕÀú È®ÀÎÇÕ´Ï´Ù.
¸¸¾à, ½Ã°£ÀÌ Áö³²¿¡ µû¶ó ¡°ÀÏÀÏÀÚ¹ÙÈü(Heap) ¸Þ¸ð¸® »ç¿ë·®¡±ÀÇ ±×·¡ÇÁ°¡ Áõ°¡Çϰí ÀÖ´ÂÁö
È®ÀÎÇÏ´Â °ÍÀÌÁö¿ä.
2. [Àå¾ÖÁø´Ü]->[¸Þ¸ð¸®-ÄÝ·º¼Ç]¸Þ´º·Î À̵¿ÇÕ´Ï´Ù.
À§¿¡¼ º¸¸é ¾î¶² ÄÝ·º¼Ç(Vector/Hashtable/etc..)°´Ã¼°¡ ¾ó¸¶¸¸ÅÀÇ element¸¦ °®°í ÀÖ´ÂÁö º¸ÀÔ´Ï´Ù.
º¸´Ù ±¸Ã¼ÀûÀ¸·Î ¾î¶² ¾îÇø®ÄÉÀ̼ǿ¡¼ À§ Ä÷º¼Ç¿¡ AddÇß´ÂÁö¸¦ º¸·Á¸é, [accept]¹öưÀ» ´·¯ÁÝ´Ï´Ù.
±×·¯¸é ´ÙÀ½ ±×¸²°ú °°ÀÌ »óŰ¡ waiting¡¦À¸·Î ¹Ù²ò´Ï´Ù.
ÀÌÁ¦ ¸¸¾à, ¾î¶² ¾îÇø®ÄÉÀ̼ǿ¡¼ À§ °´Ã¼¿¡ »õ·Î¿î element¸¦ Ãß°¡ÇÏ·Á°í ½ÃµµÇÒ ¶§, ±× stacktrace¸¦
¶°¼ ´ã¾Æ ÁÖ°Ô µÇ¹Ç·Î, F5Ű³ª Enter¸¦ ÁÖ±âÀûÀ¸·Î ´·Á »óŰ¡ ¡°waiting¡¦¡±¿¡¼ ¡°included¡±·Î ¹Ù²ð
¶§ ±îÁö ±â´Ù¸³´Ï´Ù.
À§¿Í °°ÀÌ STACKÀÌ ¡°included¡±»óÅ·ΠµÇ¾úÀ» ¶§, ¸¶¿ì½º¸¦ ±× ÄÝ·º¼Ç(À§¿¡¼± java.util.HashMap)À§·Î
°¡Á®°¡¸é ´ÙÀ½°ú °°ÀÌ ¾î¶² ¾îÇø®ÄÉÀ̼ǿ¡¼, ¾î¶² °´Ã¼¸¦ À§ ÄÝ·º¼Ç¿¡ Ãß°¡Çß´ÂÁö È®Àε˴ϴÙ.
À§¿¡¼ º¸¸é session.jsp°¡ TomcatÀÇ HTTP Session¿¡µ¥°¡ StandardSessionÀ̶ó´Â °´Ã¼¸¦ ³Ö¾ú°í, ÇöÀç
14,580°³ÀÇ element°¡ ´ã°Ü ÀÖÀ½ÀÌ È®Àε˴ϴÙ.
±×·¯³ª, ´Ü¼øÈ÷ element °³¼ö°¡ ¸¹´Ù°í ÇÏ¿© ¸Þ¸ð¸®¸¦ ¸¹ÀÌ »ç¿ëÇß´Ù°í´Â Àå´ãÇÒ ¼ö ¾ø½À´Ï´Ù. (Á¶¸¸°£
elementÀÇ ByteÅ©±â¸¦ º¸¿©ÁÙ ÁÙ ¼ö ÀÖµµ·Ï ÇϰڽÀ´Ï´Ù.) ±×·¸±â ¶§¹®¿¡ Áö¼ÓÀûÀ¸·Î Áõ°¡ÇÏ´Â °ÍÀÌ
Heap MemoryÀÇ Áõ°¡¿Í »ó°ü°ü°è°¡ Àִ°¡¸¦ ÆÇ´ÜÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.
¸Þ´º¿¡¼ [snapshot]À» ´©¸£¸é, DELTAÇ׸ñÀÌ 0·Î ¹Ù²ò´Ï´Ù. (TOTALÀº element°³¼ö·Î¼, ÃʱâÈÇÒ ¼ö ¾ø´Â
°ªÀÔ´Ï´Ù.) DELTAÇ׸ñÀº [snaphot]À» ´©¸£¸é 0À¸·Î ÃʱâÈ µÇ°í, ±× ´ÙÀ½ºÎÅÍ element°¡ ´Ã¾î³ °³¼ö¸¦
º¸¿©ÁÖ°Ô µË´Ï´Ù.
ÀÌó·³ TOTAL ¹× DELTA°ªÀÇ º¯È°¡ Heap MemoryÀÇ Áõ°¡¿Í °ü·ÃÀÌ ÀÖ´ÂÁö Á÷°üÀûÀÎ ÆÇ´ÜÀÌ µÇ¸é, ¾Õ¼ ±¸ÇÑ
Stacktrace ȤÀº ¸îÂ÷·Ê¿¡ °ÉÃÄ StackTrace¸¦ ¶°¼, µ¿ÀÏÇÑ ¾îÇø®ÄÉÀ̼ǿ¡¼ ¹ß»ýµÇ°í ÀÖ´Ù¸é, À̸¦ °®°í
°³¹ßÀÚ¿Í ¾îÇø®ÄÉÀÌ¼Ç ¼Ò½º¸¦ ReivewÇÏ´Â ´Ü°è·Î ÁøÀÔÇÏ¸é µÉ °ÍÀÔ´Ï´Ù.
ÀÌó·³ Á¦´ÏÆÛ2.5ÀÇ ¸Þ¸ð¸®/ÄÝ·º¼Ç ÃßÀûÀº Áö¼ÓÀûÀÎ Heap Memory LeakÀÇ ¿øÀÎÀ» Àâ´Âµ¥´Â ¸Å¿ì
È¿°úÀûÀ̾ú´Ù´Â °ÍÀÌ ¿©·¯ »çÀÌÆ®¿¡¼ È®ÀεǾú½À´Ï´Ù. ¸ðµç LiveObject°³¼ö ÃßÀûÀº [Àå¾ÖÁø´Ü]->
[¶óÀ̺ê¿ÀºêÁ§Æ®] ¸Þ´º¿¡¼ È®Àΰ¡´ÉÇÕ´Ï´Ù. ±×·¯³ª, ¾î¶² °´Ã¼°¡ ¸Þ¸ð¸®¸¦ ¾ó¸¶³ª »ç¿ëÇϰí ÀÖ´À³Ä
º¸´Ù´Â ´©°¡ ±× °´Ã¼¸¦ »ý¼ºÇÏ¿© ¹Ð¾î³Ö¾ú³Ä´Â °ÍÀ» ã´Â °ÍÀÌ ´õ¿í Áß¿äÇÑ ºÎºÐÀÔ´Ï´Ù.
¶ÇÇÑ, ¸î¹éMBÀÇ ¸Þ¸ð¸®¸¦ Á¡À¯ÇÒ ¼ö ÀÖ´Â ±¸Á¶´Â ±×·¡ºÁ¾ß Hashtable, Vector, HashMap°ú °°Àº
ÄÝ·º¼Ç(Collection) °´Ã¼ ÀÏ ¼ö ¹Û¿¡ ¾ø´Ù´Â °ÍÀÌÁÒ.
NOTE:
[snapshot] : DELTA °ªÀ» ¸ðµÎ 0À¸·Î ÃʱâÈÇÏ¿© ±× ´ÙÀ½ element°¡ µé¾î¿Ã ¶§ºÎÅÍ Áõ°¡½Ãŵ´Ï´Ù.
[stackclear] : ÇöÀç ÄÎÃÄÇÑ ¸ðµç stacktrace¸¦ Áö¿ó´Ï´Ù.
[accept now stack] : ¸®½ºÆÃ µÈ ¸ðµç ÄÝ·º¼ÇÀÇ »óŸ¦ ÇâÈÄ stacktrace¸¦ ¹Þ¾ÆµéÀ̱â À§ÇØ waiting»óÅ·Î
¸¸µì´Ï´Ù.
°¢ ÄÝ·¢¼Ç °³º°ÀûÀ¸·Î À§¿Í °°Àº ÀÛ¾÷À» ÇÏ·Á¸é °¢ °³º° ÄÝ·¢¼Ç¿¡¼ [accept][clear][accept new] ¸Þ´º¸¦
Ȱ¿ëÇÏ¸é µË´Ï´Ù.
collection_minimum_monitoring_size = 1000 : JVM ³»ºÎ¿£ ¸¹Àº ÄÝ·º¼ÇÀÌ ÀÖÀ» °ÍÀÔ´Ï´Ù. ÀÌ ¼öÄ¡¸¦ ³Ñ¾î¼´Â
°Í¿¡ ÇÑÇØ¼¸¸ ¸®½ºÆÃ µË´Ï´Ù. ½Ç½Ã°£ Àû¿ëµÇ³ª, WAS¸¦ Àç½ÃÀÛ
ÇÏ¸é ´Ù½Ã ÃʱⰪÀ¸·Î ¹Ù²ò´Ï´Ù. ¿µ±¸¼³Á¤Àº [±¸¼º°ü¸®]->
[±¸¼º¼³Á¤]¿¡¼ °¢ WASº°·Î ÁöÁ¤ÇØ ÁÖ¸é µË´Ï´Ù.
collection_auto_stacktrace_size = 10000 : ºñ·Ï ¸®½ºÆ®¿¡ ³ª³ª³µ´ÙÇØµµ ¸í½ÃÀûÀ¸·Î [accept]¸¦ ´·¯ STACKÀ»
¹Þ¾ÆµéÀÏ Áغñ°¡ µÇ¾î ÀÖÁö ¾ÊÀ¸¸é STACKÀÌ ½×ÀÌÁö ¾Ê½À´Ï´Ù.
±×·¯³ª, ÀÌ element °³¼ö°¡ ÀÌ ¼öÄ¡¸¦ ³Ñ¾î¼¸é ÀÚµ¿À¸·Î
STACKÀÌ ½×ÀÔ´Ï´Ù. Âü°í·Î ½Ç»çÀÌÆ®¿¡ º¸¸é 10¸¸°³¸¦ ³Ñ¾î¼¸é
À̽´È°¡ µÇ°ï ÇÏ´õ±º¿ä.
NOTE: ¸Þ¸ð¸®-ÄÝ·º¼Ç ÃßÀû¿¡ µû¸¥ ¼º´ÉÀúÇϵµ´Â »ó´ëÀûÀ¸·Î ¸Å¿ì ¹Ì¹ÌÇÕ´Ï´Ù.
NOTE: IBM JDK¸¦ »ç¿ëÇϰí ÀÖÀ» °æ¿ì´Â Á¦´ÏÆÛ¿Í ¹«°üÇÏ°Ô heapdumpÆÄÀÏÀ» ºÐ¼®ÇÔÀ¸·Î½á 95% ÀÌ»ó °ÅÀÇ
´ëºÎºÐÀÇ ¿øÀÎÀ» ÆÇ´ÜÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÚ¹Ù¼ºñ½º³Ý ÀÌ¿ø¿µ
Phone: 010-6239-6498
E-mail: NOSPAM_lwy@javaservice.com
MSN: NOSPAM_javaservice@hanmail.net
memory3.gif (13198 Bytes)
memory2.gif (12821 Bytes)
memory5.gif (12791 Bytes)
memory0.gif (79329 Bytes)
memory4.gif (21654 Bytes)
memory1.gif (12891 Bytes)
|