์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- aws saa ํฉ๊ฒฉ
- docker
- ๋ค์ค ์ปจํ ์ด๋
- docker-compose kafka
- redis ํ ์คํธ์ฝ๋
- redis ์กฐํ
- ์คํํ๋ ๋ฏธ์ค
- ์ ํจ์ค ๋น๋ ์ค๋ฅ
- ํ๋ก๊ทธ๋๋จธ์ค ์ปฌ๋ฌ๋ง๋ถ
- ํ์ดํผ๋ฐ์ด์
- docker ps -a
- aws ์ฟ ํฐ
- nGrinder
- jvm ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ
- Codedeploy ์ค๋ฅ
- ์๋ฒ ํฐ์ง๋ ๋์ปค ์ฌ์คํ
- docker compose
- prod docker-compose
- private subnet ec2 ๋ก์ปฌ ์ ์
- s3 log ์ ์ฅ
- ํ๋ก๊ทธ๋๋จธ์ค ํฉ์นํ์์๊ธ
- ์๋ฐ
- ์ ํจ์ค ์ค์ผ์ค๋ฌ
- s3 ์ด๋ฏธ์ง ์ ์ฅ
- s3 ์ด๋ฏธ์ง ๋ค์ด๋ก๋
- Entity
- ํ๋ก๊ทธ๋๋จธ์ค
- JPA
- AWS Certified Solutions Architect - Associate
- Kafka
- Today
- Total
๐๐ข๐๐ โ๐๐๐ ๐๐๐ก๐๐ ๐๐๐๐โง
[REVIEW] JVM ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ - 3.2 ๊ฐ๋น์ง ์ปฌ๋ ํฐ ์ข ๋ฅ, ๋ก๊ทธ, ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํ์ ์ ๋ต ๋ณธ๋ฌธ
[REVIEW] JVM ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ - 3.2 ๊ฐ๋น์ง ์ปฌ๋ ํฐ ์ข ๋ฅ, ๋ก๊ทธ, ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํ์ ์ ๋ต
๐คRyusun๐ค 2025. 2. 22. 09:33ํด๋์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ
ํด๋์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ๊ณ ์ฑ๋ฅ ๋ฐ ์ ์ง์ฐ ์ปฌ๋ ํฐ์ ๊ตฌ๋ถํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์ฉ์ด๋ก, ํซ์คํ ๊ฐ์ ๋จธ์ ์์ ์ ๊ณตํ๋ ์ ํต์ ์ธ ๊ฐ๋น์ง ์ปฌ๋ ์ ๋ฐฉ์๋ค์ ํฌํจํ๋ค. ์ด ์ปฌ๋ ํฐ๋ค์ ๊ฐ๊ฐ์ ํน์ฑ์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํํ๋ฉฐ, ์ฃผ๋ก ๋ค์๊ณผ ๊ฐ์ ์ข ๋ฅ๊ฐ ์๋ค:
- ์๋ฆฌ์ผ(Serial) ๊ฐ๋น์ง ์ปฌ๋ ํฐ: ๋จ์ผ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ํํ๋ค. ๊ฐ๋จํ๊ณ ํจ์จ์ ์ด๋ฉฐ, ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ๋ฆฌ์์ค๊ฐ ์ ํ๋ ํ๊ฒฝ์์ ์ ํฉํ๋ค.
- ํ๋ด(Parallel) ๊ฐ๋น์ง ์ปฌ๋ ํฐ: ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ณ๋ ฌ๋ก ์ํํ๋ค. CPU๋ฅผ ํจ์จ์ ์ผ๋ก ํ์ฉํ์ฌ ์งง์ ์๊ฐ ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ ์ ์์ง๋ง, ์ฌ์ ํ ์ผ์ ์ ์ง๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ํจ๋ฌ๋ ์ค์บ๋น์ง(Parallel Scavenge) ๊ฐ๋น์ง ์ปฌ๋ ํฐ: ํ๋ด์ ์ ์ฌํ์ง๋ง, ์งง์ ์ผ์ ์ ์ง ์๊ฐ๊ณผ ๋์ ์ฒ๋ฆฌ๋์ ๋ชฉํ๋ก ํ๋ค. ๊ฐ์ฒด์ ์์กด ์ฃผ๊ธฐ๋ฅผ ๊ณ ๋ คํ์ฌ ์ ์ธ๋ ๊ฐ์ฒด์ ํ์๋ฅผ ์ต์ ํํ๋ค.
- ํจ๋ฌ๋ ์ฌ๋(Parallel Old) ๊ฐ๋น์ง ์ปฌ๋ ํฐ: ๊ตฌ์ธ๋(Old Generation)์์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ณ๋ ฌ๋ก ์ํํ๋ ์ปฌ๋ ํฐ๋ก, ํจ๋ฌ๋ ์ค์บ๋น์ง ์ปฌ๋ ํฐ์ ํจ๊ป ์ฌ์ฉ๋๋ค.
- ์๋ฆฌ์ผ ์ฌ๋(Serial Old) ๊ฐ๋น์ง ์ปฌ๋ ํฐ: ๋จ์ผ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ธ๋์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ํํ๋ค. ์์์ด ์ ํ๋ ํ๊ฒฝ์์ ํจ๊ณผ์ ์ด๋ฉฐ, ๋ค๋ฅธ ์๋ฆฌ์ผ ์ปฌ๋ ํฐ์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ค.
- CMS(Concurrent Mark-Sweep) ๊ฐ๋น์ง ์ปฌ๋ ํฐ: ๋์(mark-sweep) ๋ฐฉ์์ผ๋ก ๊ตฌ์ธ๋ ๊ฐ์ฒด๋ฅผ ํ์ํ๋ ์ปฌ๋ ํฐ๋ก, ์๋ต์ฑ์ด ์ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํ๋ค. ์ฌ์ฉ์๊ฐ ์ง์ ํ ์์ ์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ํํ ์ ์์ด ์ผ์ ์ ์ง ์๊ฐ์ ์ค์ด๋ ๋ฐ ๊ธฐ์ฌํ๋ค.
๋ณ๋ ฌ๊ณผ ๋์
๋ณ๋ ฌ๊ณผ ๋์๋ ๋ชจ๋ '๋์์ฑ ํ๋ก๊ทธ๋๋ฐ'๊ณผ ๊ด๋ จ๋ ๊ธฐ์ ์ฉ์ด์ด๋ค.
- ๋ณ๋ ฌ(parallel) : GC ์ค๋ ๋๋ค ์ฌ์ด์ ๊ด๊ณ๋ฅผ ์ค๋ช ํ๋ฉฐ, 'GC ์ค๋ ๋ ๋ค์๊ฐ' ๋์์ ํจ๊ป ์์ ์ ์ํํ๋ค. ๋ณดํต ์ด๋ ์ฌ์ฉ์ ์ค๋ ๋๋ ์ ์ง ์ํ๋ค.
- ๋์(concurrent) : GC ์ค๋ ๋์ ์ฌ์ฉ์ ์ค๋ ๋์ ๊ด๊ณ๋ฅผ ์ค๋ช ํ๋ฉฐ, 'GC ์ค๋ ๋์ ์ฌ์ฉ์ ์ค๋ ๋๊ฐ' ๋์์ ์ผ์ ์งํํ๋ค๋ ๋ป์ด๋ค. ์ฌ์ฉ์ ์ค๋ ๋๊ฐ ๋ฉ์ถฐ ์์ง ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋น์ค ์์ฒญ์ ์๋ตํ ์ ์๋ค. ํ์ง๋ง GC ์ค๋ ๋๊ฐ ์์คํ ์์ ์ผ๋ถ๋ฅผ ์ ์ ํ๋ฏ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ๋ฆฌ๋์ ํ์๋ณด๋ค ๋ฎ์์ง ์ ์๋ค.
1. ์๋ฆฌ์ผ ์ปฌ๋ ํฐ
- ๊ฐ์ฅ ๊ธฐ์ด์ ์ด๋ก ์ค๋๋ ์ปฌ๋ ํฐ
- ๋จ์ผ ์ค๋ ๋
- ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ์์๋๋ฉด 'ํ์๊ฐ ์๋ฃ๋ ๋๊น์ง ๋ค๋ฅธ ๋ชจ๋ ์์ ์ค๋ ๋๊ฐ ๋ฉ์ถฐ ์์ด์ผ ํ๋ค.
- ๊ฐ์ฉ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ์ ํ๊ฒฝ์์๋ ์๊ณ ๋ฆฌ์ฆ ์์ฒด๊ฐ ์๊ตฌํ๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๊ฐ์ฅ ์ ๋ค.
- ๋จ์ผ ์ฝ์ด ํ๋ก์ธ์ ๋๋ ์ฝ์ด ์๊ฐ ์ ์ ํ๊ฒฝ์ด๋ผ๋ฉด ์๋ฆฌ์ผ ์ปฌ๋ ํฐ๋ ์ค๋ ๋ ์ํธ ์์ฉ์ ์ํ ์ค๋ฒํค๋๊ฐ ์๋ค.
- ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ง์คํ๋ฏ๋ก ์์ฐ์ค๋ฝ๊ฒ ํ์ ํจ์จ์ ์ต๋๋ก ๋์ด๋ธ๋ค.
- ์๋ฆฌ์ผ ์ปฌ๋ ํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ -XX:+UserSerialGC ๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐํ๋ฉด ๋๋ค.
2. ํ๋ด ์ปฌ๋ ํฐ
- ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ํ์ฉํ์ฌ ์๋ฆฌ์ผ ์ปฌ๋ ํฐ๋ฅผ ๋ณ๋ ฌํํ ๋ฒ์ ์ด๋ค.
- ์ค๋ ๋ ํ์์ ๋ฉํฐ์ค๋ ๋๋ฅผ ์ด์ฉํ๋ค.
- GC ์ค๋ ๋์ ์ฌ์ฉ์ ์ค๋ ๋๊ฐ ๋์์ ์คํ๋๋๊ฒ์ ์ต์ด๋ก ์คํํด ๋๋ค.
- ํซ์คํ ๊ฐ์ ๋จธ์ ์ญ์ฌ์์ ์ฌ๋ผ์ง ์ต์ด์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ
- ๋จ์ผ ์ฝ์ด ํ๋ก์ธ์์์๋ ์๋ฆฌ์ผ ์ปฌ๋ ํฐ๋ณด๋ค ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค.
- ์ค๋ ๋๋ค์ ์ํธ ์์ฉ์ ๋ฐ๋ฅธ ์ค๋ฒ ํ๋ ์กด์ฌ
- ์ฝ์ด์๊ฐ ๋์ด๋๋ฉด ํ๋ด๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํ๋ ๋์์ ์์คํ ์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ๊ฐ๋ฅ์ฑ์ด ์ปค์ง๋ค.
3. ํจ๋ฌ๋ ์ค์บ๋น์ง ์ปฌ๋ ํฐ
- ์ ์ธ๋์ฉ์ด๋ฉฐ, PS ์ปฌ๋ ํฐ๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
- ๋งํฌ-์นดํผ ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ์ดํ๋ฉฐ, ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ์ด์ฉํด ํ์ํ๋ค.
- ํ๋ก์ธ์๊ฐ ์ฌ์ฉ์ ์ฝ๋๋ฅผ ์คํํ๋ ๋ฐ ์ฌ์ฉํ๋ ์๊ฐ๊ณผ ํ๋ก์ธ์๊ฐ ์๋นํ๋ ์ด์๊ฐ์ ๋น์จ์ ๋ปํ๋ ์ฒ๋ฆฌ๋์ ์ ์ดํ๋ ๊ฒ ๋ชฉํ๋ค.
- ์ฒ๋ฆฌ๋์ ๊ด์ฌ์ด ๋ง์ ์ฒ๋ฆฌ๋ ์ปฌ๋ ํฐ๋ผ๊ณ ใ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค.
- -XX:MaxGCPauseMillis : ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ง ์๊ฐ์ ์ต๋๊ฐ์ ์ง์ . ์ปฌ๋ ํฐ๋ ๋ฉ๋ฌด๋ฆฌ ํ์์ ์์ฉ๋๋ ์๊ฐ์ด ์ด ์ค์ ๊ฐ์ ๋์ง ์๋๋ค.
- -XX:GCTimeRatio: ์ฒ๋ฆฌ๋์ ์ง์ ์ง์ . ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด ์คํ ์๊ฐ์ ๋ํ ๊ฐ๋น์ง ์ปฌ๋ ์ ์๊ฐ์ ๋ฐฐ์จ
- -XX:+UserAdaptiveSizePolicy : ์ ์ธ๋์ ํฌ๊ธฐ, ์๋ด๊ณผ ์์กด์์ ๊ณต๊ฐ ๋น์จ, ๊ตฌ์ธ๋๋ก ์ฎ๊ฒจ๊ฐ ๊ฐ์ฒด์ ํฌ๊ธฐ ๋ฑ. ์ธ๋ถ ์ค์ ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํ์ง ์์๋ ๋๋ค. ๊ฐ์ ๋จธ์ ์ด ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ์ ๋ณด๋ฅผ ์์งํ์ฌ ์ต์ ์ ์ ์ง ์๊ฐ๊ณผ ์ต๋ ์ฒ๋ฆฌ๋์ ์ ๊ณตํ ์ ์๋๋ก ๋ชจ๋ ๋งค๊ฐ ๋ณ์์ ๊ฐ์ ๋์ ์ผ๋ก ์กฐ์จํด ์ค๋ค. GC ์ธ๊ฐ ๊ณตํ์ด๋ผ๊ณ ๋ ํ๋ค.
- ๊ฐ์๋จธ์ ์ด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ต์ ํ๋ฅผ ํด์ฃผ๋ฏ๋ก ์๋์ผ๋ก ์ต์ ํํ๊ธฐ ์ด๋ ค์ด ์ด์์์๊ฒ๋ ์ ์ํ ์กฐ์จ ์ ๋ต์ ์ง์ํ๋ PS ์ปฌ๋ ํฐ๊ฐ ๊ด์ฐฎ์ ์ ํ์ง์ด๋ค.
- ์ ์ํ ์กฐ์จ ์ ๋ต์ ํ๋ด ์ปฌ๋ ํฐ์ ์ฐจ๋ณํํ๋ ์ค์ํ ํน์ฑ์ด๋ค.
4. ์๋ฆฌ์ผ ์ฌ๋ ์ปฌ๋ ํฐ
- ์๋ฆฌ์ผ ์ปฌ๋ ํฐ์ ๊ตฌ์ธ๋์ฉ ๋ฒ์
- ๋จ์ผ ์ค๋ ๋ ์ปฌ๋ ํฐ, ๋งํฌ-์ปดํฉํธ ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉ
- ์ฃผ๋ก ํด๋ผ์ด์ธํธ์ฉ ํซ์คํ ๊ฐ์ ๋จธ์ ์์ ์ฌ์ฉํ๋ค.
5. ํจ๋ฌ๋ ์ฌ๋ ์ปฌ๋ ํฐ
- PS ์ปฌ๋ ํฐ์ ๊ตฌ์ธ๋์ฉ ๋ฒ์
- ๋ฉํฐ์ค๋ ๋๋ฅผ ์ด์ฉํ ๋ณ๋ ฌ ํ์๋ฅผ ์ง์ํ๋ฉฐ ๋งํฌ-์ปดํฉํธ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๊ตฌํ๋์๋ค.
- ๊ตฌ์ธ๋ ์ปฌ๋ ํฐ๋ค์ ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ ํฌ๊ณ ํ๋์จ์ด๋ ์ข์ง๋ง, ๋จ์ผ ์ค๋ ๋๋ก ๋์ ํ์ฌ ์๋ฒ์ฉ ํ๋ก์ธ์์ ๋ณ๋ ฌ ์ฒ๋ฆฌ ์ญ๋์ ๋์ด๋ผ ์ ์์๋ค.
- ์ฒ๋ฆฌ๋์ด ์ค์ํ๊ฑฐ๋ ํ๋ก์ธ์ ์์์ด ๋ถ์กฑํ ์ํฉ์ด๋ผ๋ฉด ์ฒ๋ฆฌ๋์ ์ค์ํ๋ PS ์ปฌ๋ ํฐ์ ํจ๋ฌ๋ ์ฌ๋ ์กฐํฉ์ด ์ ํฉํ๋ค.
- ์ฌ์ฉํ๊ธฐ ์ํด์๋ XX:+UserParallelGC ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํ๋ค.
6. CMS ์ปฌ๋ ํฐ
- ํ์์ ์ธ๊ธฐ ๋จ๊ณ ๋ชจ๋๋ฅผ ์ฌ์ฉ์ ์ค๋ ๋์ ๋์์ ์ํํ๋ค.
- CMS ์ปฌ๋ ํฐ์ ๋ชฉ์ ์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ฐ๋ฅธ ์ผ์ ์ ์ง ์๊ฐ์ ์ต์๋ก ์ค์ด๋ ๊ฒ์ด๋ค.
- ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฃผ๋ ฅ ๋ถ์ผ๋ ์ธํฐ๋ท ์๋น์ค์ ๋ฐฑ์๋์ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฐ์ ๋ธ๋ผ์ฐ์ -์๋ฒ ์์คํ ์ด๊ธฐ ๋๋ฌธ์ ์๋น์ค ์๋ต ์๊ฐ์ด ์ค์ํ๋ฏ๋ก ์์คํ ์ ์ผ์ ์ ์ง ์๊ฐ์ด ์งง์์ผ ์ฌ์ฉ์์๊ฒ ๋ ๋์ ๊ฒฝํ์ ์ค ์ ์๋ค.
- ๋งํฌ-์ค์ ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ์ด๋ก ๊ตฌํ๋์์ผ๋ฉฐ, ๊ธฐ์กด ์ปฌ๋ ํฐ๋ค๋ณด๋ค ํจ์ฌ ๋ณต์กํ๊ฒ ๋์ํ๋ค.
- ์ ์ฒด ๊ณผ์ ์ ์ต์ด ํ์ - ๋์ ํ์ - ์ฌํ์ - ๋์ ์ธ๊ธฐ ๋ก ๊ตฌ์ฑ๋๋ค.
- "์ต์ด ํ์"์ "์ฌํ์" ๋จ๊ณ๋ '์คํฑ ๋ ์๋' ๋ฐฉ์์ด๋ค.
- ์ต์ด ํ์ ๋จ๊ณ์์๋ GC ๋ฃจํธ์ ์ง์ ์ฐ๊ฒฐ๋ ๊ฐ์ฒด๋ค๋ง ํ์ํ๊ธฐ ๋๋ฌธ์ ์์ฃผ ๋น ๋ฅด๊ฒ ๋๋๋ค.
- ๋์ ํ์ ๋จ๊ณ์์๋ GC ๋ฃจํธ์ ์ง์ ์ฐ๊ฒฐ๋ ๊ฐ์ฒด๋ค๋ก๋ถํฐ ์์ํด ๊ฐ์ฒด ๊ทธ๋ํ ์ ์ฒด๋ฅผ ํ์ํ๋ค. ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ์ง๋ง ์ฌ์ฉ์ ์ค๋ ๋๋ฅผ ๋ฉ์ถ์ง ์๊ณ GC ์ค๋ ๋์ ๋์์ ์คํ๋๋ค.
- ์ฌํ์ ๋จ๊ณ์์๋ ๋์ ํ์ ๋์ค ์ฌ์ฉ์ ์ค๋ ๋๊ฐ ์ฐธ์กฐ ๊ด๊ณ๋ฅผ ๋ณ๊ฒฝํ ๊ฐ์ฒด๋ค์ ๋ฐ๋ก์ก๋๋ค. ์ด ๋จ๊ณ์ ์ผ์ ์ ์ง ์๊ฐ์ ๋ณดํต ์ต์ด ํ์ ๋จ๊ณ๋ณด๋ค ์ด์ง ๊ธธ๋ฉฐ, ๋์ ํ์ ๋จ๊ณ๋ณด๋ค๋ ํจ์ฌ ์งง๋ค.
- ๋์ ์ธ๊ธฐ ๋จ๊ณ์์๋ ์ฃฝ์ ๊ฐ์ฒด๋ค์ ์ธ์ด ๋ด์ผ๋ฉฐ, ์ด ๋จ๊ณ ์ญ์ ์ฌ์ฉ์ ์ค๋ ๋๋ฅผ ๋ฉ์ถ์ง ์๊ณ ๋์์ ์ํํ๋ค.
- ์ค์ํ ํน์ฑ์ ์ ์ฒด ๊ณผ์ ์ค ๊ฐ์ฅ ๊ธด ๋์ ํ์์ ๋์ ์ธ๊ธฐ ๋จ๊ณ์์ ์ฌ์ฉ์ ์ค๋ ๋๋ฅผ ๋ฉ์ถ์ง ์๋๋ค.
- CMS ์ปฌ๋ ํฐ์ ์ฃผ์ ์ฅ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ค๋ ๋์ ๋ณ๋ ฌ๋ก ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ํํ์ฌ ์ ์ง ์๊ฐ์ ์ต์ํํ๋ ๊ฒ์ด๋ค.
- CMS ์ปฌ๋ ํฐ์ ์ฒซ๋ฒ์งธ ๋จ์ ์ ํ๋ก์ธ์ ์์์ ๋ฏผ๊ฐํ๋ค๋ ์ ์ด๋ค. ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ํํ๋ GC ์ค๋ ๋๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํ๋ก์ธ์ ์ฑ๋ฅ์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์, CPU ์ฌ์ฉ๋์ด ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์๋ค. ํนํ, ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ณธ๋ ๋ง์ ํ๋ก์ธ์ ๋ฆฌ์์ค๋ฅผ ํ์๋ก ํ๋ ๊ฒฝ์ฐ, GC๊ฐ ์๋นํ CPU๋ฅผ ์ ์ ํ๋ฉด์ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ ์คํ ์๋๊ฐ ๋์ ๋๊ฒ ๋๋ ค์ง ์ ์๋ค.
- CMS์ ๋ ๋ค๋ฅธ ๋จ์ ์ ๋ถ์ ์ฐ๋ ๊ธฐ(Floating Garbage)๋ฅผ ํ์ํ์ง ๋ชปํ๋ค๋ ์ ์ด๋ค. CMS์ ๋์ ๋งํน ๋ฐ ๋์ ์ค์ํ ๋จ๊ณ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ค๋ ๋๋ ๊ณ์ ์คํ๋๋ฏ๋ก, ์ด ๊ณผ์ ์์ ์๋ก์ด ๊ฐ์ฒด๊ฐ ์์ฑ๋ ์ ์๋ค. ํ์ง๋ง ์ผ๋ถ ๊ฐ์ฒด๋ ๋งํน์ด ๋๋ ํ์ ๊ฐ๋น์ง๊ฐ ๋์ด๋, ํด๋น GC ์ฌ์ดํด์์๋ ํ์๋์ง ์๋๋ค. ์ด๋ฌํ ๊ฐ์ฒด๋ค์ ๋ถ์ ์ฐ๋ ๊ธฐ๋ผ๊ณ ํ๋ฉฐ, ๊ฒฐ๊ตญ ๋ค์ GC ์ฌ์ดํด๊น์ง ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ๊ฒ ๋๋ค. ์ด๋ก ์ธํด ๋์ ๋ชจ๋ ์คํจ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๋ค. ์ฆ, CMS๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ถฉ๋ถํ ํ๋ณดํ์ง ๋ชปํ๋ฉด ๊ฒฐ๊ตญ Stop-the-World ๋ฐฉ์์ ์ ์ฒด GC๊ฐ ๊ฐ์ ๋ก ์คํ๋๋ฉด์ ์ ํ๋ฆฌ์ผ์ด์ ์๋ต ์๊ฐ์ด ํฌ๊ฒ ์ฆ๊ฐํ ์ ์๋ค. ๋ฐ๋ผ์, CMS๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ๊ฐ๋น์ง ์ปฌ๋ ์ ๋์์๋ ์ฌ์ฉ์ ์ค๋ ๋๊ฐ ์ํํ ์คํ๋ ์ ์๋๋ก ์ถฉ๋ถํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ๋ณดํ๋ ๊ฒ์ด ์ค์ํ๋ค.
- CMS์ ๋ ๋ค๋ฅธ ๋จ์ ์ ๋ฉ๋ชจ๋ฆฌ ํํธํ ๋ฌธ์ ์ด๋ค. CMS๋ ๋งํฌ-์ค์(Mark-Sweep) ๋ฐฉ์์ผ๋ก ๊ฐ๋น์ง๋ฅผ ์ ๋ฆฌํ๋๋ฐ, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ถํ์ง ์๊ธฐ ๋๋ฌธ์ ํํธํ๊ฐ ๋ฐ์ํ ์ ์๋ค. ํํธํ๊ฐ ์ฌํด์ง๋ฉด ํฐ ๊ฐ์ฒด๋ฅผ ํ ๋นํ ๋ ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฐพ์ง ๋ชปํด ํ ๋น์ด ์คํจํ ์ ์๋ค. ์ด ๊ฒฝ์ฐ ๊ฒฐ๊ตญ ์ ์ฒด GC(Full GC)๋ฅผ ์คํํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๋ฆฌํด์ผ ํ๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด CMS๋ -XX:+UseCMSCompactAtFullCollection ์ต์ ์ ์ ๊ณตํ๋ค. ์ด ์ต์ ์ ํ์ฑํํ๋ฉด CMS๊ฐ Full GC๋ฅผ ์ํํ ๋ ๋ฉ๋ชจ๋ฆฌ ์กฐ๊ฐ ๋ชจ์(Compaction)๋ ํจ๊ป ์คํํ๋ค. ํ์ง๋ง ์ด ๊ณผ์ ์์ ์ด์์๋ ๊ฐ์ฒด๋ฅผ ์ด๋ํด์ผ ํ๋ฏ๋ก, ์ฌ์ฉ์ ์ค๋ ๋์ ๋์์ ์คํํ ์ ์๊ณ ์ ์ง ์๊ฐ์ด ๊ธธ์ด์ง ์ ์๋ค. ์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํด JVM์ -XX:CMSFullGCsBeforeCompaction ์ต์ ์ ์ ๊ณตํ๋ค. ์ด ์ต์ ์ ์ง์ ๋ ํ์๋งํผ Full GC๋ฅผ ์ํํ ํ์๋ง ์กฐ๊ฐ ๋ชจ์์ ์คํํ๋๋ก ์ค์ ํ ์ ์๋ค. ์ฆ, ๋ชจ๋ Full GC์์ ์กฐ๊ฐ ๋ชจ์์ ์ํํ๋ ๊ฒ์ด ์๋๋ผ, ์ผ์ ํ์ ํ์๋ง ์คํํจ์ผ๋ก์จ ์ ์ง ์๊ฐ์ ์กฐ์ ํ ์ ์๋๋ก ํ ๊ฒ์ด๋ค.
์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์น ์๋น์ค์ ๋ฐฑ์๋(์๋ฒ ์ธก ๋ก์ง) ์ ๋ธ๋ผ์ฐ์ -์๋ฒ ๊ธฐ๋ฐ ์์คํ ๊ฐ๋ฐ์ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฌํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ฐ์ฅ ์ค์ํ ์์ ์ค ํ๋๊ฐ ์๋น์ค ์๋ต ์๊ฐ์ ๋๋ค. ์๋น์ค ์๋ต ์๊ฐ์ด๋ ์ฌ์ฉ์๊ฐ ์์ฒญ์ ๋ณด๋ธ ํ ์๋ฒ๊ฐ ์๋ต์ ์ฃผ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์๋ฏธํฉ๋๋ค. ์๋ต ์๊ฐ์ด ๊ธธ์ด์ง๋ฉด ์ฌ์ฉ์ ๊ฒฝํ(UX)์ด ๋๋น ์ง๊ณ , ํ์ด์ง ๋ก๋ฉ ์๋๊ฐ ๋๋ ค์ง๊ฑฐ๋ ์๋น์ค๊ฐ ๋๊ธฐ๋ ๊ฒ์ฒ๋ผ ๋ณด์ผ ์ ์์ต๋๋ค.
์์คํ ์ "์ผ์ ์ ์ง ์๊ฐ"์ด ์ค์ํ ์ด์ ๋ ์๋ฐ๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค. ํ์ง๋ง GC๊ฐ ์คํ๋ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ผ๋ถ ๋๋ ์ ์ฒด๊ฐ ์ผ์์ ์ผ๋ก ๋ฉ์ถ๋ "Stop-the-world" ํ์์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด ์ผ์ ์ ์ง ์๊ฐ์ด ๊ธธ์ด์ง๋ฉด, ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฆ์ ์ฒ๋ฆฌํ์ง ๋ชปํ๊ณ ๋๊ธฐํด์ผ ํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฌ์ฉ์๋ ์๋น์ค๊ฐ ๋๋ ค์ก๋ค๊ณ ๋๋ผ๊ฑฐ๋, ์ฌํ ๊ฒฝ์ฐ ์๋น์ค๊ฐ ๋ฉ์ถ ๊ฒ์ฒ๋ผ ๋ณด์ผ ์ ์์ต๋๋ค.
์ผ์ ์ ์ง ์๊ฐ์ ์ค์ด๋ ๋ฐฉ๋ฒ
- GC ํ๋
- ์ต์ GC ์๊ณ ๋ฆฌ์ฆ(์: G1GC, ZGC, Shenandoah GC) ํ์ฉ
- JVM ์ต์ ์กฐ์ (-XX:MaxGCPauseMillis ์ค์ ๋ฑ)
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ต์ ํ
- ๋ถํ์ํ ๊ฐ์ฒด ์์ฑ์ ์ค์ด๊ณ , ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐฉ์ง
- ๊ฐ์ฒด ํ(Object Pool) ํ์ฉ
- ๋น๋๊ธฐ ๋ฐ ๋ณ๋ ฌ ์ฒ๋ฆฌ ์ต์ ํ
- ์์ฒญ์ ๋น๋๊ธฐ(Async) ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ
- ์ ์ ํ ์ค๋ ๋ ํ(Thread Pool) ์ค์
์ฆ, "์์คํ ์ ์ผ์ ์ ์ง ์๊ฐ์ด ์งง์์ผ ํ๋ค"๋ ๋ง์ GC๋ก ์ธํด ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฉ์ถ๋ ์๊ฐ์ ์ต์ํํ์ฌ, ์๋ฒ๊ฐ ํญ์ ๋น ๋ฅด๊ฒ ์๋ตํ ์ ์๋๋ก ํด์ผ ํ๋ค๋ ์๋ฏธ์ ๋๋ค.
7. G1 ์ปฌ๋ ์ฒ(๊ฐ๋น์ง ์ฐ์ ์ปฌ๋ ํฐ)
- Garbage First(๊ฐ๋น์ง ์ฐ์ )์ ์งง๊ฒ ์ค์ธ ํํ์ด๋ค.
- ์ฃผ๋ก ์๋ฒ์ฉ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์คํ ์ปฌ๋ ํฐ๋ค.
- ํ ๋ฉ๋ชจ๋ฆฌ์ ์ด๋๊ณณ์ด๋ ํ์ ๋์์ ํฌํจํ ์ ์๋ค. ์ด๋ฅผ ํ์ ์งํฉ์ด๋ผ ํ๋ฉฐ ์งง๊ฒ CSet๋ผ๊ณ ํ๋ค. '์ด๋ ์์ญ์ ์ฐ๋ ๊ธฐ๊ฐ ๊ฐ์ฅ ๋ง์ผ๋'์ 'ํ์ํ์ ๋ ์ด๋์ด ์ด๋๊ฐ ๊ฐ์ฅ ํฌ๋'๊ฐ ํ์ ์์ญ์ ๊ณ ๋ฅด๋ ๊ธฐ์ค์ด ๋๋ค. ์ด๊ฒ์ด G1์ ํผํฉ GC ๋ชจ๋๋ค.
- G1์ ์๋ฐ ํ์ ๋์ผ ํฌ๊ธฐ์ ์ฌ๋ฌ ๋ ๋ฆฝ ๋ฆฌ์ (๋ธ๋ก)์ผ๋ก ๋๋ , ๋ฆฌ์ ๊ฐ๊ฐ์ ์ญํ ๋ณ ์ ๋ต์ ๊ตฌ๋ถํ์ฌ ์ ์ฉํ ์ ์์ด์ ํ์ ํจ์จ์ ๊ทน๋ํํ๋ค.
- ํฐ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๊ธฐ ์ํด์๋ ๊ฑฐ๋๋ฆฌ์ (humongous region)์ด๋ผ๋ ํน๋ณํ ์ ํ์ ํ์ฉํ๋ค. G1์ ๋ฆฌ์ ์ฉ๋์ ์ ๋ฐ๋ณด๋ค ํฐ ๊ฐ์ฒด๋ฅผ ํฐ ๊ฐ์ฒด๋ก ์ทจ๊ธํ๋ค. ๋ฆฌ์ ํ๋์ ํฌ๊ธฐ๋ -XX:G1HeapRegionSize ๋งค๊ฐ๋ณ์๋ก ์ค์ ํ๋ค.
G1 GC์ ํ์ ํจ์จ ๊ทน๋ํ ์๋ฆฌ
- ๊ฐ๋น์ง๊ฐ ๋ง์ ๋ฆฌ์ ๋ถํฐ ์ฐ์ ํ์(Garbage First)
- ๊ธฐ์กด์ GC๋ ์ ์ฒด Young ๋๋ ์ ์ฒด Old ์์ญ์ ๋์์ผ๋ก GC๋ฅผ ์ํํ์ง๋ง,
- G1์ ํ์ํ ๊ฐ์น๊ฐ ๋์ ๋ฆฌ์ ๋ถํฐ ์ ํ์ ์ผ๋ก GC๋ฅผ ์ํํ์ฌ ์ต์ํ์ ๋น์ฉ์ผ๋ก ์ต๋ํ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ๋ค.
- ๋ฆฌ์ ๋ณ ๋
๋ฆฝ์ ์ธ GC ์ ์ฉ
- ๊ฐ ๋ฆฌ์ ์ ์ญํ ๊ณผ ์ํ์ ๋ฐ๋ผ ์ต์ ์ GC ์ ๋ต์ ์ ์ฉํ์ฌ ๋ถํ์ํ ์ ์ง ์๊ฐ์ ์ค์ธ๋ค.
- ์๋ฅผ ๋ค์ด, Young GC๋ Young ๋ฆฌ์ ์์๋ง ์ํ๋๊ณ , Mixed GC๋ Young + Old ๋ฆฌ์ ์ ๋์์ผ๋ก ์ํ๋๋ค.
- ์ฐ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ ํ๋ณด(Compact) ๊ธฐ๋ฅ ํฌํจ
- CMS์ ๋ฌ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ ํํธํ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ์ฒด๋ฅผ ์ด๋ํ์ฌ ์ฐ์์ ์ธ ๊ณต๊ฐ์ ํ๋ณดํ๋ Compact ๊ธฐ๋ฅ์ด ํฌํจ๋์ด ์๋ค.
- ๋ฐ๋ผ์ ํฐ ๊ฐ์ฒด๋ฅผ ํ ๋นํ ๋ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์๋ค.
G1 GC๋ ํ์ ์ฌ๋ฌ ๊ฐ์ ๋ฆฌ์ ์ผ๋ก ๋๋๊ณ , ๊ฐ ๋ฆฌ์ ์ ์ญํ ์ ๋์ ์ผ๋ก ํ ๋นํ์ฌ ๋ถํ์ํ GC ์์ ์ ์ค์ด๊ณ , ๊ฐ์ฅ ํจ๊ณผ์ ์ผ๋ก ํ์ํ ์ ์๋ ์์ญ์ ์ฐ์ ์ ์ผ๋ก ์ ๋ฆฌํ์ฌ GC ์ฑ๋ฅ์ ๊ทน๋ํํ๋ ๋ฐฉ์์ด๋ค.
8. ์ค๋๋ ์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ค
- ์ ์ธ๋์ฉ๊ณผ ๊ตฌ์ธ๋์ฉ ๊ตฌ๋ถ์ด ์ฌ๋ผ์ก๋ค.
์ ์ง์ฐ ๊ฐ๋น์ง ์ปฌ๋ ํฐ
- ํซ์คํ์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ์๋ฆฌ์ผ -> CMS -> G1์ผ๋ก ์งํํ๋ค.
- ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ์ธก์ ํ๋ ๊ฐ์ฅ ์ค์ํ ์งํ๋ ์ฒ๋ฆฌ๋, ์ง์ฐ์๊ฐ, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด๋ค.
- ํ๋์จ์ด ์ฑ๋ฅ์ด ํฅ์๋๋ฉด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์กฐ๊ธ ๋ ์ฌ์ฉํ๋ ๊ฒ์ ํฐ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค. ๋ํ ์ฑ๋ฅ์ด ์ข์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฏธ์น๋ ์ํฅ์ ์ค์ฌ ์ ์ฒด ์ฒ๋ฆฌ๋์ ์ฆ๊ฐ์ํจ๋ค. ํ์ง๋ง ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋๋ฆฌ๋ฉด ์ง์ฐ ์๊ฐ์ด ๊ธธ์ด์ง๊ณ ์ฑ๋ฅ์ ๋ฏธ๋ฌํ ์ํฅ์ ์ค ์ ์๋ค. ์ด๋ฌํ ์ด์ ๋ก ๊ฐ๋น์ง ์ปฌ๋ ํฐ์์ ๊ฐ์ฅ ์ค์ํ ์ฑ๋ฅ ์งํ๋ ์ง์ฐ ์๊ฐ์ด๋ค.
- ์ ฐ๋ ๋์ด์ ZGG ์ปฌ๋ ํฐ๋ ์ต์ด ํ์์ ์ต์ข ํ์์์๋ง ์ผ์ ์ ์ง๊ฐ ์งง๊ฒ ์ผ์ด๋๋ฉฐ, ์ผ์ ์ ์ง ์๊ฐ์ ๊ฑฐ์ ๊ณ ์ ์ ์ด๋ค. ์ฆ, ํ ํฌ๊ธฐ์ ํ ์์ ๊ฐ์ฒด ์๊ฐ ๋์ด๋๋ค๊ณ ํด์ ๋ ๊ธธ์ด ์ง์ง ์๋๋ค. ๊ทธ๋์ ์ด ๋ ์ปฌ๋ ํฐ๋ฅผ '์ ์ง์ฐ ๊ฐ๋น์ง ์ปฌ๋ ํฐ'๋ผ๊ณ ํ๋ค.
1. ์ ฐ๋ ๋์ด
- ์ค๋ผํด ๊ฐ์ ๋จธ์ ๊ฐ๋ฐํ์ด ์ฃผ๋ํ์ง ์์ ์ฒซ๋ฒ์งธ ํซ์คํ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ผ์ ์ค๋ผํด JDK์๋ ์๊ณ ๋ค๋ฅธ ํ์ฌ OpenJDK์๋ง ์กด์ฌํ๋ ์ปฌ๋ ํฐ๋ค.
- ํ์ ๋ฆฌ์ ๋ค๋ก ์ชผ๊ฐ ์ฒ๋ฆฌํ๋ฉฐ, ํฐ ๊ฐ์ฒด ์ ์ฉ์ ๊ฑฐ๋ ๋ฆฌ์ ์ ์ง์ํ๊ณ , ๊ธฐ๋ณธ์ ์ผ๋ก ํ์๊ฐ์น๊ฐ ํฐ ๋ฆฌ์ ์ ๋จผ์ ํ์ํ๋ค.
- ์ ฐ๋ ๋์ด์ ๋ชฉํ๋ ํ ํฌ๊ธฐ์ ์๊ด์์ด ๊ฐ๋น์ง ์ปฌ๋ ์ ์ผ๋ก ์ธํ ์ผ์์ ์ง๋ฅผ 10๋ฐ๋ฆฌ ์ด ์ด๋ด๋ก ๋ฌถ์ด๋๋ ๊ฒ์ด์๋ค.
- G1 ์ปฌ๋ ํฐ๋ ์ ฐ๋ ๋์ด์ ์ฝ๋๋ฅผ ๋ฐ์ํ์ฌ ๋์ ์คํจ์ ํ์ถ๊ตฌ์ธ ์ ์ฒด GC๋ฅผ ๋ฉํฐ์ค๋ ๋๋ก ์ฒ๋ฆฌํ ์ ์๊ฒ ๋์๋ค.
์ ฐ๋ ๋์ด์ ๊ฐ์ ์ฌํญ
- ๋์ ๋ชจ์ผ๊ธฐ ์ง์
- ์ ์ธ๋ ๋ฆฌ์ ๊ณผ ๊ตฌ์ธ๋ ๋ฆฌ์ ์ ๊ตฌ๋ณํ์ง ์๋๋ค. ์ ฐ๋ ๋์ด์์ ์ธ๋ ๊ตฌ๋ถ์ ๋ณต์ก๋์ ์ผ์ ์ ๊ณ ๋ คํด ๊ฐ๋ฐ ์ฐ์ ์์์์ ๋ฎ์ท๋ค.
- ๋ฉ๋ชจ๋ฆฌ์ ์ปดํจํ ์์์ ๋ง์ด ์ฌ์ฉํ๋ ๊ธฐ์ ์งํฉ ๋์ '์ฐ๊ฒฐ ํ๋ ฌ'๋ก ๋ฆฌ์ ๊ฐ ์ฐธ์กฐ ๊ด๊ณ๋ฅผ ๊ธฐ๋กํ๋ค. ๊ทธ ๋๋ถ์ ๊ด๋ฆฌ ๋น์ฉ๋ ์ค๊ณ ๊ฑฐ์ง ๊ณต์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ๋ ์ค์๋ค.
๋์๋ฐฉ์
- ์ต์ด ํ์
- ๊ฐ์ฅ ๋จผ์ GC ๋ฃจํธ์์ ์ง์ ์ฐธ์กฐํ๋ ๊ฐ์ฒด๋ค์ ํ์ํ๋ค.
- ์ด ๊ณผ์ ์ "Stop-The-World" ์ํ์์ ์คํ๋๋ฉฐ, ๋น ๋ฅด๊ฒ ์๋ฃ๋๋ค.
- ๋์ ํ์
- ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ํ๊ณ ํ์ ํ์ํ๋ฉฐ ๋๋ฌ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ํ์ํ๋ค.
- ์ฌ์ฉ์ ์ค๋ ๋์ ๋์์ ์ํ๋๋ค.
- ์ํ ์๊ฐ์ ์ด์์๋ ๊ฐ์ฒด ์์ ๊ฐ์ฒด ๊ทธ๋ํ์ ๋ณต์ก๋์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
- ์ฌ์ฉ์ ์ค๋ ๋๊ฐ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์์ผ๋ฏ๋ก ํ ์ฌ์ฉ๋์ด ๋์ด๋ ์ ์๋ค.
- ์ต์ข
ํ์
- ๋ณด๋ฅ ์ค์ธ ๋ชจ๋ ํ์๋ฅผ ์๋ฃํ๊ณ GC ๋ฃจํธ ์งํฉ์ ๋ค์ ์ค์บํ๋ค.
- ํ์๊ฐ์น๊ฐ ๊ฐ์ฅ ํฐ ๋ฆฌ์ ๋ค์ ์ถ๋ ค ํ์ ์งํฉ์ ์์ฑํ๋ค.
- ์ด ๋จ๊ณ๋ ์งง์ง๋ง ์ผ์ ์ ์ง๋๋ค.
- ๋์ ์ฒญ์
- ์ด์ ์๋ ๊ฐ์ฒด๊ฐ ํ๋๋ ์๋ ๋ฆฌ์ ๋ค์ ์ฒญ์ํ๋ค.
- ๋์ ์ด์ฃผ
- ๋ค๋ฅธ ํซ์คํ์ ์ปฌ๋ ํฐ๋ค๊ณผ ๊ตฌ๋ถ๋๋ ํต์ฌ ์ฐจ์ด
- ํ์ ์งํฉ ์์ ์ด์ ์๋ ๊ฐ์ฒด๋ค์ ๋ค๋ฅธ ๋น ๋ฆฌ์ ์ผ๋ก ๋ณต์ฌํ ํ, ํด๋น ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ ๋ชจ๋๊ฐ ์ฌ์ ํ ์ด๋ ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์์ผ๋ฏ๋ก ์ฝ๊ธฐ ์ฅ๋ฒฝ๊ณผ ํฌ์๋ฉ ํฌ์ธํฐ๋ฅผ ์ด์ฉํ๋ค.
- ์คํ ์๊ฐ์ ํ์ ์งํฉ์ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
- ์ต์ด ์ฐธ์กฐ ๊ฐฑ์
- ์ฐธ์กฐ ๊ฐฑ์ : ๊ฐ์ฒด ์ด๋์ ๋ฐ๋ฅธ ์ฐธ์กฐ๋ฅผ ์์ ํ๋ค. ๋์ ์ด์ฃผ ๋จ๊ณ์์ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ ๋ค์, ํ์์ ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ชจ๋ ์ฐธ์กฐ๋ฅผ ๋ณต์ฌ ํ์ ์๋ก์ด ์ฃผ์๋ก ์์ ํ๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ณ์ ์คํ๋๋ ๋์ ํ ๋ด์ ์ฐธ์กฐ๋ฅผ ์ต์ ์ํ๋ก ์ ๋ฐ์ดํธํ๋ค
- ๋์ ์ฐธ์กฐ ๊ฐฑ์
- ์ฐธ์กฐ ๊ฐฑ์ ์ ์์ํ๋ฉฐ ์ฌ์ฉ์ ์ค๋ ๋์ ๋์์ ์ํํ๋ค.
- ์ํ ์๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์กด์ฌํ๋ ์ฐธ์กฐ์ ์์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
- ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ์์๋๋ก ์ฐธ์กฐ ํ์ ์ ์ ํ ๊ฒ์ํ์ฌ ์ด์ ๊ฐ์ ์๋ก์ด ๊ฐ์ผ๋ก ์์ ํ๋ค.
- ์ต์ข
์ฐธ์กฐ ๊ฐฑ์
- ํ์ ์ฐธ์กฐ๋ฅผ ๋ค ๊ฐฑ์ ํ ํ, GC ๋ฃจํธ ์งํฉ์ ์ฐธ์กฐ๋ ๊ฐฑ์ ํ๋ค.
- ์ ฐ๋ ๋์ด์ ๋ง์ง๋ง ์ผ์ ์ ์ง ๋จ๊ณ๋ค.
- ์ ์ง ์๊ฐ์ GC ๋ฃจํธ์ ๊ฐ์์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
- ๋์ ์ฒญ์
- ์ด์ฃผ์ ์ฐธ์กฐ ๊ฐฑ์ ์ด ๋๋๋ฉด ํ์ ์งํฉ์ ๋ชจ๋ ๋ฆฌ์ ์๋ ์ด์ ์๋ ๊ฐ์ฒด๊ฐ ๋ ์ด์ ๋จ์ง ์๋๋ค.
- ๊ทธ๋์ ๋์ ์ฒญ์๋ฅผ ๋ค์ ์ํํ์ฌ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ํ ๋นํ ๊ณต๊ฐ์ ํ๋ณดํ๋ค.
์ ฐ๋ ๋์ด์ ๊ฐ์ฅ ์ค์ํ ๋จ๊ณ๋ ๋์ ํ์, ๋์ ์ด์ฃผ, ๋์ ์ฐธ์กฐ ๊ฐฑ์ ์ด๋ค.
ํฌ์๋ฉ ํฌ์ธํฐ
- ์ ฐ๋ ๋์ด๊ฐ ์ด์ฃผ๋ฅผ ๋์์ ์ํํ ์ ์๋๋ก ํ๋ ํต์ฌ ๊ฐ๋ ์ด๋ค.
- ๊ฐ์ฒด ์ด๋๊ณผ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ ๋์์ ์ํํ๋ ๋ฐฉ๋ฒ
- ๊ฐ์ฒด ์ด๋ ์ ์๋ ์์น์์ ์๋ก์ด ์์น๋ฅผ ๊ฐ๋ฆฌํค๋ ์ญํ ์ ํ๋ ํฌ์ธํฐ์ด๋ค. ์ฃผ๋ก ์์ถ(Compaction) ๋๋ ๋ณต์ฌ(Copying) ๊ฐ๋น์ง ์ปฌ๋ ์ ๊ณผ์ ์์ ์ฌ์ฉ๋๋ค.
ํฌ์๋ฉ ํฌ์ธํฐ๊ฐ ํ์ํ ์ด์
๊ฐ๋น์ง ์ปฌ๋ ์
์ค ์ผ๋ถ ์๊ณ ๋ฆฌ์ฆ(์: Shenandoah GC, G1 GC, Copying GC)์์๋ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ(Fragmentation) ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ์ฒด๋ฅผ ์ด๋ํ๋ค.
์ด ๊ณผ์ ์์ ๊ธฐ์กด ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ๊ทธ๋๋ก ์ ์งํ๋ ค๋ฉด ๊ฐ์ฒด๊ฐ ์ด๋๋ ํ์๋ ๊ธฐ์กด ์ฐธ์กฐ๋ค์ด ์ ์์น๋ฅผ ์ฐพ์ ์ ์๋๋ก ํด์ผ ํ๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํฌ์๋ฉ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ค.
ํฌ์๋ฉ ํฌ์ธํฐ์ ๋์ ๋ฐฉ์
- ๊ฐ์ฒด ์ด๋ ์
- ๊ฐ์ฒด๊ฐ ํ ๋ฉ๋ชจ๋ฆฌ์ ํ ์์น(์: ์ฃผ์ A)์ ์กด์ฌํ๊ณ , ์ฌ๋ฌ ์ฐธ์กฐ๊ฐ ํด๋น ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
- ๊ฐ์ฒด ์ด๋ ๊ณผ์
- GC๊ฐ ๊ฐ์ฒด๋ฅผ ์๋ก์ด ์์น(์: ์ฃผ์ B)๋ก ์ด๋ํ๋ค.
- ์๋ ๊ฐ์ฒด๊ฐ ์๋ ์๋ฆฌ(์ฃผ์ A)์ ํฌ์๋ฉ ํฌ์ธํฐ๋ฅผ ์ ์ฅํ์ฌ ์ฃผ์ B๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ์ค์ ํ๋ค.
- ์ฐธ์กฐ ์
๋ฐ์ดํธ ๊ณผ์
- ์ดํ, ๋ค๋ฅธ ๊ฐ์ฒด๋ ์ค๋ ๋๊ฐ ์ฃผ์ A์ ์๋ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ค๊ณ ํ๋ฉด, ํฌ์๋ฉ ํฌ์ธํฐ๋ฅผ ๋ฐ๋ผ ์ ์ฃผ์ B๋ก ์ด๋ํ๋ค.
- GC๋ ๋ชจ๋ ์ฐธ์กฐ๋ฅผ ์๋ก์ด ์์น(B)๋ก ์ ๋ฐ์ดํธํ ํ, ํฌ์๋ฉ ํฌ์ธํฐ๋ฅผ ์ ๊ฑฐํ๋ค.
ํฌ์๋ฉ ํฌ์ธํฐ์ ์ฅ์
- ๊ฐ์ฒด ์ฐธ์กฐ ์ ์ง → ๊ธฐ์กด ์ฐธ์กฐ๊ฐ ๊นจ์ง์ง ์๊ณ ์ ์์น๋ฅผ ์ฐพ์ ์ ์๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๋จํธํ ํด๊ฒฐ → ๊ฐ์ฒด๋ฅผ ์์ถํ๋ฉด์๋ ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ ์ ์๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๋จ ์ต์ํ → ์ผ๋ถ GC ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ฒด๋ฅผ ์ด๋ํ๋ฉด์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
๋จ์ ๋ฐ ์ฃผ์
- ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ → ํฌ์๋ฉ ํฌ์ธํฐ๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ์ด ํ์ํ๋ค.
- ์ฐธ์กฐ ์ ๋ฐ์ดํธ ๋น์ฉ → ๋ชจ๋ ์ฐธ์กฐ๋ฅผ ์๋ก์ด ์์น๋ก ๋ณ๊ฒฝํด์ผ ํ๋ฏ๋ก ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์๋ค.
2. ZGC
- ์ค๋ผํด์ด ๊ฐ๋ฐํ ์ ์ง์ฐ ๊ฐ๋น์ง ์ปฌ๋ ํฐ
- ZGC๋ ์ด์ ์ง์ฐ(Low-Latency) ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ก, ์ต๋ 1~2ms ์ดํ์ GC ์ผ์ ์ ์ง ์๊ฐ(Pause Time)์ ๋ชฉํ๋ก ์ค๊ณ๋ ์ค์ผ์ผ๋ฌ๋ธ(Scalable) GC์ด๋ค.
- ์ ฐ๋ ๋์ด์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ ๋ค ์ฒ๋ฆฌ๋์ ๋ฏธ์น๋ ์ํฅ์ ์ต์๋ก ์ต์ ํ๋ฉด์ ํ ํฌ๊ธฐ์ ์๊ด์์ด ๊ฐ๋น์ง ์ปฌ๋ ์ ์ผ๋ก ์ธํ ์ผ์ ์ ์ง ์๊ฐ์ 10๋ฐ๋ฆฌ ์ด ์์ชฝ์ผ๋ก ์ค์ด๊ณ ์ ํ๋ค.
- ์ธ๋ ๊ตฌ๋ถ ์์ด ๋ฆฌ์ ๊ธฐ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์์ ์ฌ์ฉํ๋ค. ๋ฎ์ ์ง์ฐ ์๊ฐ์ ์ต์ฐ์ ์ผ๋ก ๋ชฉํ๋ก ํ๋ฉฐ, ๋์ ๋งํฌ-์ปดํฉํธ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๊ธฐ ์ํด ์ฝ๊ธฐ ์ฅ๋ฒฝ, ์ปฌ๋ฌํฌ์ธํฐ, ๋ฉ๋ชจ๋ฆฌ ๋ค์ค ๋งคํ ๊ธฐ์ ์ ์ด์ฉํ๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ด๋ค.
๋ฆฌ์ ๊ธฐ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์
- ZGC์ ๋ฆฌ์ ์ ๋์ ์ผ๋ก ์์ฑ/ํ๊ดด๋๋ฉฐ, ํฌ๊ธฐ๋ ๋์ ์ผ๋ก ๋ฌ๋ผ์ง๋ค.
๋ณ๋ ฌ ๋ชจ์ผ๊ธฐ
- GC๋ ๋ณ๋ ฌ ๋ชจ์ผ๊ธฐ(Parallel Compaction) ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ(Fragmentation) ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
์ฆ, ๊ฐ์ฒด๋ฅผ ์ด๋(Compaction)์ํค๋ฉด์ ํ์ ์ ๋ฆฌํ๋ ๊ณผ์ ์ ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋์์ ๋ณ๋ ฌ๋ก ์คํํ์ฌ GC ์ผ์ ์ ์ง ์๊ฐ์ ์ต์ํํ๋ ๋ฐฉ์์ด๋ค.
1. ์ผ๋ฐ์ ์ธ GC์ ๋จํธํ ๋ฌธ์
์ผ๋ฐ์ ์ธ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํ๋ฉด์ ํ ๋ฉ๋ชจ๋ฆฌ์ ๋น ๊ณต๊ฐ(๋จํธํ)์ด ๋ฐ์ํ๋ค.
- ๋จํธํ๊ฐ ์ฌํด์ง๋ฉด ํฐ ๊ฐ์ฒด๋ฅผ ํ ๋นํ ์ฐ์๋ ๊ณต๊ฐ์ ์ฐพ์ง ๋ชปํด ํ ๋น ์คํจ ๋ฐ์ํ๋ค.
- ํด๊ฒฐํ๋ ค๋ฉด ๊ฐ์ฒด๋ฅผ ์ด๋ํ์ฌ ์ฐ์๋ ๊ณต๊ฐ์ ํ๋ณด(Compaction) ํด์ผ ํ๋ค.
- ํ์ง๋ง ๋๋ถ๋ถ์ GC๋ Compaction ๋จ๊ณ์์ ์คํฑ ๋ ์๋(Stop-The-World, STW) ์๊ฐ์ด ๊ธธ์ด์ง๋ ๋ฌธ์ ๊ฐ ์๋ค.
ZGC๋ ๋ณ๋ ฌ ๋ชจ์ผ๊ธฐ(Parallel Compaction)๋ฅผ ํตํด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
2. ZGC์ ๋ณ๋ ฌ ๋ชจ์ผ๊ธฐ ๋ฐฉ์
ZGC๋ ๊ธฐ์กด์ GC์ ๋ค๋ฅด๊ฒ ๋๋ถ๋ถ์ ๊ฐ์ฒด ์ด๋ ์์
์ ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ๋์์ ์งํํ๋ค.
์ด ๊ณผ์ ์์ Forwarding Pointer(ํฌ์๋ฉ ํฌ์ธํฐ)์ Colored Pointer(์ปฌ๋ฌ๋ ํฌ์ธํฐ)๋ฅผ ํ์ฉํ์ฌ ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ์๋์ผ๋ก ์
๋ฐ์ดํธํ๋ค.
๋ณ๋ ฌ ๋ชจ์ผ๊ธฐ 3๋จ๊ณ
ZGC์ Compaction ๊ณผ์ ์ 3๋จ๊ณ๋ก ์ด๋ฃจ์ด์ง๋ค.
1. Prepare(์ค๋น ๋จ๊ณ)
- ์ด์ ์๋ ๊ฐ์ฒด๋ฅผ ์๋ณํ๊ณ , ์ด๋ค ๊ฐ์ฒด๋ฅผ ์ด๋ํ ์ง ๊ฒฐ์
- ๊ฐ์ฒด ์ด๋์ด ํ์ํ ๋ฆฌ์ ์ ์ ํ
2. Relocation(๊ฐ์ฒด ์ด๋ ๋จ๊ณ)
- ๊ฐ์ฒด๋ฅผ ์๋ก์ด ์์น๋ก ๋ณ๋ ฌ๋ก ๋ณต์ฌ
- ์ด์ ๊ฐ์ฒด์ ์ฃผ์์ ํฌ์๋ฉ ํฌ์ธํฐ(Forwarding Pointer)๋ฅผ ์ ์ฅํ์ฌ ์ฐธ์กฐ ์๋ ์ ๋ฐ์ดํธ
3. Remapping(์ฐธ์กฐ ์ ๋ฐ์ดํธ ๋จ๊ณ)
- ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์ค ๋ชจ๋ ์ฐธ์กฐ๋ฅผ ์ ์ฃผ์๋ก ์๋ ๋ณ๊ฒฝ
- Colored Pointer๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ฆฌ๋งตํ
์ด ๊ณผ์ ์์ GC ์ผ์ ์ ์ง(Pause Time)๋ 1~2ms ์ด๋ด๋ก ์ ์ง๋๋ค.
3. ๋ณ๋ ฌ ๋ชจ์ผ๊ธฐ์ ํต์ฌ ๊ธฐ์
1) ํฌ์๋ฉ ํฌ์ธํฐ (Forwarding Pointer)
- ๊ฐ์ฒด๊ฐ ์ด๋๋๋ฉด ์ด์ ์์น์ ์ ์์น ์ ๋ณด๋ฅผ ์ ์ฅ
- ์ฐธ์กฐ๋ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ์๋ก์ด ์์น๋ก ๋ฆฌ๋๋ ์ ๊ฐ๋ฅ
- ๋๋ถ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋๋ ๋์์๋ ์์ ํ๊ฒ ๊ฐ์ฒด ์ด๋ ๊ฐ๋ฅ
2) ์ปฌ๋ฌ๋ ํฌ์ธํฐ (Colored Pointer)
- 64๋นํธ ํฌ์ธํฐ์ ์ผ๋ถ ๋นํธ๋ฅผ ํ์ฉํด ๊ฐ์ฒด์ ์ํ๋ฅผ ์ ์ฅ
- ๊ฐ์ฒด๊ฐ ์ด๋๋์์ ๋, ์ฐธ์กฐ๋ฅผ ์๋์ผ๋ก ์ ๋ฐ์ดํธํ์ฌ ์ถ๊ฐ์ ์ธ ์คํฑ ๋ ์๋ ๊ณผ์ ์์ด GC ์ํ ๊ฐ๋ฅ
4. ๋ณ๋ ฌ ๋ชจ์ผ๊ธฐ์ ์ฅ์
- STW(Stop-The-World) ์ต์ํ → GC ์ ์ง ์๊ฐ์ด 1~2ms ์ดํ๋ก ์ ์ง๋จ
- ํฐ ํ(16TB)์์๋ ํจ์จ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ ๋ฆฌ ๊ฐ๋ฅ
- ๋ฉํฐ์ฝ์ด CPU ํ์ฉ ๊ทน๋ํ → ์ฌ๋ฌ ์ค๋ ๋์์ ๊ฐ์ฒด ์ด๋์ ๋ณ๋ ฌ๋ก ์ํ
- ์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉ → ์๋ต ์๋๊ฐ ์ค์ํ ํ๊ฒฝ(์ค์๊ฐ ์์คํ , ๋๊ท๋ชจ ์๋ฒ ํ๊ฒฝ)์์ ๊ฐ๋ ฅํ ์ฑ๋ฅ์ ๋ฐํํ๋ค.
5. ๋ณ๋ ฌ ๋ชจ์ผ๊ธฐ์ ๋จ์
- CPU ์ค๋ฒํค๋ ์ฆ๊ฐ
- GC๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ณ๋ ฌ๋ก ์คํ๋๋ฏ๋ก ์ผ๋ถ CPU ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ค.
- Throughput(์ฒ๋ฆฌ๋) ๊ฐ์ ๊ฐ๋ฅ์ฑ
- CPU๋ฅผ ํ์ฉํ GC ์์ ์ด ๋ง์์ง์ ๋ฐ๋ผ ์ฒ๋ฆฌ๋์ด ์ฝ๊ฐ ์ค์ด๋ค ์ ์๋ค.
์ ํฉํ ๊ฐ๋น์ง ์ปฌ๋ ํฐ ์ ํํ๊ธฐ
- ์๊ธ์ ์ฌ์ ๋กญ์ง๋ง ์ต์ ํ ๊ฒฝํ์ด ๋ถ์กฑํ๋ค๋ฉด ์ ๋ฃ ๊ธฐ์ ์ง์์ ๋ฐ์ ์ ์๋ ์ ์ฉ ํ๋์จ์ด์ ์ํํธ์จ์ด ์๋ฃจ์ ์ด ์ข์ ์ ํ์ด๋ค. ์ด ๊ฒฝ์ฐ C4 ์ปฌ๋ ํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- ์์ฉ ์ ํ์ ์ธ ์ฌ์ ๋ ์์ง๋ง ์ํํธ์จ์ด์ ํ๋์จ์ด ๋ชจ๋ธ์ ์ ์ดํ ๋ฅ๋ ฅ์ด ๋๋ค๋ฉด ์ต์ ๋ฒ์ ์ ์ฌ์ฉํ์. ํนํ ์ง์ฐ ์๊ฐ์ด ์ค์ํ๋ค๋ฉด ZGC๋ฅผ ์๋ํด ๋ณด์.
- ๋ ๊ฑฐ์ ์์คํ ์ ๋ฌผ๋ ค๋ฐ์์ ํ๋์จ์ด์ ์ํํธ์จ์ด ์์คํ ์์ ์ด์ํด์ผ ํ๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ ๋ฐ๋ผ ์ ํํ์. ํ ๋ฉ๋ชจ๋ฆฌ๊ฐ 4GB์์ 6GB ์ดํ๋ฉด CMS ๊ฐ ๊ด์ฐฎ์ ๊ฒ์ด๊ณ , ๊ทธ๋ณด๋ค ๋ง๋ค๋ฉด G1์ ์๋ํ์.
- ์ต๋ 100MB ์ ๋์ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ผ๋ฉด ์๋ฆฌ์ผ ์ปฌ๋ ํฐ.
- ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋จ์ผ ํ๋ก์ธ์๋ง ์ฌ์ฉํ๊ณ ์ผ์ ์ ์ง ์๊ฐ ๊ด๋ จ ์ ์ฝ์ด ์๋ค๋ฉด ์๋ฆฌ์ผ ์ปฌ๋ ํฐ.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต๋ ์ฑ๋ฅ์ด ๊ฐ์ฅ ์ค์ํ๊ณ , ์ง์ฐ ์๊ฐ ๊ด๋ จ ์ ์ฝ์ด ์๊ฑฐ๋ 1์ด ์ด์์ ์ง์ฐ ์๊ฐ๋ ํ์ฉ๋๋ค๋ฉด ๊ฐ์ ๋จธ์ ์ ๊ธฐ๋ณธ ์ปฌ๋ ํฐ๋ ํจ๋ฌ๋ ์ปฌ๋ ํฐ.
- ์ฒ๋ฆฌ๋๋ณด๋ค ์๋ต ์๊ฐ์ด ์ค์ํ๊ณ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ฐ๋ฅธ ์ผ์ ์ ์ง๊ฐ ์งง์์ผ ํ๋ค๋ฉด G1
- ์๋ต ์๊ฐ์ด ๋งค์ฐ ์ค์ํ๋ฉด (์ธ๋ ๊ตฌ๋ถ) ZGC
๊ฐ์ ๋จธ์ ๊ณผ ๊ฐ๋น์ง ์ปฌ๋ ํฐ ๋ก๊ทธ
- ์๋ฐ ๊ฐ์ ๋จธ์ ์ ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๋ฅผ ๋ค๋ฃจ๋ ค๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ ๋จธ์ ๊ณผ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๊ธฐ๋กํ ๋ก๊ทธ๋ฅผ ์ฝ๊ณ ๋ถ์ํ ์ค ์์์ผ ํ๋ค.
- Java 9๋ถํฐ -Xlog ์ต์ ์ ์ฌ์ฉํ๋ฉด JVM๊ณผ GC ๋ก๊ทธ๋ฅผ ์ค์ ํ ์ ์๋ค. -Xlog ๋งค๊ฐ ๋ณ์๋ก ๋ชจ๋ ํซ์คํ ๊ธฐ๋ฅ์ ๋ก๊ทธ๋ฅผ ์ค์ ํ ์ ์๊ฒ ๋์๊ณ , ์ด ๋งค๊ฐ ๋ณ์ ์์ฒด์ ๊ธฐ๋ฅ ์ญ์ ๋์๋ค.
๊ธฐ๋ณธ์ ์ธ -Xlog ์ฌ์ฉ๋ฒ
- Xlog:<์ถ๋ ฅ ๋์>:<์ถ๋ ฅ ์์ค>:<์ถ๋ ฅ ํ๊ทธ>:<ํ์ผ ๊ฒฝ๋ก>:<๋กค๋ง ์ต์
>
- <์ถ๋ ฅ ๋์> → stdout, stderr, file=<ํ์ผ ๊ฒฝ๋ก> ๋ฑ
- <์ถ๋ ฅ ์์ค> → trace, debug, info, warning, error
- <์ถ๋ ฅ ํ๊ทธ> → gc, heap, safepoint, classload, jit ๋ฑ
- <ํ์ผ ๊ฒฝ๋ก> → ๋ก๊ทธ๋ฅผ ์ ์ฅํ ํ์ผ ๊ฒฝ๋ก ์ง์
- <๋กค๋ง ์ต์ > → ํ์ผ ํฌ๊ธฐ ๋ฐ ๊ฐ์ ์ ํ (filecount=10, filesize=10MB ๋ฑ)
GC ๋ก๊ทธ๋ฅผ ๊ธฐ๋กํ๋ -Xlog ์์
java -Xlog:gc=info:file=gc.log:time,uptime,level,tags
- gc=info → GC ๊ด๋ จ ๋ก๊ทธ๋ฅผ INFO ๋ ๋ฒจ๋ก ์ถ๋ ฅ
- file=gc.log → gc.log ํ์ผ์ ๊ธฐ๋ก
- time, uptime, level, tags → ๋ก๊ทธ์ ์๊ฐ, ์คํ ์๊ฐ, ๋ ๋ฒจ, ํ๊ทธ ํฌํจ
๋ค์ํ GC ๋ก๊ทธ ์ค์ ์์
- GC ์ด๋ฒคํธ๋ง ๋ก๊น
java -Xlog:gc GCTest
๊ธฐ๋ณธ ์ ๋ณด๋ฅผ ๋ณด๋ ค๋ฉด -Xlog:gc๋ฅผ ์ฌ์ฉํ๋ค.
java -Xlog:gc=debug GCTest
debug ์์ค์ GC ์ด๋ฒคํธ๋ฅผ ํ์ค ์ถ๋ ฅ์ผ๋ก ๊ธฐ๋ก
java -Xlog:gc* GCTest
gc ํ๊ทธ์ ๋ชจ๋ ํ์ ํ๋ก์ธ์ค๋ฅผ ํฌํจํ ์์ธ ์ ๋ณด
- ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํ๋ก ๊ฐ์ฉํ ํ๊ณผ ๋ฉ์๋ ์์ญ์ ์ฉ๋ ๋ณํ๋ฅผ ํ์ธ
java -Xlog:gc+heap=debug GCTest
- ๊ฐ๋น์ง ์ปฌ๋ ์ ์ค ์ฌ์ฉ์ ์ค๋ ๋์ ๋์ ์คํ ์๊ฐ๊ณผ ์ผ์ ์ ์ง ์๊ฐ์ ํ์ธ
java -Xlog:safepoint GCTest
- GC ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ๋ก๊ทธ๋ฅผ ํ์ผ๋ก ์ ์ฅ
java -Xlog:gc*,heap=info:file=gc.log:time,level,tags
GC์ Heap ๊ด๋ จ INFO ๋ก๊ทธ๋ฅผ gc.log ํ์ผ์ ๊ธฐ๋ก
- ํ์ ํ ๋จ์ ๊ฐ์ฒด๋ค์ ๋์ด ๋ถํฌ ํ์ธ
java -Xlog:gc+age=trace GCTest
- JVM ๋ด๋ถ ๋์๋ ํฌํจํ์ฌ ์์ธ ๋ก๊ทธ ๊ธฐ๋ก
java -Xlog:gc*,safepoint,heap,metaspace=debug:file=jvm.log
GC, Safepoint, Heap, Metaspace ๊ด๋ จ DEBUG ๋ก๊ทธ๋ฅผ jvm.log ํ์ผ์ ๊ธฐ๋ก
- ๋ก๊ทธ ํ์ผ ํฌ๊ธฐ ์ ํ (10MB, ์ต๋ 5๊ฐ ํ์ผ ์ ์ง)
java -Xlog:gc=info:file=gc.log:time,uptime,level,tags:filecount=5,filesize=10MB
gc.log ํ์ผ ํฌ๊ธฐ๋ฅผ ์ต๋ 10MB๋ก ์ค์ , ์ต๋ 5๊ฐ๊น์ง ์ ์ง
์ค์ : ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํ์ ์ ๋ต
์๋ฐ ์์คํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ํต์ฌ ๋ชฉํ๋ ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ํ ๋นํ๊ณ , ์ฌ์ฉ์ด ๋๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ํ์ํ๋ ๊ฒ์ด๋ค. ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํ์์ ์ด๋ฃจ์ด์ง๋ฉฐ, ์ ํต์ ์ธ ์ธ๋๋ณ ์ค๊ณ์์๋ ์๋ก ์์ฑ๋ ๊ฐ์ฒด๊ฐ ์ฃผ๋ก ์ ์ธ๋(Young Generation)์ ํ ๋น๋๋ค.
ํ์ง๋ง ๊ฐ์ฒด์ ํ ๋น ๋ฐฉ์์ ๊ณ ์ ๋์ง ์๋๋ค. ์๋ฐ ๊ฐ์ ๋จธ์ (JVM) ๋ช ์ธ์์๋ ๊ฐ์ฒด ์์ฑ๊ณผ ์ ์ฅ ๋ฐฉ์์ ๋ช ํํ ์ ์ํ์ง ์์ผ๋ฉฐ, ์ค์ ๋์ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ(GC)์ JVM ๋ฉ๋ชจ๋ฆฌ ์ค์ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์๋ค.
1. ๊ฐ์ฒด๋ ๋จผ์ ์๋ด์ ํ ๋น๋๋ค.
๊ฐ์ฒด๋ ๋จผ์ ์๋ด(Eden) ์์ญ์ ํ ๋น๋๋ฉฐ, ์๋ด์ ๊ณต๊ฐ์ด ๋ถ์กฑํด์ง๋ฉด ๋ง์ด๋ GC(Minor GC)๊ฐ ์คํ๋๋ค.
๋ํ, ํซ์คํ ๊ฐ์ ๋จธ์ (HotSpot JVM)์ -Xlog:gc* ์ต์ ์ ์ฌ์ฉํ๋ฉด ๊ฐ๋น์ง ์ปฌ๋ ์ (GC) ์ ๋ฉ๋ชจ๋ฆฌ ํ์ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๋ฉฐ, ํ๋ก์ธ์ค ์ข ๋ฃ ์ ๊ฐ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํ ๋น ์ํ๋ ํ์ธํ ์ ์๋ค. ์ค์ ์์๋ GC ๋ก๊ทธ๋ฅผ ํ์ผ๋ก ์ ์ฅํ์ฌ ์ ๋ฌธ ๋ถ์ ๋๊ตฌ๋ฅผ ํ์ฉํด ๋ถ์ํ๊ธฐ๋ ํ๋ค.
2. ํฐ ๊ฐ์ฒด๋ ๊ณง๋ฐ๋ก ๊ตฌ์ธ๋์ ํ ๋น๋๋ค.
ํฐ ๊ฐ์ฒด๋ ๊ณง๋ฐ๋ก ๊ตฌ์ธ๋(Old Generation)์ ํ ๋น๋๋ค. ์ฌ๊ธฐ์ ํฐ ๊ฐ์ฒด๋ ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ์๋ก ํ๋ ์๋ฐ ๊ฐ์ฒด๋ก, ๋งค์ฐ ๊ธด ๋ฌธ์์ด์ด๋ ์์๊ฐ ๋ง์ ๋ฐฐ์ด์ด ๋ํ์ ์ธ ์์ด๋ค.
๊ฐ์ ๋จธ์ ์์ ํฐ ๊ฐ์ฒด์ ๋ฑ์ฅ์ ๋ฐ๋์งํ์ง ์์ผ๋ฉฐ, ์ฌ๋ผ์ง ํฐ ๊ฐ์ฒด๋ค์ด ๋๋์ผ๋ก ์์ฑ๋๋ ์ํฉ์ ๋์ฑ ๋ฌธ์ ๊ฐ ๋๋ค. ์ด๋ฌํ ์ํฉ์ ์ฌ์ ๊ณต๊ฐ์ด ๋ง์์๋ ๊ฐ๋น์ง ์ปฌ๋ ์ (GC)์ ์์ฃผ ๋ฐ์์ํค๋ ์์ธ์ด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
ํฐ ๊ฐ์ฒด๋ฅผ ์ํ ์ฐ์๋ ๊ณต๊ฐ์ ํ๋ณดํ๊ธฐ ์ํด ๋ค๋ฅธ ๊ฐ์ฒด๋ค์ ์ด๋ํด์ผ ํ๋ฏ๋ก ์ฌ๊ฐํ ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ ์ค๋ฒํค๋๋ฅผ ์ด๋ํ๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด -XX:PretenureSizeThreshold ๋งค๊ฐ๋ณ์๋ฅผ ์ค์ ํ๋ฉด, ์ค์ ๊ฐ๋ณด๋ค ํฐ ๊ฐ์ฒด๋ฅผ ๊ณง๋ฐ๋ก ๊ตฌ์ธ๋์ ํ ๋นํ๊ฒ ๋์ด, ์๋ด๊ณผ ๋ ์์กด์ ๊ณต๊ฐ ์ฌ์ด์ ๋๊ท๋ชจ ๋ณต์ฌ๋ฅผ ์ค์ด๋ ๋ฐ ๊ธฐ์ฌํ๋ค.
-XX:PretenureSizeThreshold ๋งค๊ฐ ๋ณ์๋ ์๋ฆฌ์ผ๊ณผ ํ๋ด ์ ์ธ๋ ์ปฌ๋ ํฐ์๋ง ์ ์ฉ๋๋ค. PS ์ปฌ๋ ํฐ์ ๋ค๋ฅธ ์ปฌ๋ ํฐ๋ค์ ์ด ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ํ์ง ์๋๋ค.
3. ๋์ด๊ฐ ์ฐจ๋ฉด ๊ตฌ์ธ๋๋ก ์ฎ๊ฒจ์ง๋ค.
ํซ์คํ ๊ฐ์ ๋จธ์ ์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํด ์ธ๋ ๋จ์ ์ปฌ๋ ์ ์ ํ์ฉํ๋ค. ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฒญ์ํ ๋๋ ์ด๋ค ์๋ก ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ์ ์ธ๋(Young Generation)์ ๋จ๊ธฐ๊ณ , ์ด๋ค ์์กด ๊ฐ์ฒด๋ฅผ ๊ตฌ์ธ๋(Old Generation)๋ก ์ฎ๊ธธ์ง๋ฅผ ๊ฒฐ์ ํด์ผ ํ๋ค. ์ด๋ฅผ ์ํด ๊ฐ ๊ฐ์ฒด์ ๊ฐ์ฒด ํค๋์ ์ธ๋ ๋์ด ์นด์ดํฐ๊ฐ ํฌํจ๋์ด ์๋ค.
๊ฐ์ฒด๋ ์ฃผ๋ก ์๋ด(Eden)์์ ํ์ด๋๋ฉฐ, ์ด๊ธฐ ๋์ด๋ 0์ด๋ค. ์ฒซ ๋ฒ์งธ ๋ง์ด๋ GC(Minor GC)์์ ์ด์๋จ์ ๊ฐ์ฒด๋ ์์กด์ ๊ณต๊ฐ(Survivor Space)์ผ๋ก ์ด๋ํ๊ณ ๋์ด๊ฐ 1๋ก ์ฆ๊ฐํ๋ค. ์ดํ ์์กด์ ๊ณต๊ฐ์์ ๋ง์ด๋ GC๋ฅผ ๊ฒช์ ๋๋ง๋ค ๋์ด๊ฐ 1์ฉ ์ฆ๊ฐํ๋ฉฐ, ํน์ ๋์ด์ ๋๋ฌํ๋ฉด ๊ตฌ์ธ๋๋ก ์น๊ฒฉ๋๋ค.
๊ตฌ์ธ๋๋ก ์น๊ฒฉ๋๋ ๋์ด๋ -XX:MaxTenuringThreshold ๋งค๊ฐ๋ณ์๋ก ์ค์ ํ ์ ์์ผ๋ฉฐ, ๊ธฐ๋ณธ๊ฐ์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ์ข ๋ฅ์ JDK ๋ฒ์ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.
-XX:TargetSurvivorRatio ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํ๋ฉด ๋์ด ์๊ด์์ด ์์กด์ ๊ณต๊ฐ์ด ์ง์ ํ ๋น์จ ์ด์ ์ฐจ๋ฉด ์ด์๋จ์ ๊ฐ์ฒด๋ค์ ๊ตฌ์ธ๋๋ก ์น๊ฒฉ์ํจ๋ค.
๊ณต๊ฐ์ด ๋น์ข์ผ๋ฉด ๊ฐ์ ๋ก ์น๊ฒฉ์ํจ๋ค.
๋ค์ํ ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ํจํด์ ๋ ์ ๋ฐํ๊ฒ ๋์ํ๊ธฐ ์ํด ํซ์คํ ๊ฐ์ ๋จธ์ ์ ๋์ด๊ฐ -XX::MaxTenuringThreshold๋ณด๋ค ์ ์ด๋ ๊ตฌ์ธ๋๋ก ์น๊ฒฉ์ํค๊ธฐ๋ ํ๋ค. '์์กด์ ๊ณต๊ฐ ์ ์ ์จ'์ด ์กฐ๊ฑด์ด๋ฉฐ, ๊ธฐ๋ณธ๊ฐ์ 50%๋ผ์ ์์กด ๊ฐ์ฒด ์ ์ฒด์ ํฌ๊ธฐ ์ดํฉ์ด ์์กด์ ๊ณต๊ฐ์ ์ ๋ฐ์ ๋์ด์๋ฉด ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ๊ตฌ์ธ๋๋ก ์ฎ๊ธด๋ค.
์ฐธ๊ณ
https://product.kyobobook.co.kr/detail/S000213057051
JVM ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ | ์ ์ฐ์ฆ๋ฐ - ๊ต๋ณด๋ฌธ๊ณ
JVM ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ | ์๋ฐ ๊ฐ์ ๋จธ์ ์ ๊น์ํ ๋ด๋ถ๋ฅผ ํฅํด ๋ ๋๋ ํฅ๋ฏธ์ง์งํ ๋ชจํC·C++๋ฅผ ์ฌ์ฉํด ์ฃผ๋ก ํ๋ก๊ทธ๋๋ฐ์ ํ๋ ์์ ๊น๋ค๋ก์ด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ํ๋ซํผ ์ด์์ฑ ๋ฌธ์ ๋ ๊ฐ๋ฐ์๋ค์
product.kyobobook.co.kr