ÃֽŠ°Ô½Ã±Û(OS/WAS)
2020.01.31 / 11:01

JVM ¸Þ¸ð¸® °ü·Ã ¼³Á¤ - ÅèĹ Æ÷ÇÔ

±îÄ¡¼³³¯
Ãßõ ¼ö 212

Out Of Memory ¿À·ù·Î ÃßÁ¤ÇßÀ»½Ã¿¡ ¹ß»ý ½ÃÁ¡


Âü°í:http://www.nextree.co.kr/p3878/


°³¹ßÀÌ ¿Ï·áµÇ¾î »ç¿ëÀÚ Å×½ºÆ® ȤÀº ÀμöÀÎ°è ´Ü°è¿¡ ¸¹ÀÌ ¹ß»ý

(ºÎÇϸ¦ ÁÖ´Â ÀÛ¾÷ ¶§¹®?)


Exception in thread ¡°main¡±: java.lang.OutOfMemoryError: PermGen space (½ÇÁ¦ ÇØ´ç ·Î±×¿¡ ³²¾ÆÀÖ´ø ¿¡·¯)


Class³ª Method °´Ã¼¸¦ PermGen space¿¡ ÇÒ´çÇÏÁö ¸øÇÏ´Â °æ¿ì ¹ß»ýÇÏ¸ç ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ³Ê¹« ¸¹Àº class¸¦ ·ÎµåÇÒ ¶§ ¹ß»ýÇÑ´Ù. 


ÁÖ·Î À߸øµÈ ¼³°è/±¸Çö¿¡ ÀÇÇØ ¹ß»ýÇÑ´Ù. -XX:PermSize, -XX:MaxPermSize OptionÀ» ÀÌ¿ëÇÏ¿© ¿À·ù¸¦ ¼öÁ¤Çϱ⵵ ÇÑ´Ù.


(-XX:PermSize, -XX:MaxPermSize Option À» ÁÖ¾î ÇÏ·çÁ¤µµ ÅèĹÀÌ »¸Áö¾ÊÀº°Ç È®ÀÎ)


Perm Gen space¿¡¼­ ¹ß»ýÇÑ ¿À·ù¿¡ ´ëÇØ ´ëÀÀÇϱâ Àü¿¡ Perm Generation ¿µ¿ª¿¡ ´ëÇؼ­ ¾Ë¾Æº¸¸é 

Permanent GenerationÀº young°ú old¸¦ ±¸ºÐÇÏ´Â Generational Collector ¹æ½ÄÀÎ HotSpot JVM Áß ÇÑ ¿µ¿ªÀ¸·Î


°´Ã¼ÀÇ »ý¸í ÁÖ°¡±â ±æ´Ù°í ÆǴܵǴ °´Ã¼µéÀ» ÀÌ ¿µ¿ª¿¡ ÇÒ´çÇÏ¿© GC´ë»ó¿¡¼­ Á¦¿Ü¸¦ Çϱâ À§Çؼ­ ¸¸µé¾îÁø ¿µ¿ªÀÌ´Ù. 


ÁÖ·Î ÀÚ¹ÙÀÇ Class °´Ã¼µéÀ̳ª ¹®ÀÚ¿­¿¡ ¼ÓÇÑ String °´Ã¼µéÀÌ À§Ä¡ÇÑ´Ù.


ÀϹÝÀûÀ¸·Î ClassÀÇ ·ÎµùÀº ½Ã½ºÅÛÀÇ Class path¿¡ ÀÇÇؼ­ ·ÎµåµÈ Class °´Ã¼µé°ú ¿¡Çø®ÄÉÀÌ¼Ç ³» ±¸ÇöÀ¸·Î ´ÙÀ̳ª¹ÍÇÏ°Ô ·ÎµåµÇ´Â classµéÀÌ Àִµ¥ 


ÁÖ·Î ¹®Á¦´Â ¾ÖÇø®ÄÉÀÌ¼Ç ³» ·ÎÁ÷À¸·Î ´ÙÀ̳ª¹Í ÇÏ°Ô »ý¼ºµÇ´Â Classµé¿¡ ÀÇÇؼ­ ¹ß»ýµÈ´Ù. 


ÃÖ±Ù¿¡ ¸¹ÀÌ »ç¿ëµÇ´Â Spring, MyBatisµî°ú °°Àº ÇÁ·¹ÀÓ¿öÅ© µîÀÌ ÀÌ¿Í °°Àº ¹æ½ÄÀ» ÃëÇÏ°í ÀÖ´Ù. 


¶§¹®¿¡ À§ ÇÁ·¹ÀÓ¿öÅ©µéÀ» »ç¿ëÇÒ °æ¿ì OOME(Out Of Memory Error)¹ß»ý¿¡ ÁÖÀǸ¦ ÇØ¾ß ÇÑ´Ù.


