๐Ÿšจ๊ฐœ์š”

์‚ฌ๋‚ด์—์„œ ์šด์˜ ์ค‘์ธ ํŠน์ • API(tomcat๊ธฐ๋ฐ˜ APP)์˜ JVM Heap ์‚ฌ์šฉ๋ฅ ์ด ์ง€์†์ ์œผ๋กœ 70%-80% ์ด์ƒ ์œ ์ง€๋˜๋ฉฐ ์„ฑ๋Šฅ ์ €ํ•˜ ๊ฐ€๋Šฅ์„ฑ์ด ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋”ฐ๋ผ Heap ์ฆ์„ค ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(Memory Leak) ์—ฌ๋ถ€๋ฅผ ํฌํ•จํ•œ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ› ๏ธ ์ด์Šˆ ์‚ฌํ•ญ

  • 4์›” ์ค‘์ˆœ:
    • JVM๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์ž‘ ํ›„ ์šด์˜ ๋Œ€์‹œ๋ณด๋“œ์—์„œ JVM Heap ์‚ฌ์šฉ๋ฅ ์ด 80% ์ด์ƒ์œผ๋กœ ๊พธ์ค€ํžˆ ์œ ์ง€๋จ์„ ๊ฐ์ง€
    • ์ดˆ๊ธฐ ๋Œ€์‘์œผ๋กœ ๊ฐœ๋ฐœ์ž์™€ ๋…ผ์˜ ํ›„ API JVM Heap ์‚ฌ์ด์ฆˆ๋ฅผ 1GB → 2GB๋กœ ์ฆ์„ค
  • 5์›” ์ดˆ:
    • ๋™์ผ API์—์„œ ๋‹ค์‹œ Heap ์‚ฌ์šฉ๋ฅ ์ด 80% ์ด์ƒ ์ ์œ ๋จ
    • Heap ์ฆ๊ฐ€ ํŒจํ„ด์ด ๋™์ผ API์—์„œ ๋ฐ˜๋ณต๋จ์— ๋”ฐ๋ผ GC ๋ฐ Heap ์‚ฌ์šฉ ๋ถ„์„ ์ง„ํ–‰

๐Ÿ” ์›์ธ ๋ถ„์„

1. JVM ๋‚ด๋ถ€ ์ง€ํ‘œ ๋ถ„์„

  • Memory Pool ๋ณ„ ์‚ฌ์šฉ๋ฅ  ํ™•์ธ ๊ฒฐ๊ณผ,
    → PS Old Gen ์˜์—ญ์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๊ณ„์†์ ์œผ๋กœ ์šฐ์ƒํ–ฅ (์ฆ๊ฐ€-ํ•˜๊ธฐ์ด๋ฏธ์ง€์ฐธ๊ณ )
    → Full GC ์ดํ›„์—๋„ ์ถฉ๋ถ„ํžˆ ํšŒ์ˆ˜๋˜์ง€ ์•Š๋Š” ํŒจํ„ด ํ™•์ธ
  • ์ด๋Š” ๊ฐ์ฒด๊ฐ€ ์žฅ๊ธฐ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ๋จธ๋ฌด๋Š” ํ˜„์ƒ์„ ์˜๋ฏธํ•˜๋ฉฐ, Memory Leak ๊ฐ€๋Šฅ์„ฑ์œผ๋กœ ์ถ”์ •

2. Heap Dump ๋ถ„์„

  • ๋Œ€์ƒ ํ”„๋กœ์„ธ์Šค์—์„œ heap dump ์ˆ˜ํ–‰ 
    โ€ป -live ์˜ต์…˜์€ ํ˜„์žฌ GC ํ›„ ์ƒ์กด ๊ฐ์ฒด๋งŒ ๋คํ”„ํ•˜๋ฉฐ, ๋‚ด๋ถ€์ ์œผ๋กœ Full GC๋ฅผ ํŠธ๋ฆฌ๊ฑฐ
  •  
  • ๋ช…๋ น์–ด : jmap -dump:live,format=b,file=heap_0513.hprof < tomcat PID>
  • Eclipse Memory Analyzer Tool(MAT)๋กœ ๋ถ„์„ ๊ฒฐ๊ณผ:
    • Problem 1: MySQL Connector ๊ด€๋ จ ๊ฐ์ฒด๊ฐ€ ํ•ด์ œ๋˜์ง€ ์•Š๊ณ  ๊ณ„์† ์œ ์ง€


    • Problem 2: SSL Handshake ๊ฐ์ฒด๊ฐ€ ๋ˆ„์ ๋˜์–ด ์†Œ๋ฉธ๋˜์ง€ ์•Š์Œ
      
  • ํ•ด๋‹น ๋ˆ„์ˆ˜ ๊ฐ์ฒด๋“ค์˜ Retained Size๋ฅผ ๋ถ„์„ํ•œ ๊ฒฐ๊ณผ:
    • ์ด ์•ฝ 200MB ์ˆ˜์ค€์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ํ™•์ธ
    • ์ „์ฒด Heap ๋Œ€๋น„ ์†Œ๊ทœ๋ชจ์ด๋‚˜, FullGC ํŠธ๋ฆฌ๊ฑฐ ์ดํ›„์ด๊ธฐ์—, ๋ˆ„์  ์‹œ OutOfMemoryError ๊ฐ€๋Šฅ์„ฑ ์กด์žฌ



     

