OutOfMemoryError

OutOfMemoryError๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ์„ ๋–„ ์ผ์–ด๋‚œ๋‹ค. ์ž๋ฐ”๋Š” ๊ฐ์ฒด๋ฅผ ํž™๊ณต๊ฐ„์— ์ƒ์„ฑํ•˜๊ณ , ์ด ์ƒ์„ฑ์œ„์น˜์— ๋Œ€ํ•œ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ํ•œ๋‹ค. ์ด ์˜ค๋ฅ˜๋Š” ํž™ ๊ณต๊ฐ„์— ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•œ ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•˜๋Š”๋ฐ OutOfMemoryError์˜ ์ข…๋ฅ˜ ๋ฐ ์›์ธ์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณผ ๊ฒƒ์ด๋‹ค.

java.lang.OutOfMemoryError: Java heap space

์›์ธ

์ž๋ฐ” ํž˜ ๊ณต๊ฐ„์— ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•œ๋‹ค. ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐ˜๋“œ์‹œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์ง€์ •ํ•œ ํž™ ํฌ๊ธฐ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋„ ๋ฐœ์ƒํ•œ๋‹ค. ํ˜น์€ finalize๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐœ์ƒํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ํด๋ž˜์Šค์— finalize ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๊ฐ์ฒด์— ๋Œ€ํ•œ GC ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜์ง€ ๋ชปํ•œ๋‹ค. finalizer ํ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์†๋„๋ณด๋‹ค ๋น ๋ฅธ ์†๋„๋กœ ์Œ“์ด๋ฉด์„œ ํž˜ ๊ณต๊ฐ„์ด ๊ฐ€๋“์ฐจ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•ด๊ฒฐ

finalization ๋ณด๋ฅ˜ ์ƒํƒœ์˜ ๊ฐ์ฒด๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ คํ•ด์•ผํ•œ๋‹ค.

java.lang.OutOfMemoryError: GC Overhead limit exceeded

์›์ธ

์ด ์˜ˆ์™ธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํ• ๋‹นํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๊ณต๊ฐ„์ด ํž™์— ์—†๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•œ๋‹ค.

ํ•ด๊ฒฐ

  • ํž™ ๊ณต๊ฐ„์„ ๋Š˜๋ฆฐ๋‹ค.

  • -XX:-UseGCOverheadLimit ์„ ํƒ์‚ฌํ•ญ์„ ์ถ”๊ฐ€ํ•˜์—ฌ java.lang.OutOfMemoryError ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ดˆ๊ณผ ์˜ค๋ฒ„ํ—ค๋“œ GC ์ œํ•œ ๋ช…๋ น์„ ํ•ด์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

java.lang.OutOfMemoryError: Requested array size exceeds VM limit

์›์ธ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํž™ ๊ณต๊ฐ„๋ณด๋‹ค ํฐ ๋ฐฐ์—ด์„ ํ• ๋‹น ์‹œ๋„ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•œ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด 512MBํฌ๊ธฐ์˜ ๋ฐฐ์—ด์„ ํ• ๋‹นํ•˜๋ คํ•˜์ง€๋งŒ, ํž™์˜ ์ตœ๋Œ€ํฌ๊ธฐ๊ฐ€ 256MB์ธ ๊ฒฝ์šฐ ์š”์ฒญ ๋ฐฐ์—ดํฌ๊ธฐ๊ฐ€ VM์ œํ•œ์„ ์ดˆ๊ณผํ•˜๋ฉด์„œ ํ•ด๋‹น ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

  • ํž™ ์‚ฌ์ด์ฆˆ๊ฐ€ ๋„ˆ๋ฌด ์ž‘์€ ๊ฒฝ์šฐ

  • ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๋Š” ๊ฒฝ์šฐ

java.lang.OutOfMemoryError: Metaspace

์›์ธ

์ž๋ฐ” ํด๋ž˜์Šค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ์›์‹œ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ๋‹ค. ํด๋ž˜์Šค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ํ• ๋‹น๋  ๋ฉ”ํƒ€๊ณต๊ฐ„์ด ๋ชจ๋‘ ์†Œ๋ฉธ๋˜๋ฉด ํ•ด๋‹น ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

ํ•ด๊ฒฐ