- ±âº»ÀûÀÎ ¸Þ¸ð¸® ¼³Á¤ ¹æ½Ä

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m 

-XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+DisableExplicitGC"


* Âü°í : JVM ¸Þ¸ð¸® ¿É¼Ç


-Xms<size> : Java HeapÀÇ ÃÖÃÊ Å©±â(Start Size)¸¦ ÁöÁ¤ÇÑ´Ù. Java HeapÀº -Xms ¿É¼ÇÀ¸·Î ÁöÁ¤ÇÑ Å©±â·Î ½ÃÀÛÇϸç 

ÃÖ´ë -Xmx¿É¼ÇÀ¸·Î ÁöÁ¤ÇÑ Å©±â¸¸Å­ Ä¿Áø´Ù. 


Sun HotSpt JVM °è¿­¿¡¼­´Â ÃÖÃÊ Å©±â¿Í ÃÖ´ë Å©±â¸¦ µ¿ÀÏÇÏ°Ô ºÎ¿©ÇÒ °ÍÀ» ±ÇÀåÇÑ´Ù. Å©±âÀÇ µ¿ÀûÀÎ º¯°æ¿¡ ÀÇÇÑ ¿À¹ö Çìµé¸¦ ÃÖ¼ÒÈ­Çϱâ À§Çؼ­ÀÌ´Ù.


-Xmx<size> : Java HeapÀÇ ÃÖeo Å©±â(Maximum Size)¸¦ ÁöÁ¤ÇÑ´Ù. -Xms ¿É¼ÇÀ¸·Î ÁöÁ¤ÇÑ Å©±â·Î ½ÃÀÛÇϸç ÃÖ´ë -Xmx¿É¼ÇÀ¸·Î ÁöÁ¤ÇÑ Å©±â¸¸Å­ Ä¿Áø´Ù.


Sun HotSpt JVM °è¿­¿¡¼­´Â ÃÖÃÊ Å©±â¿Í ÃÖ´ë Å©±â¸¦ µ¿ÀÏÇÏ°Ô ºÎ¿©ÇÒ °ÍÀ» ±ÇÀåÇÑ´Ù. Å©±âÀÇ µ¿ÀûÀÎ º¯°æ¿¡ ÀÇÇÑ ¿À¹ö Çìµé¸¦ ÃÖ¼ÒÈ­Çϱâ À§Çؼ­ÀÌ´Ù.


-XX:PermSize=<size> : Permanent GenerationÀÇ ÃÖÃÊ Å©±â¸¦ ÁöÁ¤ÇÑ´Ù. Permanent GenerationÀÇ ÃÖ´ë Å©±â´Â MaxPermSize¿É¼Ç¿¡ ÀÇÇØ ÁöÁ¤µÈ´Ù. 

¸¹Àº ¼öÀÇ Class¸¦ ·ÎµùÇÏ´Â ApplicationÀº Å©±âÀÇ Permanent GenerationÀ» ÇÊ¿ä·Î Çϸç, 

Permanent GenerationÀÇ Å©±â°¡ À۾Ƽ­ Class¸¦ ·ÎµùÇÏÁö ¸øÇϸé Out of Memory Error°¡ ¹ß»ýÇÑ´Ù.


-XX:MaxPermSize=<size> : Permanent GenerationÀÇ ÃÖ´ë Å©±â¸¦ ÁöÁ¤ÇÑ´Ù. Permanent GenerationÀÇ ½ÃÀÛ Å©±â´Â PermSize¿É¼Ç¿¡ ÀÇÇØ ÁöÁ¤µÈ´Ù. 

¸¹Àº ¼öÀÇ Class¸¦ ·ÎµùÇÏ´Â ApplicationÀº PermSize¿Í MaxPermSize¿É¼ÇÀ» ÀÌ¿ëÇØ Permanent GenerationÀÇ Å©±â¸¦ Å©°Ô ÇØÁÖ´Â °ÍÀÌ ÁÁ´Ù. 

Permanent GenerationÀÇ Å©±â°¡ ÀÛÀ» °æ¿ì¿¡´Â Out of Memory Error°¡ ¹ß»ýÇÑ´Ù.


-XX:NewSize<size> : °´Ã¼°¡ »ý¼ºµÇ¾î ÀúÀåµÇ´Â Ãʱâ°ø°£ÀÇ Size·Î Eden+Survivor ¿µ¿ª


Ãâó: http://javafactory.tistory.com/328 [FreeLifeÀÇ ÀúÀå¼Ò]


MaxPermSize´Â -Xmx ·Î ÁöÁ¤ÇÑ ¸Þ¸ð¸® ¿ë·®°ú º°µµ·Î ÇÒ´çµÈ´Ù. 

Áï, -Xmx°¡ 256m ÀÌ°í, -XX:MaxPermSize°¡ 256m À̶ó¸é, ÃÖ´ë 512mÀÌ ÇÒ´çµÉ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù.


