°Ô½Ã¹° 6°Ç
 
[WEB] JAVA ¸Þ¸ð¸® °ü·Ã Á¤º¸
±Û¾´ÀÌ : ÃÖÀå¼· ³¯Â¥ : 2014-09-01 (¿ù) 13:17 Á¶È¸ : 6566

ÇÁ·Î±×·¥Àº ½ÇÇàµÇ¸é¼­ ÀúÀåÇÒ µ¥ÀÌÅÍ°¡ ÀÖÀ¸¸é ¸Þ¸ð¸®ÀÇ ÀÏÁ¤ °ø°£À» ÇÒ´ç¹Þ¾Æ¼­ ÀúÀåÇÑ´Ù.
±×·±µ¥ ÀÌ µ¥ÀÌÅÍ°¡ ´õ ÀÌ»ó »ç¿ëÇÒ ÇÊ¿ä°¡ ¾ø´Â°ÍÀ̸é, »ç¿ëÇ× ¸Þ¸ð¸®¸¦ ¹Ý³³ÇؾßÁÖ¾î¾ßÇÑ´Ù.
Àڹٴ ģÀýÈ÷µµ ¸Þ¸ð¸® ȸ¼ö¸¦ ÀÚµ¿ÀûÀ¸·Î ÇØÁØ´Ù. 

JVM(Java Virtual Machine)ÀÇ Garbage Collector¶õ ³ðÀÌ »ç¿ëÇÏÁö ¾Ê´Â ¸Þ¸ð¸®¸¦ ¾Ë¾Æ¼­ ȸ¼öÇØÁִ°ÍÀÌ´Ù.

ÀÌ È¸¼ö¿¡ ´ëÇÑ ÇàÀ§¸¦ GC(Garbage Collection)À̶óÇÑ´Ù.

JVMÀÇ ¸Þ¸ð¸® ¿µ¿ªÀº Å©°Ô Heap Area°ú Non-Heap AreaÀ¸·Î ³ª´­¼ö ÀÖ´Ù.

  1. 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 ¿µ¿ª¿¡¼­´Â Á¦¿ÜµÈ´Ù.)

  2. Non-Heap Area
    Non-Heap ¿µ¿ªÀº Heap ÀÌ¿ÜÀÇ ¿µ¿ªÀ» ¸»ÇÑ´Ù

    2.1. Method Area : ¸Þ¼Òµå¿Í Ŭ·¡½º º¯¼ö¸¦ ÀúÀåÇϱâ À§ÇÑ ¿µ¿ªÀÌ´Ù.

    2.2. Stack Area : ¸Þ¼Òµå È£Ã⠽à ¸Þ¼ÒµåÀÇ ¸Å°³º¯¼ö, Áö¿ªº¯¼ö, Àӽú¯¼öµîÀ» ÀúÀåÇϱâ À§ÇÑ ½ºÅà ±¸Á¶ÀÇ ¿µ¿ªÀÌ´Ù.

    2.3. ±âŸ : JVMÀÌ ÇöÀç ¼öÇàÇÒ ¸í·É¾îÀÇ ÁÖ¼Ò¸¦ ÀúÀåÇÏ´Â PC ·¹Áö½ºÅÍ, native ¸Þ¼ÒµåÀÇ ¸Å°³º¯¼ö, Áö¿ªº¯¼ö µîÀ» ÀúÀå native ¸Þ¼Òµå ½ºÅõîÀÌ ÀÖ´Ù.

  3. 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 ¼Ò¿ä ½Ã°£ÀÌ´Ù.

  4. 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

À̸§ Æнº¿öµå
ºñ¹Ð±Û (üũÇÏ¸é ±Û¾´À̸¸ ³»¿ëÀ» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.)
¿ÞÂÊÀÇ ±ÛÀÚ¸¦ ÀÔ·ÂÇϼ¼¿ä.
 

miwit.com sir.co.kr DNS Powered by DNSEver.com DNS Powered by DNSEver.com