๊ฐ๋ฐ์ํ/์ด๊ฒ์ ๊ฒ
OOM์ ์์ธ๊ณผ ์์ฃผ ๊ฐ๋จํ๊ฒ OOM ๋ฐ์ ์ํค๊ธฐ
by cocococo331
2022. 4. 16.
outofmemory๊ฐ ๋๋ ์ด์
- ์ค์ ๋ ๋ฉ๋ชจ๋ฆฌ ๋๋น ์์ฒญ๋๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ๋ํ๋๋ JVM์์ ๋ฐ์ํ๋ ์๋ฌ
- ์ค์ ์ ์ค๋ฅ๋ ์ฌ์ฉ๋ ์ด๊ณผ๋ก ์ธํด
- jdk 5 ๊ฐ์ ๊ฒฝ์ฐ๋ jdk hotspot ๋ฒ๊ทธ๋ก ์ธํด oom์ด ๋ฌ๋ ๊ฒฝ์ฐ๋ ์์์
oom ์์
- Application์ oom(์๊ฐ์ )
- ๊ณผ๋ํ ๋ฐ์ดํฐ ์กฐํ(100๋ง๊ฑด 200๋ง๊ฑด์ฉ ์กฐํํด์ ๋ฉ๋ชจ๋ฆฌ ๋ค๊ณ ์๋ ๊ฒฝ์ฐ, ์
๋ก๋ ํ์ผ์ ํ์ฒ๋ฆฌ ํ๊ธฐ๋ก ํด์ ๋ฉ๋ชจ๋ฆฌ์ ๋ค๊ณ ์๋ ๊ฒฝ์ฐ)
- ์๋ชป๋ ๋ฐ์ดํฐ ์กฐ์(string)
- ์ฅ์๊ฐ์ ๊ฑธ์ณ์ ์์ํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฅ์๋๋ ๊ฒฝ์ฐ(memory leak)
- Cache(์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ์ฐ๋ ๋๊ฐ ๊ณต์ ํด์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ) leak
- Pool(๋ฐฐํ์ ์ผ๋ก ์ฌ์ฉํ ๋) leak (oom ๊ฐ๊ธฐ ์ด์ ์ ํ ๋ถ์กฑ์ผ๋ก 2์ฐจ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๋ ๋ง์)
oom์ด ๋๊ฒํ๋ ค๋ฉด??
- ๋ฐ์ดํฐ๋ฅผ ๊ณผ๋ํ๊ฒ ์กฐํํด์ ๋ค๊ณ ์๊ธฐ
- ๊ฐ๋จํ๊ฒ arrayList์ 1kb์ง๋ฆฌ 25๋ง๊ฐ add ํ๊ฑฐ๋ (์ค์ ์ฝ๋๋ก ์งฐ์ ๋ ๋๋ 1kb๋ก ์๋์ 1000kb๋ก 25๋ง๊ฐ ๋๋ ธ๋๋ 4085๋ฒ์์ ์ฆ์ oom ๋๊ธดํจ)
public static void main(String args[]) {
ArrayList list = new ArrayList();
try {
for(int i=0; i < 250000; i++) {
list.add(new byte[1000000]);
System.out.println(i);
Thread.sleep(1);
}
} catch (Exception e) {
e.printStackTrace();
}
}
์์ธ ๋ถ์ ๋ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ
- ๋จ๊ธฐ์ ํด๊ฒฐ ๊ฐ๋จํ๊ฒ๋ ์ฌ๊ธฐ๋..
- heap dump ๋ถ์ -> Eclipse์ Memory Analyzer ์ฌ์ฉ
- ๋ถํ ํ
์คํธ ๋ฐ ๋ชจ๋ํฐ๋ง
์ฐธ๊ณ