๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป Programming/Android Developer AtoZ

[Android] Operating System (2) - GC์™€ OOM Killer

by ๊ธฐ๋ฌด์ • 2025. 2. 22.
728x90

 

 

 

Garbage Collection (GC)

์ฃผ๋กœ Java/Kotlin๊ณผ ๊ฐ™์€ Managed Language์—์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ๋Š” ์•ฑ ๊ฐœ๋ฐœ์— Java์™€ Kotlin์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, GC๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์˜ ํ•ต์‹ฌ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

GC๋Š” ์•ฑ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ํƒ์ง€ํ•˜์—ฌ ์ž๋™์œผ๋กœ ํšŒ์ˆ˜ํ•˜๋Š” ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์ง์ ‘ ํ•˜์ง€ ์•Š์•„๋„ ์•ˆ์ •์ ์œผ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฉ”๋ชจ๋ฆฌ ํšŒ์ˆ˜ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ๊ฐ์ฒด๋Š” ์•ฑ์ด ๋™์ž‘ํ•˜๋Š” ์ค‘์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด๊ฐ€ ๋” ์ด์ƒ ์ฐธ์กฐ๋˜์ง€ ์•Š์œผ๋ฉด Garbage๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค.
  2. ์ฐธ์กฐ ๊ทธ๋ž˜ํ”„(Referebce Graph)๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์–ด๋–ค ๊ฐ์ฒด๊ฐ€ ์ฐธ์กฐ๋˜๊ณ  ์žˆ๋Š”์ง€ ํŒŒ์•…ํ•ฉ๋‹ˆ๋‹ค.
  3. ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด(Unreachable Object), Garbage๋ฅผ ์ฐพ์•„ ์ œ๊ฑฐํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšŒ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ฉ”๋ชจ๋ฆฌ ์กฐ๊ฐํ™”(Fragmentation)๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ํž™ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์••์ถ•(Heap Compaction)ํ•ฉ๋‹ˆ๋‹ค.
๐Ÿ’ก๋ฉ”๋ชจ๋ฆฌ ์กฐ๊ฐํ™”(Fragmentation)
GC๊ฐ€ Garbage(๋” ์ด์ƒ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด)๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด, ํž™ ๋ฉ”๋ชจ๋ฆฌ์—๋Š” ๋น„์–ด ์žˆ๋Š” ๊ณต๊ฐ„์ด ์ƒ๊น๋‹ˆ๋‹ค. ์ด๋•Œ ๋นˆ ๊ณต๊ฐ„๋“ค์€ ์—ฐ์†์ ์ด์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘์€ ๋นˆ ๊ณต๊ฐ„๋“ค์ด ์—ฌ๊ธฐ์ €๊ธฐ ํฉ์–ด์ ธ ์žˆ์œผ๋ฉด ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•  ๋•Œ ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.
์ด๊ฒƒ์ด ๋ฐ”๋กœ ๋ฉ”๋ชจ๋ฆฌ ์กฐ๊ฐํ™”์ž…๋‹ˆ๋‹ค.
๐Ÿ’กํž™ ์••์ถ•(Compaction, Defragmentation)
์—ฐ์†๋œ ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•  ๊ฒฝ์šฐ ์ž‘์€ ๊ฐ์ฒด๋Š” ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํฐ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํž™ ์••์ถ•์€ ๋‚จ์•„์žˆ๋Š” ๊ฐ์ฒด๋“ค์„ ํ•œ์ชฝ์œผ๋กœ ๋ฐ€์–ด๋ถ™์—ฌ์„œ ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์„ ํ™•๋ณดํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. GC ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋”ฐ๋ผ ์ˆ˜ํ–‰ ์—ฌ๋ถ€๊ฐ€ ๋‹ค๋ฅธ๋ฐ, ๊ธฐ๋ณธ์ ์œผ๋กœ Mark-and-Sweep ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํž™ ์••์ถ•์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

 

