[{"data":1,"prerenderedAt":520},["ShallowReactive",2],{"docs-page-tutorials\u002Fminecraft\u002Ffurther-optimizing-openj9-jvm-for-minecraft":3},{"id":4,"title":5,"body":6,"category":511,"deprecated":512,"description":513,"extension":514,"meta":515,"navigation":180,"path":516,"seo":517,"stem":518,"__hash__":519},"docs\u002Fko\u002Ftutorials\u002Fminecraft\u002Ffurther-optimizing-openj9-jvm-for-minecraft.md","OpenJ9 JVM에서 Minecraft 서버 성능 더 최적화하기",{"type":7,"value":8,"toc":498},"minimark",[9,14,30,36,62,68,72,77,87,93,97,107,113,117,128,134,138,141,150,154,158,211,215,494],[10,11,13],"h2",{"id":12},"선-할당된-메모리-사이즈-조정하기","선 할당된 메모리 사이즈 조정하기",[15,16,17,18,21,22,26,27,29],"p",{},"Minecraft는 메모리를 빠르게 할당하고 빠르게 버리는 게임입니다. 수명이 짧은 변수들이 많은 편이죠.",[19,20],"br",{},"\nOpenJ9 런타임에서는 이를 위해 ",[23,24,25],"code",{},"Nursery"," 공간을 런타임에서 갓 할당된 변수들을 저장하기 위해 따로 분리해 뒀는 데요, 이 공간을 벗어날 경우, GC가 호출되며, Java에서 돌아가는 모든 쓰레드가 멈추는 현상이 발생합니다. ",[23,28,25],{}," 공간을 미리 GC가 호출되는 횟수를 줄이면, 서버가 멈추는 현상이 줄어서 더욱 쾌적하게 서버를 즐길 수 있게 되겠죠.",[15,31,32,33,35],{},"대부분 실제 가용가능한 최소 메모리의 1\u002F4에서 실제 가용가능한 최대 메모리의 2\u002F5까지를 이 ",[23,34,25],{}," 공간에 할당하는 것을 권장합니다.",[15,37,38,39,42,43,46,47,50,51,53,54,42,58,61],{},"예를 들어, 사용 가능한 Heap 메모리 공간이 ",[23,40,41],{},"2048MB"," ~ ",[23,44,45],{},"4096MB"," 라면 (",[23,48,49],{},"-Xms2048M -Xmx4096M","), ",[23,52,25],{}," 공간을 ",[55,56,57],"strong",{},"512MB",[55,59,60],{},"1638MB"," 로 잡는 것을 권장합니다.",[15,63,64,65],{},"이 경우, flag는 다음과 같이 입력해 주세요: ",[23,66,67],{},"-Xmns512M -Xmnx1638M",[10,69,71],{"id":70},"garbage-collector-정책-바꾸기","Garbage Collector 정책 바꾸기",[73,74,76],"h3",{"id":75},"_1122-이하-서버","1.12.2 이하 서버",[15,78,79,80,83,84,86],{},"OpenJ9에서 기본으로 제공하는 ",[23,81,82],{},"gencon"," 정책을 사용하는 것을 권장합니다. 특히 위에서 명시한 ",[23,85,25],{}," 선 할당 시스템도 미리 사용하면 더욱 속도를 향상할 수 있습니다.",[15,88,89,90],{},"gencon은 기본으로 사용되지만, 강제하려면, flag를 다음과 같이 입력해 주세요: ",[23,91,92],{},"-Xgcpolicy:gencon",[73,94,96],{"id":95},"_113-이상","1.13 이상",[15,98,99,100,102,103,106],{},"1.13 이후로 서버의 부하가 커지면서, Garbage Collector가 해야 하는 일도 많아졌습니다.",[19,101],{},"\n이 경우, ",[23,104,105],{},"balanced"," 정책을 사용하는 것을 권장합니다.",[15,108,109,110],{},"적용하려면, flag를 다음과 같이 입력해 주세요: ",[23,111,112],{},"-Xgcpolicy:balanced",[10,114,116],{"id":115},"garbage-collector-강제-호출-비활성화-하기-선택","Garbage Collector 강제 호출 비활성화 하기 (선택)",[15,118,119,120,123,124,127],{},"Java에서는 비권장되는 기능이지만, ",[23,121,122],{},"System.GC"," 를 호출해서 Garbage Collector를 강제 호출할 수 있습니다. 하지만, Garbage Collector를 호출하면 서버가 일시적으로 멈추기 때문에, 서버가 멈추는 현상이 발생하고 TPS가 뚝 떨어지게 되죠. 몇몇 플러그인들이 이걸 사용하는 경우가 있는 데, 이게 렉 원인입니다. 플러그인이 메모리를 왕창 써 ",[23,125,126],{},"Out of Memory"," 가 발생하는 것이 아니라면 비활성화 하는 것을 권장합니다.",[15,129,130,131],{},"적용하려면 다음 flag를 추가합니다: ",[23,132,133],{},"-Xdisableexplicitgc",[10,135,137],{"id":136},"jvm을-가상서버에-최적화-하기","JVM을 가상서버에 최적화 하기",[15,139,140],{},"OpenJ9은 CPU가 Hypervisor에게서 할당 받는 가상서버에서 구동을 원활하게 하기 위해 Just-In-Time 컴파일러가 재 컴파일 하는 것을 최대한 막아서더록 유도하고, 메모리 I\u002FO를 최소화 하도록 변경합니다. 단 상대적으로 플러그인 등에서 사용하기 위한 CPU 처리 속도가 다소 느려질 수 있습니다.",[15,142,143,144,146,147],{},"(만약 이 플래그를 적용 후 렉이 더 심해졌다면, 적용을 취소하세요.)",[19,145],{},"\n적용하려면 다음 flag를 추가합니다: ",[23,148,149],{},"-Xtune:virtualized",[10,151,153],{"id":152},"자동-설정-스크립트","자동 설정 스크립트",[73,155,157],{"id":156},"windows","Windows",[159,160,165],"pre",{"className":161,"code":162,"language":163,"meta":164,"style":164},"language-bat shiki shiki-themes github-dark","@echo off\n\nset \u002Fa HEAP_SIZE=4096\nset \u002Fa NURSERY_MIN=%HEAP_SIZE%\u002F4\nset \u002Fa NURSERY_MAX=%HEAP_SIZE%\u002F5*2\n\njava -Xms%HEAPSIZE%M -Xmx%HEAPSIZE%M -Xmns%NURSERY_MIN%M -Xmnx%NURSERY_MIN%M -Xgcpolicy:balanced -Xdisableexplicitgc -jar paperclip.jar\n","bat","",[23,166,167,175,182,188,194,200,205],{"__ignoreMap":164},[168,169,172],"span",{"class":170,"line":171},"line",1,[168,173,174],{},"@echo off\n",[168,176,178],{"class":170,"line":177},2,[168,179,181],{"emptyLinePlaceholder":180},true,"\n",[168,183,185],{"class":170,"line":184},3,[168,186,187],{},"set \u002Fa HEAP_SIZE=4096\n",[168,189,191],{"class":170,"line":190},4,[168,192,193],{},"set \u002Fa NURSERY_MIN=%HEAP_SIZE%\u002F4\n",[168,195,197],{"class":170,"line":196},5,[168,198,199],{},"set \u002Fa NURSERY_MAX=%HEAP_SIZE%\u002F5*2\n",[168,201,203],{"class":170,"line":202},6,[168,204,181],{"emptyLinePlaceholder":180},[168,206,208],{"class":170,"line":207},7,[168,209,210],{},"java -Xms%HEAPSIZE%M -Xmx%HEAPSIZE%M -Xmns%NURSERY_MIN%M -Xmnx%NURSERY_MIN%M -Xgcpolicy:balanced -Xdisableexplicitgc -jar paperclip.jar\n",[73,212,214],{"id":213},"linux","Linux",[159,216,220],{"className":217,"code":218,"language":219,"meta":164,"style":164},"language-sh shiki shiki-themes github-dark","#!\u002Fbin\u002Fbash\n\n#\n# Properly tunes a Minecraft server to run efficiently under the\n# OpenJ9 (https:\u002F\u002Fwww.eclipse.org\u002Fopenj9) JVM.\n#\n# Licensed under the MIT license.\n# Original author: https:\u002F\u002Fsteinborn.me\u002Fposts\u002Ftuning-minecraft-openj9\u002F\n#\n\n## BEGIN CONFIGURATION\n\n# HEAP_SIZE: 할당할 메모리 (in MB) 입니다.\n#            서버에 기본 적으로 4096MB으로 설정되어 있습니다.\nHEAP_SIZE=4096\n\n# JAR_NAME:  이것은 당신의 서버 버킷(.jar) 파일명을 지정하는 것입니다.\n#            기본은 \"paperclip.jar\"입니다.\n#\n#            Side note: 만약 Paper Spigot을 사용하지 않는 경우 (http:\u002F\u002Fpapermc.io),\n#            또는 파일 명이 다른 경우 변경해야합니다.\nJAR_NAME=paperclip.jar\n\n## END CONFIGURATION -- 이 라인 아래의 어떤 것도 건들지 마세요!\n\n## BEGIN SCRIPT\n\n# Compute the nursery size.\nNURSERY_MINIMUM=$(($HEAP_SIZE \u002F 4))\nNURSERY_MAXIMUM=$(($HEAP_SIZE * 2 \u002F 5))\n\n# Launch the server.\nCMD=\"java -Xms${HEAP_SIZE}M -Xmx${HEAP_SIZE}M -Xmns${NURSERY_MINIMUM}M -Xmnx${NURSERY_MAXIMUM}M -Xgcpolicy:balanced -Xdisableexplicitgc -jar ${JAR_NAME}\"\necho \"launching server with command line: ${CMD}\"\n${CMD}\n\n## END SCRIPT\n","sh",[23,221,222,228,232,237,242,247,251,256,262,267,272,278,283,289,295,310,315,321,327,332,338,344,355,360,366,371,377,382,388,399,416,421,427,463,477,483,488],{"__ignoreMap":164},[168,223,224],{"class":170,"line":171},[168,225,227],{"class":226},"sAwPA","#!\u002Fbin\u002Fbash\n",[168,229,230],{"class":170,"line":177},[168,231,181],{"emptyLinePlaceholder":180},[168,233,234],{"class":170,"line":184},[168,235,236],{"class":226},"#\n",[168,238,239],{"class":170,"line":190},[168,240,241],{"class":226},"# Properly tunes a Minecraft server to run efficiently under the\n",[168,243,244],{"class":170,"line":196},[168,245,246],{"class":226},"# OpenJ9 (https:\u002F\u002Fwww.eclipse.org\u002Fopenj9) JVM.\n",[168,248,249],{"class":170,"line":202},[168,250,236],{"class":226},[168,252,253],{"class":170,"line":207},[168,254,255],{"class":226},"# Licensed under the MIT license.\n",[168,257,259],{"class":170,"line":258},8,[168,260,261],{"class":226},"# Original author: https:\u002F\u002Fsteinborn.me\u002Fposts\u002Ftuning-minecraft-openj9\u002F\n",[168,263,265],{"class":170,"line":264},9,[168,266,236],{"class":226},[168,268,270],{"class":170,"line":269},10,[168,271,181],{"emptyLinePlaceholder":180},[168,273,275],{"class":170,"line":274},11,[168,276,277],{"class":226},"## BEGIN CONFIGURATION\n",[168,279,281],{"class":170,"line":280},12,[168,282,181],{"emptyLinePlaceholder":180},[168,284,286],{"class":170,"line":285},13,[168,287,288],{"class":226},"# HEAP_SIZE: 할당할 메모리 (in MB) 입니다.\n",[168,290,292],{"class":170,"line":291},14,[168,293,294],{"class":226},"#            서버에 기본 적으로 4096MB으로 설정되어 있습니다.\n",[168,296,298,302,306],{"class":170,"line":297},15,[168,299,301],{"class":300},"s95oV","HEAP_SIZE",[168,303,305],{"class":304},"snl16","=",[168,307,309],{"class":308},"sU2Wk","4096\n",[168,311,313],{"class":170,"line":312},16,[168,314,181],{"emptyLinePlaceholder":180},[168,316,318],{"class":170,"line":317},17,[168,319,320],{"class":226},"# JAR_NAME:  이것은 당신의 서버 버킷(.jar) 파일명을 지정하는 것입니다.\n",[168,322,324],{"class":170,"line":323},18,[168,325,326],{"class":226},"#            기본은 \"paperclip.jar\"입니다.\n",[168,328,330],{"class":170,"line":329},19,[168,331,236],{"class":226},[168,333,335],{"class":170,"line":334},20,[168,336,337],{"class":226},"#            Side note: 만약 Paper Spigot을 사용하지 않는 경우 (http:\u002F\u002Fpapermc.io),\n",[168,339,341],{"class":170,"line":340},21,[168,342,343],{"class":226},"#            또는 파일 명이 다른 경우 변경해야합니다.\n",[168,345,347,350,352],{"class":170,"line":346},22,[168,348,349],{"class":300},"JAR_NAME",[168,351,305],{"class":304},[168,353,354],{"class":308},"paperclip.jar\n",[168,356,358],{"class":170,"line":357},23,[168,359,181],{"emptyLinePlaceholder":180},[168,361,363],{"class":170,"line":362},24,[168,364,365],{"class":226},"## END CONFIGURATION -- 이 라인 아래의 어떤 것도 건들지 마세요!\n",[168,367,369],{"class":170,"line":368},25,[168,370,181],{"emptyLinePlaceholder":180},[168,372,374],{"class":170,"line":373},26,[168,375,376],{"class":226},"## BEGIN SCRIPT\n",[168,378,380],{"class":170,"line":379},27,[168,381,181],{"emptyLinePlaceholder":180},[168,383,385],{"class":170,"line":384},28,[168,386,387],{"class":226},"# Compute the nursery size.\n",[168,389,391,394,396],{"class":170,"line":390},29,[168,392,393],{"class":300},"NURSERY_MINIMUM",[168,395,305],{"class":304},[168,397,398],{"class":300},"$(($HEAP_SIZE \u002F 4))\n",[168,400,402,405,407,410,413],{"class":170,"line":401},30,[168,403,404],{"class":300},"NURSERY_MAXIMUM",[168,406,305],{"class":304},[168,408,409],{"class":300},"$(($HEAP_SIZE ",[168,411,412],{"class":304},"*",[168,414,415],{"class":300}," 2 \u002F 5))\n",[168,417,419],{"class":170,"line":418},31,[168,420,181],{"emptyLinePlaceholder":180},[168,422,424],{"class":170,"line":423},32,[168,425,426],{"class":226},"# Launch the server.\n",[168,428,430,433,435,438,440,443,445,448,450,453,455,458,460],{"class":170,"line":429},33,[168,431,432],{"class":300},"CMD",[168,434,305],{"class":304},[168,436,437],{"class":308},"\"java -Xms${",[168,439,301],{"class":300},[168,441,442],{"class":308},"}M -Xmx${",[168,444,301],{"class":300},[168,446,447],{"class":308},"}M -Xmns${",[168,449,393],{"class":300},[168,451,452],{"class":308},"}M -Xmnx${",[168,454,404],{"class":300},[168,456,457],{"class":308},"}M -Xgcpolicy:balanced -Xdisableexplicitgc -jar ${",[168,459,349],{"class":300},[168,461,462],{"class":308},"}\"\n",[168,464,466,470,473,475],{"class":170,"line":465},34,[168,467,469],{"class":468},"sDLfK","echo",[168,471,472],{"class":308}," \"launching server with command line: ${",[168,474,432],{"class":300},[168,476,462],{"class":308},[168,478,480],{"class":170,"line":479},35,[168,481,482],{"class":300},"${CMD}\n",[168,484,486],{"class":170,"line":485},36,[168,487,181],{"emptyLinePlaceholder":180},[168,489,491],{"class":170,"line":490},37,[168,492,493],{"class":226},"## END SCRIPT\n",[495,496,497],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}",{"title":164,"searchDepth":177,"depth":177,"links":499},[500,501,505,506,507],{"id":12,"depth":177,"text":13},{"id":70,"depth":177,"text":71,"children":502},[503,504],{"id":75,"depth":184,"text":76},{"id":95,"depth":184,"text":96},{"id":115,"depth":177,"text":116},{"id":136,"depth":177,"text":137},{"id":152,"depth":177,"text":153,"children":508},[509,510],{"id":156,"depth":184,"text":157},{"id":213,"depth":184,"text":214},"Stella IT Console\u002FMinecraft",false,"OpenJ9 만으로도 빨라지지만, 더 빠르게 만들어 봅시다.","md",{},"\u002Fko\u002Ftutorials\u002Fminecraft\u002Ffurther-optimizing-openj9-jvm-for-minecraft",{"title":5,"description":513},"ko\u002Ftutorials\u002Fminecraft\u002Ffurther-optimizing-openj9-jvm-for-minecraft","kwfpf-YJd3-Jy9iQ6ny7_WBa0GIzys0FJIoaVZpkqYo",1783152353928]