GC Tuning
Last updated
Last updated
GC์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ํ๋ ์ต์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
GC์ ํ์์ฑ๊ณผ ํ๋์ ๋ฐฉ๋ฒ์ ๋ํด ์๊ฐํ๋ ค ํ๋ค.
๐ก ์ผ๋ฐ์ ์ผ๋ก ํ๋์ด ํ์ํ ๊ฒฝ์ฐ
๐ก GC ํ๋์ด ๋ถํ์ํ ์ํฉ
GC๋ ์์ฑ๋ Object๊ฐ ๋ง์ ์๋ก ๋ฐ์ํ๋ ๋น๋๊ฐ ๋์ด๋๋ค.
GC๋ฅผ ์ค์ด๊ธฐ ์ํด์๋, Object์ ์์ฑ์ ์ค์ด๋ ์์ ์ด ์ ํ ๋์ด์ผ ํ๋ค.
Suspend Time ์ ๊ฐ์์ ์์ผ๋ฉฐ ์ธ๋ถ์ ์ผ๋ก๋ Old Area์ ๋์ด๊ฐ๋ Object์ ์๋ฅผ ์ต์ํ ํ๋ ๊ฒ์ด๋ฉฐ, Full GC์ ์คํ ์๊ฐ์ ์ค์ด๋ ๊ฒ์ด๋ค.
๐ก Object ์์ ์ต์ํ
G1 GC๋ฅผ ์ ์ธํ Java 7 ๊น์ง์ ๋ชจ๋ Hotspot GC๋ Gernerational GC์ด๋ค.
Eden Area
์์ ์ด์๋จ์ Object๊ฐ Survivor Area
๋ฅผ ๊ฑฐ์ณ Old Area
๋ก ์ด๋ํ๋ ๋ฐฉ์์ธ๋ฐ, Old Area์ GC๋ Suspend Time์ด ๊ธธ์ด Old Area๋ก ์ค๋ Object์ ์๋ฅผ ์ค์ด๋ฉด Full GC์ ๋น๋๋ฅผ ์ค์ผ ์ ์๋ค.
๐ก FULL GC TIME ๋จ์ถ
Full GC์ ์๊ฐ์ Minor GC์ ๋นํด ๋งค์ฐ ์ค๋ ๊ฑธ๋ฆฐ๋ค.
Suspend Time์ด ์ค๋(1~2์ด) ๊ฑธ๋ฆฌ๊ฒ ๋๋ค๋ฉด ์ฌ๋ฌ ๋ถ๋ถ์์ Time Out์ด ๋ฐ์ํ ์ ์๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๊ณ ์, Old Area์ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ฒ ๋๋ฉด, OOM์ด ๋ฐ์ํ๊ฑฐ๋ Full GC์ ํ์๊ฐ ๋์ด๋๊ฒ ๋๋ค.
๐ก GC๋ฅผ ํ๋ํ๋ ์ต์
Heap์ ์ด๊ธฐ ํฌ๊ธฐ๋ฅผ ์ ์ดํ๋ -Xms , -Xmx
, New
:Old
์ ๋น์จ ์ค์ ํ๋ -XX:NewRatio
์ต์
์ ์ฌ์ฉํด์ผ ํ๋ค.
์์ธ์ด ๋จ์ํ๊ฒ Perm Area
์ ๋ฌธ์ ๋ผ๋ฉด, -XX:PermSize -XX:MaxPermSize ๋ก ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํด ์ฃผ๋๊ฒ์ด ์ข๋ค
๐ก ๋ชจ๋ํฐ๋ง
๊ฐ์ฅ ์ฌ์ด ๋ชจ๋ํฐ๋ง ๋ฐฉ๋ฒ์ jstat ๋ช
๋ น์ด๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค. -verbosegc
(GC๋ฅผ ์ถ๋ ฅํ๋ ์ต์
) ๊ณผ -Xloggc:<FILE_PATH>
(GC ๋ด์ญ ์ ์ฅํ๋ ์ต์
) ์ ์ฌ์ฉํ์ฌ ๋ก๊ทธ๋ฅผ ํ์ผํํ๋ ๋ฐฉ๋ฒ์ด๋ค
Memory ํฌ๊ธฐ์ GC ์๊ด ๊ด๊ณ
๐ธMemory ํฌ๊ธฐ๊ฐ ํฌ๋ฉด GC ๋ฐ์ ํ์๋ ์ค์ด๋ค๊ณ GC ์ํ ์๊ฐ์ ์ฆ๊ฐํ๋ค
๐นMemory ํฌ๊ธฐ๊ฐ ์์ผ๋ฉด GC ์ํ ์๊ฐ์ ์ค์ด๋ค๊ณ GC ๋ฐ์ ํ์๋ ์ฆ๊ฐํ๋ค.
๐ก GC ๊ด๋ จ ์ฅ์ ๋ฐ์ ์ ํ ๋ถ์ ๋ฐฉ๋ฒ
JAVA ์ดํ๋ฆฌ์ผ์ด์ ํ๊ฒฝ์์๋ ํํ JVM Heap ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จํ ์ค๋ฅ๋ค์ ํํ ์ ํ๊ฒ ๋๋ค.
JVM์ ๋ํ์ ์ธ ์ค๋ฅ ์ฅ์ ๋ Out Of Memory
๋ OOM, OOME ๋ผ๊ณ ํ๋๋ฐ JVM์ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ผ๋ก ๋ฐ์ํ๋ ์๋ฌ์ด๋ค.
๋ํ์ ์ผ๋ก ๋๊ฐ์ง ์ ํ์ด ์๋๋ฐ Java Heap space
: Heap ๊ณต๊ฐ์ด ๋ถ์กฑ์ด ๋ถ์กฑํ์ฌ ๋ฐ์ํ๋ค.
๊ณต๊ฐ ๋ถ์กฑ์ ์์ธ์ผ๋ก Heap์ ํฌ๊ธฐ๊ฐ ์์์ ๋ฐ์ํ๋ ๊ฒฝ์ฐ์ ์ดํ๋ฆฌ์ผ์ด์ ๋ก์ง์ ๋ฌธ์ ๋ก ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
PermGen space
: String pool, Class Method, ๊ฐ์ข
Method data ๋ฑ์ ์ ์ฅํ๋ ์ฉ๋๋ก ์ฌ์ฉํ๋ค.
JVM ๊ธฐ๋์ ๋ก๋ฉ๋๋ Class ๋๋ String ์๊ฐ ๋ง์ ๊ฒฝ์ฐ Classloader Leak์ ์ํด OOME๊ฐ ๋ฐ์๋ ์ ์๋ค.