์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” GC์˜ ์ข…๋ฅ˜๋กœ Partial GC, Full GC, Concurrent GC๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Partial GC

  • ์•ฑ์˜ ํŠน์ • ์˜์—ญ๋งŒ ์Šค์บ”ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšŒ์ˆ˜ํ•œ๋‹ค.
  • ์•ฑ ์„ฑ๋Šฅ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•œ๋‹ค.

Full GC

  • ์ „์ฒด ํž™์„ ์Šค์บ”ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšŒ์ˆ˜ํ•œ๋‹ค.
  • ์„ฑ๋Šฅ์— ๋” ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋‹ค.

Concurrent GC

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šค๋ ˆ๋“œ์™€ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰๋˜์–ด, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ค‘๋‹จ ์‹œ๊ฐ„์„ ์ค„์ธ๋‹ค.

 

 

GC์˜ ์žฅ๋‹จ์ ์„ ์ •๋ฆฌํ•˜์ž๋ฉด,

 

์žฅ์ 

  • ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ์— ๊ด€์—ฌํ•˜์ง€ ์•Š์•„๋„ ๋จ
  • ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(Memory Leak) ๊ฐ€๋Šฅ์„ฑ์ด ๊ฐ์†Œ
  • ์ฐธ์กฐ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋ฅผ ์ž๋™์œผ๋กœ ํšŒ์ˆ˜ํ•˜์—ฌ ์•ฑ์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ํ•จ
  • ๋ณต์žกํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์ถ”์ƒํ™”ํ•˜์—ฌ ๊ฐœ๋ฐœ ์†๋„ ๋†’์ž„

๋‹จ์ 

  • GC๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ์•ฑ์˜ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž ์‹œ ๋ฉˆ์ถœ ์ˆ˜ ์žˆ์Œ (Pause Time)
  • ํŠนํžˆ Full GC๋Š” UI ๋ ‰๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ์Œ
  • GC๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ œ์–ดํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์‹คํ–‰ ํƒ€์ด๋ฐ์„ ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ค์šฐ๋ฉฐ, ์ด๋กœ ์ธํ•ด ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Œ
  • GC ์ž์ฒด๋„ ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, ๋นˆ๋ฒˆํ•œ GC ์‹คํ–‰์€ ๋ฐฐํ„ฐ๋ฆฌ ์†Œ๋ชจ์™€ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ดˆ๋ž˜ํ•จ

 

728x90

 



Out-Of-Memory(OOM) Killer

์•ˆ๋“œ๋กœ์ด๋“œ์˜ OOM Killer๋Š” Linux ์ปค๋„์˜ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋กœ, ์‹œ์Šคํ…œ ์ „์ฒด์˜ ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

OOM Killer๋Š” ์‹œ์Šคํ…œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ด์งˆ ๋•Œ ์ž๋™์œผ๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™•๋ณดํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

๋ฉ”๋ชจ๋ฆฌ ํšŒ์ˆ˜ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์ฃผ๋กœ ๋งŽ์€ ์•ฑ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰๋˜๊ฑฐ๋‚˜, ํ•˜๋‚˜์˜ ์•ฑ์ด ๊ณผ๋„ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  2. ์‹œ์Šคํ…œ์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•  ๋•Œ OOM Killer๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ฐฉ์‹์— ๋”ฐ๋ผ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
    • ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
    • Linux ์ปค๋„์ด ๊ฐ ํ”„๋กœ์„ธ์Šค์— OOM ์ ์ˆ˜๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ์ ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

 