3. ๋ˆ„์ˆ˜ ๊ทœ๋ชจ ํŒ๋‹จ ๊ด€๋ จ ์œ ์˜์‚ฌํ•ญ

  • jmap -dump:live๋Š” GC ํ›„ ์ƒ์กด ๊ฐ์ฒด๋งŒ ๋คํ”„ํ•˜๋ฏ€๋กœ,
    → ์‹ค์ œ๋กœ๋Š” GC์— ์˜ํ•ด ์†Œ๋ฉธ๋œ ์ผ๋ถ€ ๊ฐ์ฒด๊ฐ€ ๋ˆ„๋ฝ๋  ์ˆ˜ ์žˆ์Œ
    → ๋”ฐ๋ผ์„œ ์‹ค์ œ ๋ˆ„์ˆ˜ ๊ทœ๋ชจ๋ณด๋‹ค ์ž‘๊ฒŒ ์ง‘๊ณ„๋  ๊ฐ€๋Šฅ์„ฑ ์กด์žฌ
    → ์ถ”ํ›„ heapdump ์ง„ํ–‰์‹œ์—๋Š” live ์˜ต์…˜ ์ œ์™ธ

โœ… ์กฐ์น˜ ๋‚ด์šฉ

  • ๊ฐœ๋ฐœํŒ€์— Problem 1,2 ๊ด€๋ จ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๊ณต์œ  ๋ฐ ์ˆ˜์ • ์š”์ฒญ
    • MySQL Connector ์žฌ์‚ฌ์šฉ ๋ฐฉ์‹ ์ ๊ฒ€
    • SSL Handshake ๊ฐ์ฒด ์žฌ์‚ฌ์šฉ ๋˜๋Š” ํ•ด์ œ ๋กœ์ง ์ ์šฉ
  • ๋ชจ๋‹ˆํ„ฐ๋ง ํ•ญ๋ชฉ ์ถ”๊ฐ€
    • PS Old Gen ์‚ฌ์šฉ๋ฅ  ๋ณ„๋„ ๋Œ€์‹œ๋ณด๋“œํ™”
    • Heap ์‚ฌ์šฉ๋Ÿ‰ ๋ฐ GC ๋ฐœ์ƒ ๊ฐ„๊ฒฉ ์ถ”์ด ์ฃผ๊ธฐ์  ๋ถ„์„
  • ํ–ฅํ›„ ๋Œ€์‘ ๊ณ„ํš
    • ์ฃผ๊ธฐ์  HeapDump ์Šค์ผ€์ค„๋ง์„ ํ†ตํ•œ ๋ˆ„์ˆ˜ ํŒจํ„ด ์กฐ๊ธฐ ํƒ์ง€
    • GC ๋กœ๊ทธ ๊ธฐ๋ฐ˜ ๋ฉ”๋ชจ๋ฆฌ ์ฆ๊ฐ ํŒจํ„ด ์ˆ˜์ง‘ ๋ฐ ์ž๋™ ์•Œ๋ฆผ ์„ค์ •

 

'System > Tomcat' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Tomcat] OutOfMemoryError: unable to create new native thread  (0) 2025.04.01
[Tomcat]tomcat ๊ธฐ๋ณธ ์—๋Ÿฌ ํŽ˜์ด์ง€ ๋ฐ˜ํ™˜  (0) 2024.04.24

+ Recent posts