MaxMetaSpaceSize ๊ฐ’์„ ๋Š˜๋ ค ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. MaxMetaSpaceSize๋Š” ์ž๋ฐ” ํž™๊ณผ ๋™์ผํ•œ ์ฃผ์†Œ ๊ณต๊ฐ„์— ํ• ๋‹น๋˜๋ฉฐ, ์ž๋ฐ” ํž™์˜ ํฌ๊ธฐ๋ฅผ ์ค„์ด๋ฉด ๋” ๋งŽ์€ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ์ž๋ฐ” ํž™ ๊ณต๊ฐ„์— ์—ฌ์œ ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์— ๊ณ ๋ คํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

  1. ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋‹น ์‚ฌ์šฉ๊ฐ€๋Šฅ ๋ฉ”๋ชจ๋ฆฌ๋Š” 4G

  2. ์ด ์ตœ๋Œ€ ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์—์„œ heap์˜์—ญ, perm์˜์—ญ, native heap์˜์—ญ, stack์˜์—ญ์„ ์„ค์ •

  3. user๊ฐ€ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์€ heap์˜์—ญ๊ณผ perm์˜์—ญ

  4. ๊ทธ ์ด์™ธ ์˜์—ญ์€ 3๋ฒˆ์—์„œ ์„ค์ •ํ•œ ํฌ๊ธฐ๋ฅผ ์ œ์™ธํ•œ ๊ณต๊ฐ„์— ์ ์ ˆํ•˜๊ฒŒ ์„ค์ •๋œ

์ฆ‰, heap์˜์—ญ๊ณผ perm์˜์—ญ์„ ๊ณผํ•˜๊ฒŒ ์„ค์ •ํ•˜๋ฉด, native์˜์—ญ๊ณผ stack์˜์—ญ์ด ์ ์€ ๊ณต๊ฐ„์œผ๋กœ ์„ค์ •๋˜์–ด ์ด ๋‘ ์˜์—ญ์˜ ๊ณต๊ฐ„๋ถ€์กฑ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

java.lang.OutOfMemoryError: request size bytes for reason. Out of swap space?

์›์ธ

์ž๋ฐ” HotSpot VM ์ฝ”๋“œ๊ฐ€ Native Heap์ด ๊ณ ๊ฐˆ๋˜์— ํ• ๋‹นํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•œ๋‹ค. ์ด ์˜ค๋ฅ˜์˜ ๊ฒฝ์šฐ ์‹คํŒจํ•œ ์š”์ฒญ์˜ ํฌ๊ธฐ(byte)์™€ ๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ์˜ ์ด์œ ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์ฃผ๋กœ ์†Œ์Šค ๋ชจ๋“ˆ์˜ ์ด๋ฆ„์„ ์ถœ๋ ฅํ•œ๋‹ค.

ํ•ด๊ฒฐ

Native Heap ๊ณ ๊ฐˆ์˜ ๊ฒฝ์šฐ๋Š” ํž™ ๋ฉ”๋ชจ๋ฆฌ ๋กœ๊ทธ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ๋งต ์ •๋ณด๋ฅผ ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์ด ์œ ์šฉํ•˜๋ฉฐ, ์šด์˜์ฒด์ œ์˜ ๋ฌธ์ œ ํ•ด๊ฒฐ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฌธ์ œ๋ฅผ ์ง„๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.

java.lang.OutOfMemoryError: Compressed class space

์›์ธ

64bit ํ”Œ๋žซํผ์—์„œ ํด๋ž˜์Šค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํฌ์ธํ„ฐ๋Š” 32bit ์˜คํ”„์…‹์œผ๋กœ ํ‘œํ˜„๋˜๋Š”๋ฐ, ์ด ๋ฐฉ์‹์€ UseCompressedClassPointers๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค. UseCompressedClassPointers๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด ํด๋ž˜์Šค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์˜ ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •๋˜๊ณ , CompressedClassSpaceSize ๊ณต๊ฐ„์„ ์ดˆ๊ณผํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

ํ•ด๊ฒฐ

CompressedClassSpaceSize์˜ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฌ๊ฑฐ๋‚˜ UseCompressedClassPointers๋ฅผ ๋น„ํ™œ์„ฑํ™” ์‹œ์ผœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ค๋ฅ˜ ๋ฐœ์ƒ์‹œ์ผœ๋ณด๊ธฐ

-XX:CompressedClassSpaceSize=4g ์„ค์ •ํ•œ ํ›„ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

CompressedClassSpaceSize of 4294967296 is invalid; must be between 1048576 and 3221225472.

java.lang.OutOfMemoryError: reason stack_trace_with_native_method

์›์ธ

๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ์— ํ• ๋‹น ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ์ด๋‹ค. ์ด ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€๋Š” JVM์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ JNI(Java Native Interface) ๋˜๋Š” ์›์‹œ๋ฉ”์„œ๋“œ์—์„œ ํ• ๋‹น ์‹คํŒจ๊ฐ€ ๊ฐ์ง€๋œ ๊ฒƒ์ด๋‹ค.

ํ•ด๊ฒฐ

์ฐธ๊ณ 

Last updated