์ฐธ๊ณ ๋กœ, ํ”„๋กœ์„ธ์Šค ์šฐ์„ ์ˆœ์œ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Foreground Process : ํ˜„์žฌ ํ™”๋ฉด์— ํ‘œ์‹œ๋œ ์•ฑ์œผ๋กœ, ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์•„ ์ข…๋ฃŒ ๋Œ€์ƒ์ด ์•„๋‹ˆ๋‹ค.
  • Background Process : ์‚ฌ์šฉ์ž๊ฐ€ ๋‹น์žฅ ํ•„์š”ํ•˜์ง€ ์•Š์€ ์•ฑ์œผ๋กœ, ์ข…๋ฃŒ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๋‹ค.
  • Empty Process :  ๋‹จ์ˆœํžˆ ์‹คํ–‰ ๋Œ€๊ธฐ ์ƒํƒœ์ธ ํ”„๋กœ์„ธ์Šค๋กœ, ๊ฐ€์žฅ ๋จผ์ € ์ข…๋ฃŒ๋œ๋‹ค.

๊ด€๋ จ ๋‚ด์šฉ์€ ์ด์ „ ๊ธ€์„ ์ฐธ๊ณ  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

2025.02.21 - [๊ฐœ๋ฐœ.log/์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์ž AtoZ] - [Android] Operating System (1) - File Permission, Multi-User Linux

 

 

OOM Killer์˜ ์žฅ๋‹จ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

์žฅ์ 

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

๋‹จ์ 

  • ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฐ‘์ž‘์Šค๋Ÿฌ์šด ์•ฑ ๊ฐ•์ œ ์ข…๋ฃŒ๋ฅผ ๊ฒฝํ—˜ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Œ
  • ์•ฑ์ด ๋น„์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜๋ฉด ์ €์žฅ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋  ๊ฐ€๋Šฅ์„ฑ
  • ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์•ฑ์ด ์ข…๋ฃŒ๋˜์–ด ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋Š” ๋ถˆํŽธํ•จ์œผ๋กœ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ์•ฝํ™”๋  ์ˆ˜ ์žˆ์Œ

 




์ตœ์ข…์ ์œผ๋กœ GC์™€ OOM Killer๋ฅผ ๋น„๊ตํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  Garbage Collation (GC) Out-Of-Memoty (OOM) Killer
์—ญํ•  ์•ฑ์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ , ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšŒ์ˆ˜  ์‹œ์Šคํ…œ ์ „์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ์ƒํ™ฉ์—์„œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ํ™•๋ณด 
๋™์ž‘ ๋ฒ”์œ„ ์•ฑ ๋‚ด๋ถ€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ (Java/Kotlin ๋ฉ”๋ชจ๋ฆฌ) ์‹œ์Šคํ…œ ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ (์•ฑ ํ”„๋กœ์„ธ์Šค ๋ ˆ๋ฒจ)
๋™์ž‘ ๋ฐฉ์‹ ๊ฐ์ฒด์˜ ์ฐธ์กฐ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ํšŒ์ˆ˜ ํ”„๋กœ์„ธ์Šค ์šฐ์„ ์ˆœ์œ„์™€ OOM ์ ์ˆ˜์— ๋”ฐ๋ผ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ
์˜ํ–ฅ ์•ฑ ์„ฑ๋Šฅ์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์นจ ์‹œ์Šคํ…œ ์•ˆ์ •์„ฑ์„ ์œ ์ง€ํ•˜์ง€๋งŒ, ์ข…๋ฃŒ๋œ ์•ฑ์˜ ๋ฐ์ดํ„ฐ ์†์‹ค ๊ฐ€๋Šฅ์„ฑ
์ฃผ์š” ๋‹จ์  GC Pause Time์œผ๋กœ ์ธํ•œ UI ์ง€์—ฐ ๊ฐ€๋Šฅ์„ฑ ์ค‘์š”ํ•œ ์•ฑ์ด ์ข…๋ฃŒ๋˜๋ฉด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ์ €ํ•˜๋  ๊ฐ€๋Šฅ์„ฑ

 


 

์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์ž ๋กœ๋“œ๋งต์„ ๋”ฐ๋ผ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

 

 

 

728x90