°Ô½Ã¹° 6°Ç
[WEB] JAVA ¸Þ¸ð¸® °ü·Ã Á¤º¸
±Û¾´ÀÌ :
ÃÖÀå¼·
³¯Â¥ : 2014-09-01 (¿ù) 13:17
Á¶È¸ : 6566
ÇÁ·Î±×·¥Àº ½ÇÇàµÇ¸é¼ ÀúÀåÇÒ µ¥ÀÌÅÍ°¡ ÀÖÀ¸¸é ¸Þ¸ð¸®ÀÇ ÀÏÁ¤ °ø°£À» ÇÒ´ç¹Þ¾Æ¼ ÀúÀåÇÑ´Ù. ±×·±µ¥ ÀÌ µ¥ÀÌÅÍ°¡ ´õ ÀÌ»ó »ç¿ëÇÒ ÇÊ¿ä°¡ ¾ø´Â°ÍÀ̸é, »ç¿ëÇ× ¸Þ¸ð¸®¸¦ ¹Ý³³ÇؾßÁÖ¾î¾ßÇÑ´Ù. Àڹٴ ģÀýÈ÷µµ ¸Þ¸ð¸® ȸ¼ö¸¦ ÀÚµ¿ÀûÀ¸·Î ÇØÁØ´Ù. JVM(Java Virtual Machine)ÀÇ Garbage Collector¶õ ³ðÀÌ »ç¿ëÇÏÁö ¾Ê´Â ¸Þ¸ð¸®¸¦ ¾Ë¾Æ¼ ȸ¼öÇØÁִ°ÍÀÌ´Ù. ÀÌ È¸¼ö¿¡ ´ëÇÑ ÇàÀ§¸¦ GC(Garbage Collection)À̶óÇÑ´Ù. JVMÀÇ ¸Þ¸ð¸® ¿µ¿ªÀº Å©°Ô Heap Area°ú Non-Heap AreaÀ¸·Î ³ª´¼ö ÀÖ´Ù.
Heap Area Èü ¿µ¿ª(Heap Area)Àº µ¿ÀûÀ¸·Î ÇÒ´çÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ´Â ¸Þ¸ð¸® ¿µ¿ªÀ¸·Î¼, ÁÖ·Î ½ÇÇàÁß¿¡ »ý¼ºµÇ´Â °´Ã¼µéÀÌ ÀúÀåµÈ´Ù. ÀÌ Èü ¿µ¿ª(Heap Area)ÀÌ GC(Garbage Collection)ÀÇ ´ë»óÀÌ µÇ´Â ¸Þ¸ð¸® ¿µ¿ªÀÌ´Ù. Áï, Garbage Collector¿¡ ÀÇÇؼ ÀÌ Èü¿µ¿ªÁß¿¡ »ç¿ëÇÏÁö ¾Ê´Â ¸Þ¸ð¸®°¡ ȸ¼öµÇ´Â°ÍÀÌ´Ù. Èü ¿µ¿ª(Heap Area)À» ¼¼ºÐÈÇϸé ÀϹÝÀûÀ¸·Î ¼¼ ¿µ¿ªÀ¸·Î ³ª´ ¼ö ÀÖ´Ù. 1.1. Young(New) Object Space : »õ·Î »ý¼ºÇÑ °´Ã¼¸¦ ÀúÀåÇÏ´É ¿µ¿ªÀÌ´Ù. ÀÌ ºÎºÐÀº ´Ù½Ã ¼¼ ºÎºÐÀ¸·Î ³ª´©¾îÁø´Ù. »õ·Î »ý¼ºÇÑ ¸ðµç °´Ã¼µéÀÌ °¡´Â Eden ¿µ¿ª°ú Old Object Space°¡±âÀü¿¡ °ÅÄ¡´Â SS1(Survivor Space 1), SS2(Survivor Space 2) ¿µ¿ª(From Space, To Space ¶ó°í ºÎ¸£±âµµ ÇÑ´Ù.)ÀÌ ÀÖ´Ù. ÀÌ Young ¿µ¿ªÀÇ GC¸¦ Minor GC(Scavenge GC)¶ó ºÎ¸¥´Ù. °´Ã¼°¡ ź»ý(?)Çϸé Eden ¿µ¿ª¿¡ ³î´Ù°¡, Minor GC°¡ ¹ß»ýÇÏ¸é »ì¾ÆÀִ°͵éÀº S1À¸·Î º¸³»°í, ³ª¸ÓÁö´Â Á¦°Å(?)Çعö¸°´Ù. ±×¸®°í ´ÙÀ½¹ø Minor GC°¡ ¹ß»ýÇϸé S1 ¿µ¿ªÀÇ °´Ã¼Áß »ì¾ÆÀִ°ÍÀº SS2·Î º¹»ç(½ÇÁ¦ÀûÀ¸·Î ·¹ÆÛ·±½º ÁÖ¼Ò¸¸ º¯°æ)ÇÑÈÄ Eden, S1 ¿µ¿ªÀ» ÃʱâÈ(Clear) Çعö¸°´Ù. ÀÌ·¸°Ô Minor GC¸¦ ½ÇÇàÇÏ´Ù°¡ ¿À·¡µÈ °´Ã¼¸¦ Old Object Space·Î ¿Å±â´Â°ÍÀÌ´Ù. 1.2. Old Object Space: Young(New) ¿µ¿ª¿¡ »ì¾Æ³²Àº °´Ã¼°¡ À̵¿µÇ¾î ÀúÀåµÇ´Â ¿µ¿ªÀÌ´Ù. ÀÌ Old ¿µ¿µÀÇ GC¸¦ Full GC¶ó ºÎ¸¥´Ù. ÀϹÝÀûÀ¸·Î »ç¿ëµÇ´Â Full GC ¾Ë°í¸®ÁòÀº »ç¿ëÇÏ´Â °´Ã¼µéÀÇ ·¹ÆÛ·±½º(reference)¸¦ ã¾Æ ¿¬°áµÇÁö ¾Ê´Â °´Ã¼¸¦ Ç¥½Ã(Mark)ÇÑ ´ÙÀ½, ÀÛ¾÷ÀÌ ³¡³ÈÄ Ç¥½ÃÇÑ °´Ã¼¸¦ ¸ðµÎ »èÁ¦¸¦ ÇÏ´Â ¹æ¹ýÀÌ´Ù. Full GC´Â ¼Óµµ°¡ ¸Å¿ì ´À¸®°í, ½ÇÇàµÇ´Â µ¿¾È¿¡ ¼ø°£ÀûÀ¸·Î ÇÁ·Î±×·¥ÀÌ ¸ØÃç¹ö¸®±â ¶§¹®¿¡ ¾îÇø®ÄÉÀ̼Ç(Application)ÀÇ ¼º´É¿¡ Å« ¿µÇâÀ» ÁØ´Ù. ±×·¡¼ ¿©·¯°¡Áö GC ¾Ë°í¸®ÁòÀ» Áö¿øÇÑ´Ù. 1.3. Permanet Space : Ŭ·¡½º¿Í ¸Þ¼ÒµåµîÀÇ ¸ÞŸÁ¤º¸¸¦ ÀúÀåÇÏ´Â ¿µ¿ªÀÌ´Ù. (³í¸®ÀûÀÎ Heap ¿µ¿ªÀ¸·Î¼, -Xms, -Xmx¿¡¼ ¸»ÇÏ´Â Heap ¿µ¿ª¿¡¼´Â Á¦¿ÜµÈ´Ù.) Non-Heap Area Non-Heap ¿µ¿ªÀº Heap ÀÌ¿ÜÀÇ ¿µ¿ªÀ» ¸»ÇÑ´Ù 2.1. Method Area : ¸Þ¼Òµå¿Í Ŭ·¡½º º¯¼ö¸¦ ÀúÀåÇϱâ À§ÇÑ ¿µ¿ªÀÌ´Ù. 2.2. Stack Area : ¸Þ¼Òµå È£Ã⠽à ¸Þ¼ÒµåÀÇ ¸Å°³º¯¼ö, Áö¿ªº¯¼ö, Àӽú¯¼öµîÀ» ÀúÀåÇϱâ À§ÇÑ ½ºÅà ±¸Á¶ÀÇ ¿µ¿ªÀÌ´Ù. 2.3. ±âŸ : JVMÀÌ ÇöÀç ¼öÇàÇÒ ¸í·É¾îÀÇ ÁÖ¼Ò¸¦ ÀúÀåÇÏ´Â PC ·¹Áö½ºÅÍ, native ¸Þ¼ÒµåÀÇ ¸Å°³º¯¼ö, Áö¿ªº¯¼ö µîÀ» ÀúÀå native ¸Þ¼Òµå ½ºÅõîÀÌ ÀÖ´Ù. JVM ½ÇÇà Option (Âü°í : http://blogs.sun.com/watt/resource/jvm-options-list.html ) - ÀÌ ¿É¼ÇµéÀ» JVM¿¡ µû¶ó Çü½ÄÀÌ Á¶±Ý¾¿ ´Ù¸¦ ¼ö ÀÖ°í, Áö¿øÇÏÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù. 3.1. -X Option -Xms : Ãʱâ Heap size (Young + Old) -Xmx : ÃÖ´ë Heap size (Young + Old) -Xss : °¢ Threadº° Stack size -Xmn : Young(New) ¿µ¿ª Å©±â 3.2. -XX Option -XX:PermSize : Ãʱâ Permanent size -XX:MaxPermSize : ÃÖ´ë Permanent size -XX:SurvivorRatio=<n> : Eden ¿µ¿ªÀÇ Å©±â¸¦ SS1 ¶Ç´Â SS2ÀÇ Å©±â·Î ³ª´«°ª -XX:NewRatio : Old/New Size °ªÀÌ´Ù. (Àüü Heasp Size°¡ 768mÀ϶§ NewRatio=2À̸é, New=256m, Old=512mÀ¸·Î ¼³Á¤µÈ´Ù.) 3.3. ¸Þ¸ð¸® »êÃâ °ø½Ä YOUNG = Xmn = Eden + SS1 + SS2 Eden = YOUNG - ((Xmn/(SurvivorRatio + 2)) * 2) SS1 = (YOUNG - Eden)/2 SS2 = (YOUNG - Eden)/2 OLD = Xmx - Xmn 3.4. -verbosegc (ÀÚ¹Ù ½ÇÇà½Ã JVM ¿É¼Ç¿¡ -verbosegc ¸¦ ÁÖ¸é GC ·Î±×¸¦ º¼ ¼ö ÀÖ´Ù.) * ½ÇÇà °á°ú [GC 5971K->5481K(7748K), 0.0011015 secs] [GC 5993K->5498K(7748K), 0.0010708 secs] [GC 6008K->5523K(7748K), 0.0011719 secs] [GC 6027K->5588K(7748K), 0.0010359 secs] [GC 6089K->5695K(7748K), 0.0012088 secs] [Full GC 5737K->5641K(7748K), 0.0630893 secs] [GC 6345K->5945K(10172K), 0.0017444 secs] [GC 6649K->5944K(10172K), 0.0010166 secs] [GC 6648K->6000K(10172K), 0.0011124 secs] [GC 6704K->6048K(10172K), 0.0015901 secs] [GC 6752K->6059K(10172K), 0.0006417 secs] [GC 6763K->6116K(10172K), 0.0006613 secs] [GC 6763K->6116K(10172K), 0.0006613 secs] Minor GC´Â "GC"·Î, Full GC´Â "Full GC"·Î ³ªÅ¸³´Ù. 6763KÀº GCÇϱâ ÀüÀÇ Heap SizeÀÌ°í, 6116KÀº GCÈÄÀÇ Heap »çÀÌÁ ³ªÅ¸³½´Ù. (10172K)Àº ÃÑ Heasp SizeÀÌ°í, 0.0006613 secsÀº GC ¼Ò¿ä ½Ã°£ÀÌ´Ù. java.lang.OutOfMemoryError ÀØÇôÁú¸¸ÇÏ¸é ³ªÅ¸³ª´Â ¿ì¸®ÀÇ Ä£±¸ OutOfMemory. ÇÁ·Î±×·¥¿¡ ¸Þ¸ð¸® ´©¼öµîÀÇ ¹®Á¦°¡ ¾ø´Ù¸é, JVM ¿É¼ÇÀ¸·Î ¸Þ¸ð¸®¸¦ ´Ã·ÁÁÖ¸é µÈ´Ù. ÀÌ OutOfMemoryµµ ¸Þ¸ð¸® Á¾·á(?)º°·Î ¹ß»ýÇϴµ¥, °¡Àå ºó¹øÇÏ°Ô ¹ß»ýÇÏ´Â ³ðÀº heap°ú PermGenÀ̶ó´Â ³ðÀÌ´Ù. 4.1. java.lang.OutOfMemoryError: Java heap space - °¡Àå À¯¸íÇÑ ³ðÀ¸·Î¼, Heap Å©±â°¡ ºÎÁ·Çؼ ³ª´Â°ÍÀÌ´Ù. - ÇØ°áÃ¥ : -Xmx ¿É¼ÇÀ» ÀÌ¿ëÇؼ ÃÖ´ë Heap Size¸¦ ´Ã·ÁÁØ´Ù. 4.2.java.lang.OutOfMemoryError: PermGen space - ¿äÁò ¶ß´Â ³ðÀε¥, µ¿Àû Ŭ·¡½º¸¦ ¸¹ÀÌ »ç¿ëÇÒ °æ¿ì ¹ß»ýÇÑ´Ù. JSP->Server º¯È¯À̳ª, spring °°Àº µ¿Àû Ŭ·¡½º¸¦ ¸¹ÀÌ »ç¿ëÇÏ´Â ÇÁ·¹ÀÓ¿öÅ©¸¦ »ç¿ëÇÒ¶§ Á¾Á¾ ¹ß»ýÇÑ´Ù. - ÇØ°áÃ¥ : -XX:MaxPermSize ¿É¼ÇÀ» ÀÌ¿ëÇؼ Perm Size¸¦ ´Ã·ÁÁØ´Ù. 4.3. ±âŸ - ÀÌ ¿Ü¿¡µµ Native Heap Space°¡ ºÎÁ·Çϰųª, Thread Stack Space°¡ ºÎÁ·ÇÒ °æ¿ì ¹ß»ýÇϱ⵵ Çϴµ¥, º¸ÅëÀº °ÅÀÇ º¼ ¼ö ¾øÀ¸¹Ç·Î »ý·«.(Native Heap Space°¡ ºÎÁ·ÇÒ °æ¿ì´Â Heap »çÀÌÁ ÁÙ¿©ÁÖ¸é µÇ°í, Thread Stack Space°¡ ºÎÁ·ÇÒ°æ¿ì´Â Thread ¼ö¸¦ ÁÙÀÌ´øÁö Stack Size¸¦ ÁÙÀÌ¸é µÈ´Ù.) - 32bit JVMÀÏ °æ¿ì ÀϹÝÀûÀ¸·Î »ç¿ë °¡´ÉÇÑ ¸Þ¸ð¸® Å©±â´Â 4GÀÌ´Ù.(OS¿¡ µû¶ó ´Ù¸£±âµµ ÇÏ´Ù) 232 =4*230 =4GÀ̴ϱî. - ´Ü¼øÈ÷ ¸Þ¸ð¸® ºÎÁ·(?) ¶§¹®¿¡ »ý±â´Â ¹®Á¦¶ó¸é, À§¿¡Ã³·³ ¸Þ¸ð¸®¸¦ ´Ã·ÁÁÖ¸é µÈ´Ù. ÇÏÁö¸¸ ÇÁ·Î±×·¥ÀÇ ¹ö±×¶§¹®¿¡ ¸Þ¸ð¸® ´©¼öÇö»óÀÌ ¹ß»ýÇÏ¿© ¿¡·¯°¡ ¹ß»ýÇÒ°æ¿ì´Â Âü ³°¨ÇÒ°ÍÀÌ´Ù. ÀÌ·² °æ¿ì´Â HProf³ª Heap Dump¸¦ ÀÌ¿ëÇؼ À߸øµÈ ºÎºÐÀ» ã´Â ¼ö¹Û¿¡ ¾ø´Ù. ¿äÁòÀº JMX(Java Management eXtensions)À» ÀÌ¿ëÇØ ½Ç½Ã°£ ¸ð´ÏÅ͸µµµ µÇ´Ï Á¤¸» ÆíÇÑ ¼¼»óÀÌ´Ù. (À̺κп¡ ´ëÇؼ ´ÙÀ½¿¡ ½É½ÉÇϸé Çѹø ¾Ë¾Æº¸ÀÚ ^^;) Ãâó : http://blog.kangwoo.kr/51