Ãâó: http://linuxism.tistory.com/286 [linuxism]


Jconsole µµ±¸¸¦ ÀÌ¿ëÇÑ ¸Þ¸ð¸® ¼³Á¤¹ý 

http://joont.tistory.com/42


¸Þ¸ð¸® ¿É¼Ç


¾Õ¿¡¼­µµ ¼³¸íÇÏ¿´µíÀÌ JVM Æ©´×ÀÇ ´ëºÎºÐÀÇ ¸Þ¸ð¸® Æ©´×ÀÌ°í ±×Áß¿¡¼­µµ JVM ¸Þ¸ð¸® Æ©´×Àº ¸Å¿ì Áß¿äÇÏ´Ù. 


°á±¹ Full GC ½Ã°£À» ÁÙÀÌ´Â °ÍÀÌ °ü°ÇÀε¥, Å« ¿ä±¸ »çÇ׸¸ ¾ø´Ù¸é, Àüü Heap Size´Â 1G Á¤µµ°¡ Àû´çÇÏ´Ù. 


±×¸®°í New´ë OldÀÇ ºñÀ²Àº ¼­¹ö ¾ÖÇø®ÄÉÀ̼ÇÀÇ °æ¿ì 1:2 ºñÀ²ÀÌ °¡Àå ÀûÀýÇÏ´Ù. ±×¸®°í PermSize´Â class°¡ ·ÎµùµÇ´Â °ø°£Àε¥, 


¹èÆ÷ÇÏ°íÀÚ ÇÏ´Â ¾ÖÇø®ÄÉÀ̼ÇÀÌ ¾ÆÁÖ Å©Áö ¾Ê´Ù¸é 128m Á¤µµ¸é Àû´çÇÏ´Ù. 

(º¸Åë 256m¸¦ ³ÑÁö ¾Ê´Â´Ù. 256m°¡ ³Ñ´Â´Ù¸é ¸ó°¡ ¾ÖÇø°ÄÉÀÌ¼Ç ¹èÆ÷³ª ÆÐŰ¡¿¡ ¹®Á¦°¡ ÀÖ´Ù°í ºÁ¾ß ÇÑ´Ù.)


±×¸®°í heap size´Â JVM¿¡¼­ ÀÚµ¿À¸·Î ´Ã¸®°Å³ª ÁÙÀÏ ¼ö °¡ ÀÖ´Ù. 


±×·¡¼­ -Xms¿Í -Xmx·Î ÃÖ¼Ò,ÃÖ´ë heap size¸¦ Á¤ÇÒ ¼ö Àִµ¥, Server ½Ã½ºÅÛÀÇ °æ¿ì Ç×»ó ÃÖ´ë »ç¿ë ¸Þ¸ð¸®·Î Àâ¾Æ ³õ´Â °ÍÀÌ ÁÁ´Ù. 


¸Þ¸ð¸®°¡ ´Ã¾î³­´Ù´Â °ÍÀº ºÎÇÏ°¡ ´Ã¾î³­´Ù´Â °ÍÀÌ°í, ºÎÇÏ°¡ ´Ã¾î³¯¶§ ¸Þ¸ð¸®¸¦ ´Ã¸®´Â ÀÛ¾÷ ÀÚü°¡ »õ·Î¿î ºÎÇÏ°¡ µÉ ¼ö Àֱ⠶§¹®¿¡, °°Àº °ªÀ» »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù.


ÀÌ·¸°Ô JVM ¸Þ¸ð¸®¸¦ Æ©´×ÇÏ¸é ´ÙÀ½°ú °°Àº ¿É¼ÇÀÌ µÈ´Ù.


-Xmx1024m –Xms1024m -XX:MaxNewSize=384m -XX:MaxPermSize=128m


ÀÌ·¸°Ô Çϸé Àüü ¸Þ¸ð¸® »ç¿ë·®Àº heap 1024m (ÀÌÁß¿¡¼­ new°¡ 384m) ±×¸®°í permÀÌ 128m °¡ µÇ°í, 


JVM ÀÚü°¡ »ç¿ëÇÏ´Â ¸Þ¸ð¸®°¡ º¸Åë 300~500m ³»¿Ü°¡ µÇ¼­ java process°¡ »ç¿ëÇÏ´Â ¸Þ¸ð¸® ·®Àº ´ë·« 1024+128+300~500 = ´ë·« 1.5G Á¤µµ°¡ µÈ´Ù.


Ãâó: http://bcho.tistory.com/788 [Á¶´ëÇùÀÇ ºí·Î±×]



Ãâó: https://epthffh.tistory.com/entry/JVM-¸Þ¸ð¸®-°ü·Ã-¼³Á¤ [¹°°í±â °³¹ßÀÚÀÇ ºí·Î±×]