WebSphere์
native_stderr.logํ์ผ์๋ ๋กํ ์ด์ (Rotation) ๊ธฐ๋ฅ์ด ๋ด์ฅ๋์ด ์์ง ์์ต๋๋ค. ๋ฐ๋ผ์ Verbose GC๊ฐ ํ์ฑํ๋ ๊ฒฝ์ฐ ํ์ผ ์ฉ๋์ด ๋ฌดํ์ ์ฆ๊ฐํฉ๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด JVM ์ต์ ์ ์ฌ์ฉํ์ฌ GC ๋ก๊ทธ๋ฅผ ๋ณ๋ ํ์ผ๋ก ๋ถ๋ฆฌํ๊ณ ์ํ์ํค๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํฉ๋๋ค.
1. ์์ธ ๋ถ์ (Root Cause)
WebSphere๋ SystemOut.log์ SystemErr.log์ ๋ํด์๋ ์๊ฐ/ํฌ๊ธฐ ๊ธฐ๋ฐ์ ๋ก๊ทธ ์ํ์ ์ง์ํฉ๋๋ค. ํ์ง๋ง, JVM ํ๋ก์ธ์ค ์์ฒด์ ์ถ๋ ฅ์ ๋ด๋ native ๋ก๊ทธ๋ WAS๊ฐ ์ ์ดํ์ง ๋ชปํฉ๋๋ค.
- ๋ฌธ์ ์ : ๊ด๋ฆฌ ์ฝ์์์ "Verbose garbage collection"์ ์ฒดํฌํ๋ฉด, GC ์ํ ๊ธฐ๋ก์ด
native_stderr.log์ ๋์ ๋ฉ๋๋ค. - ๊ฒฐ๊ณผ: ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ํ์ผ์ด GB ๋จ์๋ก ์ปค์ง๋ฉฐ, ๋์คํฌ Full ์ฅ์ ๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค.
Test Environment
- OS: CentOS 7 (3.10.0-957.el7.x86_64)
- WAS: WebSphere Application Server v8.5 / 9.0
- JDK: IBM JDK (WebSphere ๊ธฐ๋ณธ)
2. ํด๊ฒฐ ๋ฐฉ๋ฒ: GC ๋ก๊ทธ ๋ถ๋ฆฌ ์ค์
ํด๊ฒฐ์ ํต์ฌ์ native ๋ก๊ทธ์ GC ๋ด์ฉ์ ๋จ๊ธฐ์ง ์๊ณ , ๋ณ๋์ ํ์ผ๋ก ๋นผ๋ด๋ ๊ฒ์
๋๋ค. ์ฌ์ฉํ๋ JDK ๋ฒค๋์ ๋ฐ๋ผ ์ต์
์ด ๋ค๋ฆ
๋๋ค.
Step 1: ๊ธฐ๋ณธ Verbose GC ๋นํ์ฑํ
JVM ์ต์ ์ผ๋ก ์ ์ดํ๊ธฐ ์ํด, ์ฝ์์ ์ฒดํฌ๋ฐ์ค ์ต์ ์ ํด์ ํด์ผ ํฉ๋๋ค.
- ๊ฒฝ๋ก: ์๋ฒ > ์๋ฒ ์ ํ > WebSphere Application Server > [์๋ฒ๋ช ] > Java ๋ฐ ํ๋ก์ธ์ค ๊ด๋ฆฌ > ํ๋ก์ธ์ค ์ ์ > Java ๊ฐ์ ๋จธ์
- ์กฐ์น:
Verbose garbage collection์ฒดํฌ๋ฐ์ค ํด์ (Uncheck)
[๊ทธ๋ฆผ] ๊ธฐ๋ณธ Verbose GC ์ต์ ํด์
Step 2: ์ผ๋ฐ JVM ์ธ์(Generic JVM arguments) ์ถ๊ฐ
๊ฐ์ ํ๋ฉด์ Generic JVM arguments ์
๋ ฅ๋์ ์๋ ์ต์
์ ์ถ๊ฐํฉ๋๋ค.
Case A: IBM JDK ์ฌ์ฉ ์ (WebSphere ๊ธฐ๋ณธ)
IBM JDK๋ -Xverbosegclog ์ต์
์ ์ฌ์ฉํ์ฌ ๋ก๊ทธ ํ์ผ ๊ฒฝ๋ก์ ๋กํ
์ด์
๊ท์น์ ์ง์ ํฉ๋๋ค.
# ๊ตฌ๋ฌธ: -Xverbosegclog:[๊ฒฝ๋ก/ํ์ผ๋ช
][,X,Y]
# X: ํ์ผ ๊ฐ์, Y: ํ์ผ๋น GC ์ฌ์ดํด ์
# ์์ 1: ๋ ์ง/PID ํฌํจํ์ฌ ๋จ์ผ ํ์ผ ์์ฑ (๊ฐ์ฅ ์ผ๋ฐ์ )
-Xverbosegclog:${SERVER_LOG_ROOT}/gc.%Y%m%d.%H%M%S.%pid.txt
# ์์ 2: 10,000 ์ฌ์ดํด๋ง๋ค ํ์ผ ๊ต์ฒด, ์ด 10๊ฐ ํ์ผ ์ ์ง (๋กํ
์ด์
)
-Xverbosegclog:${SERVER_LOG_ROOT}/verbosegc.log,10,10000
Case B: Oracle/HotSpot JDK ์ฌ์ฉ ์
๋๋ฌผ์ง๋ง Solaris๋ ํน์ ํ๊ฒฝ์์ HotSpot ๊ณ์ด JDK๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ๋๋ค.
-verbose:gc
-Xloggc:${SERVER_LOG_ROOT}/verbosegc.log
-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=10
-XX:GCLogFileSize=20M
-XX:+PrintGCDateStamps
-XX:+PrintGCDetails
${SERVER_LOG_ROOT} ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋์ฝ๋ฉ๋ ๊ฒฝ๋ก ๋์ ๊ฐ ์๋ฒ์ ๋ก๊ทธ ๋๋ ํ ๋ฆฌ๋ฅผ ์๋์ผ๋ก ์ฐพ์๊ฐ๋ฏ๋ก ๊ด๋ฆฌ๊ฐ ์ฉ์ดํฉ๋๋ค.
3. ์ ์ฉ ํ์ธ (Verification)
- ์ค์ ์ ์ฅ ํ ์๋ฒ๋ฅผ ์ฌ๊ธฐ๋ํฉ๋๋ค.
ps -ef | grep java๋ช ๋ น์ด๋ก ํ๋ก์ธ์ค๋ฅผ ํ์ธํ์ ๋, ์ถ๊ฐํ ์ต์ ์ด ์ ์ฉ๋์ด ์๋์ง ํ์ธํฉ๋๋ค.- ๋ก๊ทธ ๋๋ ํ ๋ฆฌ(
logs/[์๋ฒ๋ช ]/)์gc...txt๋๋ ์ค์ ํ ์ด๋ฆ์ ํ์ผ์ด ์์ฑ๋๋์ง ํ์ธํฉ๋๋ค.
Next Step:
๋ถ๋ฆฌ๋ GC ๋ก๊ทธ ํ์ผ์ IBM GCMV (Garbage Collection and Memory Visualizer) ๋๊ตฌ์ ๋ฃ์ด ๋ถ์ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๋ ํ๋ ํฌ์ธํธ๋ฅผ ์๊ฐ์ ์ผ๋ก ํ์ธํ ์ ์์ต๋๋ค.