2023. 7. 4. 03:30ใ๊ฐ๋ ์ ๋ฆฌ ์์ ์ค/๋ฌธ์ ์ ๋ฆฌ
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."
๐ทโ๏ธ ์์ ์ค์ธ ๋ด์ฉ
ํ์ฌ ์ฃผ๋๋ ์ ํจ์ค๋ฅผ ์ด์ฉํ์ฌ ๋ฌด์ค๋จ ๋ฐฐํฌ ํ
์คํธ๋ฅผ ์งํ ์ค์ธ๋ฐ, ์ด ์ ์๋ ๋ฌธ์ ์์ด ์ ๋์๋ค๊ฐ ์ด๋๋ ๋ถํด๊ฐ
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 16.330s
INFO: Final Memory: 24M/87M
INFO: ------------------------------------------------------------------------
[Pipeline] }
[Pipeline] // withSonarQubeEnv
[Pipeline] }
[Pipeline] // script
Post stage
[Pipeline] discordSend
Sending notification to Discord.
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (SONARQUBE_QUALITY_GATE)
Stage "SONARQUBE_QUALITY_GATE" skipped due to earlier failure(s)
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (๊ฐ๋ฐ ํ๊ฒฝ Application ์๋ฒ์ File ์ ๋ฌ ๋ฐ ์คํฌ๋ฆฝํธ ์คํ ๊ถํ ๋ถ์ฌ)
Stage "๊ฐ๋ฐ ํ๊ฒฝ Application ์๋ฒ์ File ์ ๋ฌ ๋ฐ ์คํฌ๋ฆฝํธ ์คํ ๊ถํ ๋ถ์ฌ" skipped due to earlier failure(s)
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (๊ฐ๋ฐ ํ๊ฒฝ Docker Image ์์ฑ ๋ฐ Backup ์์
)
Stage "๊ฐ๋ฐ ํ๊ฒฝ Docker Image ์์ฑ ๋ฐ Backup ์์
" skipped due to earlier failure(s)
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (๊ฐ๋ฐ ํ๊ฒฝ Docker ๊ด๋ จ ์์
)
Stage "๊ฐ๋ฐ ํ๊ฒฝ Docker ๊ด๋ จ ์์
" skipped due to earlier failure(s)
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (์ด์ ํ๊ฒฝ WAS ์๋ฒ์ File ์ ๋ฌ ๋ฐ ์คํฌ๋ฆฝํธ ์คํ ๊ถํ ๋ถ์ฌ)
Stage "์ด์ ํ๊ฒฝ WAS ์๋ฒ์ File ์ ๋ฌ ๋ฐ ์คํฌ๋ฆฝํธ ์คํ ๊ถํ ๋ถ์ฌ" skipped due to earlier failure(s)
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (์ด์ ํ๊ฒฝ Docker Image ์์ฑ ๋ฐ Backup ์์
)
Stage "์ด์ ํ๊ฒฝ Docker Image ์์ฑ ๋ฐ Backup ์์
" skipped due to earlier failure(s)
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (์ด์ ํ๊ฒฝ Docker ๊ด๋ จ ์์
)
Stage "์ด์ ํ๊ฒฝ Docker ๊ด๋ จ ์์
" skipped due to earlier failure(s)
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Jenkins CI/CD ์์
์๋ฃ)
Stage "Jenkins CI/CD ์์
์๋ฃ" skipped due to earlier failure(s)
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withCredentials
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
java.lang.OutOfMemoryError: Java heap space
[Gitea] Notifying branch build status: FAILURE There was a failure building this commit
[Gitea] Notified
Finished: FAILURE
์์ ๊ฐ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด์ Sonar Qube์ QUALITY_GATE ๋จ๊ณ๋ฅผ ๋์ด๊ฐ์ง ๋ชปํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋์์ด์.
๐ค ์์ธ ๋ถ์
์ฃผ๋๋ ์ ํจ์ค์ ์ Error Log ์ค java.lang.OutOfMemoryError: Java heap space ์ด ๋ถ๋ถ์ ์ฃผ๋ชฉํ์๊ณ ,
์ด ๋ถ๋ถ์ ๋ํด ํด๊ฒฐ ํด๋ณด๋ ค๊ณ ํด์.
์์ ๋ฌธ์ ๋ ๊ฒฐ๊ตญ ์ ํจ์ค ๋ฐฐํฌ ์ค JAVA (์ ํจ์ค๋ JAVA ๊ธฐ๋ฐ Application) ๊ฐ์ ๋จธ์ ์ฆ, JVM์์ Heap Memory๊ฐ ๋ถ์กฑํ๋ค๊ณ ์๋ ค์ฃผ๋ ๊ฑฐ์์.
๊ทธ ์ ์ Jenkins Container ์์ ์ฌ์ฉ๋์ ์กฐ์ฌํด ๋ณด์์ด์.
๐ก ์ฐธ๊ณ ์ฌํญ
CPU % : CPU ์ฌ์ฉ๋ฅ
MEM USAGE / LIMIT : Container Memory ์ฌ์ฉ๋(MB) / Container ์ฌ์ฉ ๊ฐ๋ฅ Memory ์ ํ ์ฉ๋
MEM % : Container Memory ์ฌ์ฉ๋
NET I/O: Network Input, Output
BLOCK I/O: Network ์ฐจ๋จ Input, Output
PIDS : Process ID
์ต์ด ์ ํจ์ค ์ปจํ
์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ํ๋ฅผ ํ์ธํด ์ฃผ์๋๋ฐ, ๋งค์ฐ ์ถฉ๊ฒฉ์ ์ด์์ด์.
Memory ์ฌ์ฉ๋์ด ๋ฌด๋ ค 243%๋ก ๊ณผ๋ถํ๊ฐ ๊ฑธ๋ฆฌ๊ณ ์๋ค๋ ๊ฑธ ํ์ธํ ์ ์์์ด์.
๋ฐฐํฌ ๋จ๊ณ์ ํ ๊ฒ๋ค์ด ๋ง์์ง๋ ์ ํจ์ค๊ฐ ๋ฒ๊ฑฐ์ ํ๋ค๋ ๊ฒ์ ๋๋ ์ ์์์ด์.
๋จผ์ Container์ ์์ ์ฌ์ฉ ์ ํ์ ๋๋ ค์ฃผ๊ณ , Heap Size๋ฅผ ๋๋ ค์ค์ผ ๊ฒ ์ด์.
๐ป ๋ฌธ์ ํด๊ฒฐ!
์ฃผ๋๋ ์์ ๊ฐ์ด Docker ๊ธฐ๋ ๋ช
๋ น์ด๋ฅผ Shell Script๋ก ๋ง๋ค์ด์ ๊ด๋ฆฌํ๊ณ ์๋๋ฐ, 2๋ฒ์งธ ์ค๊ณผ ๊ฐ์ด Memory ์ ํ ํฌ๊ธฐ๋ฅผ 2GB๋ก ๋๋ ค์ฃผ๊ณ , ๋ง์ฝ Host Server์ Memory๊ฐ ๋ถ์กฑํ๊ฒ ๋๋ฉด 1GB๋ก ์ ํ๋ ์ ์๋๋ก ๋ช
๋ น์ด๋ฅผ ์์ฑํด ์ฃผ์์ด์.
Container๋ฅผ ์ญ์ ํ๊ณ , ์ ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ์ฌ ๊ธฐ๋ํด ์ฃผ์๋๋ฐ, ์์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋์์ด์.
์ด๋ ์ปค๋ ์ค์ ๋ฌธ์ ๋ก swap์ ๋ํ ์ ํ์ ์ง์ํ์ง ์๋๋ค๋ ๋ด์ฉ์ด์์.
์ด๋ด ๋๋ swap limit capablities๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ์์ ํด ์ฃผ์ด์ผ ํด์.
์ฐธ๊ณ ๋ก ์ฃผ๋๋ Ubuntu 22.04 LTS Linux๋ฅผ ์ฌ์ฉํ๊ณ ์์ด์.
๊ทธ๋ฐ ๋ค ์์ ๊ฐ์ด ์์ ํ ๋ด์ฉ์ด ์ธ์๋ ์ ์๊ฒ Update ๋ช
๋ น์ด๋ฅผ ๋ ๋ ค์ค๋๋ค.
๊ทธ๋ฆฌ๊ณ , ์๋ฒ ์์ฒด๋ฅผ ์ฌ๋ถํ
ํด์ฃผ์ด์ผ ํด์.
์์ ๊ฐ์ด Memory ์ค์ ๋ถ๋ถ์ด ์ธ์๋๋ฉด์ Jenkins Container ๊ธฐ๋ ์คํฌ๋ฆฝํธ๊ฐ ๋์๋ ๊ฑธ ์ ์ ์์ด์.
๋ง์ฝ ์ด๋ ๊ฒ ์ฌ๋ถํ
๊น์ง ํ์์๋ ๋ถ๊ตฌํ๊ณ , Memory ์ฌ์ฉ๋์ด ๋์ด๋์ง ์๋๋ค๋ฉด
Docker Deamon์ ์ฌ ๊ธฐ๋ํด์ฃผ๋ฉด ํด๊ฒฐํ ์ ์์ด์.
systemctl restart docker
์ด๋ ๊ฒ Memory๊ฐ ๋์ด๋ ๊ฑธ ํ์ธํ ์ ์์ด์.
์ด๋ฒ์ ๋ค์ ์ ํจ์ค ๊ธฐ๋ ์คํฌ๋ฆฝํธ์ ๋ด์ฉ์ ์ถ๊ฐํด ๋ณผ๊ฑฐ์์.
๋ฐ๋ก 3๋ฒ์งธ ์ค๊ณผ ๊ฐ์ด Container์ Heap Size๋ฅผ ์ง์ ํด ์ฃผ์ด ๊ธฐ๋ ์์ผ ๋ณด๋ ค๊ณ ํด์.
์ด๋ ๊ฒ ํ๊ณ Container๋ฅผ ์ญ์ ํ ๋ค ๋ค์ ์ฌ ๊ธฐ๋ํด ์ค๊ฒ์.
๊ธฐ๋์ด ์ ๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
๋ค์ ์ ํจ์ค ์์
์ ์์ํด ๋ณด์์ด์.
์ด๋ ๊ฒ ์ ์ฒ๋ฆฌ๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."