๋ค์ด๊ฐ๋ฉฐ
- ์๋ฒ๋ฅผ ์ด์ํ๋ฉด์ ๊ฐ์๊ธฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ ๊ฒฝ์ฐ ์ด๋ ๋ถ๋ถ๋ถํฐ ํ์ธํด์ผ ์ข์๊น?
- ์ฌ๋ฌ ๋ถ๋ถ์ ์ฒด๊ณ์ ์ด์ง ์๊ฒ ํ์ธํด์๋ ์ง๋ ๋ ์ ํ๊ณ ํ๊ณ ,
- ์ด๋ ๋ถ๋ถ๋ถํฐ ๋จ๊ณ์ ์ผ๋ก ๋ด์ผํ๋์ง ์ข์ ๊ฐ์ด๋ ๊ธ์ด ์์ด ๊ณต์ ํ๋ ค ํฉ๋๋ค.
- ์ ๊ฐ ์ง์ ๋ฌธ์ ๋ฅผ ๊ฒช์ผ๋ฉฐ ํ์ธํด์ผ ํ ๋ถ๋ถ์ ๋ช ๊ฐ์ง ๋ ์ถ๊ฐํ์ต๋๋ค.
How to Trouble Shooting?๐ง
Step A์์ C๋ก ๊ฐ์๋ก ์ทจ๋ ๋น์ฉ์ด ๋น์ธ์ง๋๋ค.
Step A - ์ฌ์ฉ์ ํ์ํ์
- 503 / 500 ERROR ?
- ๋ฌด์๋ต / ๋๋ฆฐ ์๋ต ?
- ์์๊ณผ๋ ๋ค๋ฅธ Application ๋์
- Ex) ๊ฐํ์ ์ธ์ฆ ์คํจ
Step B - ์๋ฒ ์ํ ํ์
- Application Server
- CPU ์ฌ์ฉ๋ฅ
- Memory ์ฌ์ฉ๋ฅ (Swap ์ฌ์ฉ์ฌ๋ถ)
- Disk ์ฉ๋, I/O
- Network : Inbound, OutBound
- ์ฐ๊ณ์๋ฒ ์ํ (Database ์๋ฒ, Cache ์๋ฒ)
- CPU ์ฌ์ฉ๋ฅ
- Memory ์ฌ์ฉ๋ฅ (Swap ์ฌ์ฉ์ฌ๋ถ)
- Disk ์ฉ๋, I/O
- Network : Inbound, OutBound
Step C - Application์ ์ ๋ณด ํ์
- Application Server Log
- OOM(Out of Memory)๋ฑ ์ ํ์ ์ธ Fatal ์ฌ๋ฌ ๋ฐ์ ์ฌ๋ถ
- ์์ฃผ ๋ฐ์ํ๋ ์๋ฌ ์คํ
- ์ฐ๊ณ Server Log
- ์ถ๊ฐ์ ์ผ๋ก ์ฐ๊ณ ์๋ฒ์์๋ง ํ์ธ๊ฐ๋ฅํ Metric ํ์ธ
- Ex) Elastic Search(Reject Exception)
- ๋ณ๊ฒฝ๋ ์์ค์ฝ๋
- WAS์ ์ฃผ์ ์ค์
- Web Server์ ์ฃผ์ ์ค์
- GC Option & Log
- Thread Stack Dump
- Heap Dump
- ์คํ๊ฒฝ๋ก ํ๋กํ์ผ๋ง
๋๋ถ๋ถ ์ด๋ฐ ๋ฌธ์ ์ ๊ณตํต์ ์..?
- ๊ฐ๋ฐํ๊ฒฝ์์๋ ๊ด์ฐฎ์์ด์.
- ์ด์ํ๊ฒฝ์์๋ ํ์์๋ ๊ด์ฐฎ์์ด์.
- ํ์ง๋ง?
- ๋ฌธ์ ๊ฐ ๋ถ๊ท์น์ ์ผ๋ก ๋ฐ์ํ๋ค์.
- ๋ถํ๊ฐ ๋ชฐ๋ฆฌ๋ฉด ์ด์ํด์ ธ์.
์์ค ๋์ ์ง์ ์์ฒญ์ ์ด๋ป๊ฒ ํ๋ ๊ฒ์ธ๊ฐ?
์ถ๋ก ๊ณผ์ ๊ณผ ์ฆ๊ฑฐ๊น์ง ๊ณต์
- ์ค์ค๋ก ์๊ฐํ๋ ํด๊ฒฐ ๋ฐฉ์์ด ์์ง๋ง, ๋ ๋์ ๋ฐฉ์์ ์ฐพ๊ธฐ ์ํด ๋ฌธ์ํ๋ ๊ฒ.
- ํด๊ฒฐ ๋ฐฉ์์ ๋ํ ๋ถ์์ฉ ์ฌ๋ถ ํ์ธ
- ๋ค๋ฅธ ๋ถ์์ ์ ์ฌ ์ฌ๋ก ๋ฌธ์
- ์ฌ์ค ์ต๊ณ ์ ์ง์ ์์ฒญ์ ์์ฒญํ์ง ์๋ ๊ฒ.
- ์์์ ํด๊ฒฐํ๊ณ , ๊ณผ์ ๊ณผ ๋ฐฐ๊ฒฝ ์ ๋ณด๊น์ง ๋ค ์ ๋ฆฌํด์ ๋ค๋ฅธ ๋ถ์์๋ ๊ณต์ ํ๋ ๊ฒ.
๋ฌธ์ ์ ๋ํ ์ ๋ณด๋ ์ด๋ป๊ฒ ์ ๊ณตํด์ผ ํ ๊น?
- ํด๋น ์ฆ์ ์ฌํ ์กฐ๊ฑด
- ์ฌ์ฉ์์๊ฒ ํญ์ / ๊ฐํ์ ์ผ๋ก ๋ํ๋๋์ง?
- ์ผ๋ถ / ์ ์ฒด ์๋ฒ์ ๋ํ๋๋์ง..?
- ์ ์ฒด ์๋ฒ :
๊ณตํต ์์๊ณผ ์ค์
- ์ผ๋ถ ์๋ฒ :
Thread ์์ ์ฑ ๋ฌธ์
๋ฅผ ๋จผ์ ์์ฌ
- ์ ์ฒด ์๋ฒ :
Example - ์ธํ๋ผ ์์ ์ค์ ๋ฌธ์
Problem Description
- Step A
- ์ฌ์ฉ์๊ฐ ๋ชฐ๋ฆด ์ ๊ฐํ์ ๋๋ฆฐ ์๋ต
- 500, 503 ERROR
- Step B
- Swapping ์์ญ ์ฌ์ฉ.
- Step C
- ์ฆ์ GC, OOM, Connection Pool์ getConnection()์์ ๋๊ธฐ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฑ ๊ณต์ฉ ์ธ๋ถ ์์์์ ๋ณ๋ชฉ์ด ์์ ๋ ๋ถ์ ์ ํ ์ค์ ๋๋ฌธ์ ์ํ๋ฅผ ์ ํ์ํค๊ฑฐ๋ ๋ฐฉ์ดํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- ๋ชจ๋ ์๋ฒ์์ ๊ฐ์ ํ์์ด ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค.
How to solve?
- ConnectionPool
- DBCP : maxActive(maxTotal), maxWait(maxWaitMills), validationn query
- JDBC
- Socket timeout๋ฑ
- Web Server
- Apache Httpd : maxClients
- Web Application Server
- Tomcat : maxThreads, AJP connector์ backlog ๊ฐ
- JVM : GC option
- Apache MaxClients์ Tomcat์ Full GC
- JDBC Timeout ์ดํดํ๊ธฐ
- Garbage Collection ํ๋
Example - Memory Leak ๊ฒฝ๋ก ์ ๊ฑฐ
Problem Description
- Step C
- ์๋ฒ ์ฌ๋ฆฐ์ง ์ค๋๋๋ฉด ์ฆ์ GC, OOM
How to solve?
- ์ฃผ๋ก Cache ๋ก์ง์์ ๋ฐ์
- ํด๋น ์๋น์คํ์์ ์ง์ ๋ง๋ Cache ๋ก์ง์ด ์๋๊ฐ?
- Cache ์ฉ๋์ ํ๋๊ฐ์ด ์ ์ ํ๊ฐ?
- ๋ชจ๋ ์๋ฒ์ ๊ฐ์ ํ์์ด ๊ถ๊ทน์ ์ผ๋ก ์๊น.
- Thread ๋ถ์์ ์ฑ์ ์ํ Memory Leak
- ์ผ๋ถ ์๋ฒ์๋ง OOM ๋ฐ์
Trouble Shooting Tool
- Thread Dump
- Heap Dump
- GC Log ๋ถ์
- Profiler
์ ๋ฆฌํ์๋ฉด?
- Trouble Shooting์ ๋ณตํฉ์ ์ธ ์์ธ์ผ๋ก ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- ๋จ์ํ ์ฆ์๋ง์ผ๋ก ํ๋จํ ์ ์์ต๋๋ค.
- ์ข ํฉ์ ์ผ๋ก ๋ง์ ์ ๋ณด๋ค์ ์ฐ๊ฒฐํด์ ๋ด์ผํฉ๋๋ค.
- ๊ฐ์ ๊ฒฐํจ์ด ๋ค๋ฅธ ์์ธ๊ณผ ์ฝํ๋ฉด ํ์์ด ๋ค๋ฅด๊ฒ ๋ํ๋ฉ๋๋ค.
- ์ดํ๋ฆฌ์ผ์ด์
์ฝ๋ + ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฝ๋
- ์์ชฝ์ ๋ค ํ์ธํด์ผ ๋ฌธ์ ํ์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ๊ฐ์ ํ์์ด๋ผ๋ ๊ทผ๋ณธ์์ธ์ด ๋ค๋ฅธ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
- ์์ง ๋น์ฉ์ด ์ผ ์ ๋ณด๋ก ์์ธ์ ๋ฐํ๋ผ ์ ์๋ค๋ฉด ํด๊ฒฐ์ด ๋ ๋น ๋ฆ
๋๋ค.
- ์ผ ๋น์ฉ์ผ๋ก ์์งํ ์ ์๋ ์ ๋ณด๋ถํฐ ๋น ๋ฅด๊ฒ.
- WAS์ DB์ ์์ ๋ชจ๋ํฐ๋ง, ์ดํ๋ฆฌ์ผ์ด์ ๋ก๊ทธ, ์์ค ์คํ๋คํ
- ํ๋คํ๊น์ง ๊ฐ๋ฉด ์ทจ๋/๋ถ์๋น์ฉ์ด ๋ ๋น์๋๋ค.
- Trouble Shooting ๋๊ตฌ๋ ๋๊ตฌ์ผ ๋ฟ
- ๋๊ตฌ ์์ฒด๊ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ฃผ์ง๋ ์์ต๋๋ค.
- ๋ฌธ์ ํด์, ์ถ๋ก ๊ณผ์ ์ด ๋ ์ค์ํฉ๋๋ค.
- Dump์์ ๋์ค๋ ํด๋์ค, ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์ง์์ด ์์ด์ผ ๊ทผ๋ณธ ์์ธ์ ํ์ ํ ์ ์์ต๋๋ค.
- ๋๊ตฌ ์์ฒด๊ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ฃผ์ง๋ ์์ต๋๋ค.
ํ๊ธฐ
- ๊ฐ๋ฐ์๋ ROI(Return on investment)๋ฅผ ๋ ๊ณ ๋ฏผํ๋ผ๋ ์กฐ์ธ์ ๋ค์ ์ ์ด ์๋ค.
- ์ ์ํ๋ ์ฌ๋ผ์ด๋๋ฅผ ๋ณด๋ฉด์ ํ๋์ ์ ๋ณด๋ฅผ ์ป๋๋ผ๋ ROI๋ฅผ ์๊ฐํ๊ณ ์ฒด๊ณ์ ์ผ๋ก ํ์ธํด๊ฐ๋ ๊ฒ์ ๋๋ ์ ์์๋ค.
- ์ฌ๋ผ์ด๋๋ฅผ ๋ณด๋ฉด์ ์์ง ๋ชจ๋ฅด๋ ์ฉ์ด์ ํด๋ณธ ๊ฒฝํ์ด ์๋ ๊ฒ๋ค์ด ๋๋ฌด ๋ง๊ธฐ์ ์ถ๊ฐ๋ก ์ ๋ฆฌํด๊ฐ์ผ๊ฒ ๋ค.