Skip to content

Latest commit

ย 

History

31 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Codyssey B1-2 โ€” ์‹œ์Šคํ…œ ์žฅ์•  ๋ถ„์„ & ๊ธฐ์ˆ  ๋ฆฌํฌํŠธ ์ž‘์„ฑ

์‹ค์„œ๋ฒ„์—์„œ ๋ฐœ์ƒํ•˜๋Š” 3๋Œ€ ์žฅ์• (OOM / CPU Spike / Deadlock)๋ฅผ ๊ด€์ œ ๋กœ๊ทธยท์‹คํ–‰ ๋กœ๊ทธยท์‹œ์Šคํ…œ ๋„๊ตฌ์˜ ๊ฐ๊ด€์  ์ฆ๊ฑฐ๋ฅผ ๊ทผ๊ฑฐ๋กœ ์ถ”๋ก ํ•˜๊ณ , GitHub Issue ํ˜•ํƒœ์˜ ๊ธฐ์ˆ  ๋ฆฌํฌํŠธ๋กœ ์ •๋ฆฌํ•œ๋‹ค.

์‹คํ–‰ ํ™˜๊ฒฝ: macOS + OrbStack Ubuntu 24.04 ๋จธ์‹  (B1-1๊ณผ ๋™์ผ ์ธํ”„๋ผ ์žฌ์‚ฌ์šฉ)

๋ณธ ์ €์žฅ์†Œ๋Š” B1-1 ์—์„œ ๊ตฌ์ถ•ํ•œ SSH/๋ฐฉํ™”๋ฒฝ/๊ณ„์ •/๋””๋ ‰ํ† ๋ฆฌ/cron ์ธํ”„๋ผ ์œ„์— B1-2 ์ „์šฉ์œผ๋กœ agent-leak-app ์„ ์–น์–ด ์žฅ์• ๋ฅผ ์žฌํ˜„ํ•˜๋Š” ๊ตฌ์กฐ๋‹ค.


0. ๊ณผ์ œ ๋ช…์„ธ (์›๋ณธ ๋ฏธ์…˜ ์š”๊ตฌ์‚ฌํ•ญ)

์ถœ์ฒ˜: codyssey_assignments/B1-2.pdf โ€” ์›๋ฌธ ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ทธ๋Œ€๋กœ ์˜ฎ๊ธฐ๊ณ , ํ•ด์„ค์€ ๐Ÿ’ก ๋กœ ๊ตฌ๋ถ„ํ–ˆ๋‹ค.

0.1 ๋ฏธ์…˜ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ

ํ•ญ๋ชฉ ๋‚ด์šฉ
๋ถ„์•ผ AI/SW ๊ธฐ์ดˆ
๊ตฌ๋ถ„ Linux์™€ OS
ํ•™์Šต์‹œ๊ฐ„ 40์‹œ๊ฐ„
๋ฏธ์…˜ ์ œ๋ชฉ ์ปดํ“จํ„ฐ๊ฐ€ ๊ฐ‘์ž๊ธฐ ๋А๋ ค์ง€๊ฑฐ๋‚˜ ๋ฉˆ์ท„์„ ๋•Œ ์›์ธ ์ฐพ์•„ ๊ณ ์น˜๊ธฐ
๋ฌธ์ œ ์œ ํ˜• ๋ฌธ์ œ๊ธฐ์ˆ  / ๊ธฐ์ˆ ์  ์„ค๋ช…
์ œ๊ณต ๋ฐ์ดํ„ฐํŒŒ์ผ agent-app-leak.zip, ๋‹จ์œ„๋ฌธ์ œ PDF ํŒŒ์ผ
๋ฐ์ดํ„ฐํŒŒ์ผ ์„ค๋ช… agent-app-leak-x86 (Intel chip) / agent-app-leak-arm64 (Apple chip)

1. ๋ฏธ์…˜ ์†Œ๊ฐœ (์›๋ฌธ)

Memory Leak, CPU Spike, Deadlock. ์ด ์„ธ ๊ฐ€์ง€ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์‹ค์„œ๋ฒ„์—์„œ ํ„ฐ์ง€๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ๋กœ๊ทธ ์—†์ด ์žฌ๋ถ€ํŒ…๋ถ€ํ„ฐ ํ•˜๋ฉด ์›์ธ์ด ๋ฌปํžˆ๊ณ , ๊ฐ™์€ ์žฅ์• ๊ฐ€ ๋‘ ๋ฒˆ, ์„ธ ๋ฒˆ ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค. ๊ด€์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทผ๊ฑฐ๋กœ ์›์ธ์„ ์ถ”๋ก ํ•˜๊ณ , GitHub Issue ํ˜•ํƒœ์˜ ๊ธฐ์ˆ  ๋ฆฌํฌํŠธ๋กœ ๋‚จ๊ธฐ๋Š” ๊ฒƒ๊นŒ์ง€ ์ง์ ‘ ํ•ด๋ด…๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ์šด์˜์ฒด์ œ ์œ„์—์„œ ํ”„๋กœ์„ธ์Šค ํ˜•ํƒœ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฏธ์…˜์—์„œ๋Š” ๋นŒ๋“œ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ์šด์˜ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•˜๋ฉฐ ๋ฐœ์ƒํ•˜๋Š” ์‹œ์Šคํ…œ ์žฅ์• (Memory Leak/OOM, CPU Spike, Deadlock) ๋ถ„์„์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

๋‹จ์ˆœํžˆ "ํ”„๋กœ๊ทธ๋žจ์ด ๊บผ์กŒ๋‹ค!"๋Š” ๊ฒฐ๊ณผ๋งŒ ๋ณด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๊ด€์ œ ๋ฐ์ดํ„ฐ์™€ ๋กœ๊ทธ๋ฅผ ํ†ตํ•ด ์žฅ์• ์˜ ์›์ธ์„ ์ถ”๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ˜„์—… ๊ฐœ๋ฐœ์ž์ฒ˜๋Ÿผ GitHub Issue ํ˜•ํƒœ์˜ ๊ธฐ์ˆ  ๋ฆฌํฌํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋ฉฐ ์‹ค์ „์ ์ธ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… ๋ฐ ํ˜‘์—… ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ์—ญ๋Ÿ‰์„ ๊ธฐ๋ฅด๋Š” ๊ฒƒ์ด ์ตœ์ข… ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค.

๐Ÿ’ก ์ด ๊ณผ์ œ๊ฐ€ ์ง„์งœ๋กœ ๋ฌป๋Š” ๊ฒƒ (ํ•ด์„ค)

๐Ÿ’ก

  1. ์ด ๊ณผ์ œ์˜ ์‚ฐ์ถœ๋ฌผ์€ "์ฝ”๋“œ"๊ฐ€ ์•„๋‹ˆ๋ผ "๋ฆฌํฌํŠธ 3๊ฑด"์ด๋‹ค. ํ”„๋กœ๊ทธ๋žจ์€ ์ด๋ฏธ ๋นŒ๋“œ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์ฃผ์–ด์ง€๊ณ , ํ•™์Šต์ž๊ฐ€ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ monitor.sh ๊ด€์ œ ์Šคํฌ๋ฆฝํŠธ(B1-1 ๊ณผ์ œ์˜ ์—ฐ์žฅ)์™€ ์ฆ๊ฑฐ๋กœ ๋ฌด์žฅํ•œ ์žฅ์•  ๋ถ„์„ ๋ฌธ์„œ๋‹ค.
  2. "์žฅ์• ๋ฅผ ๊ณ ์น˜๋Š” ๊ฒƒ"์ด ์•„๋‹ˆ๋ผ "์žฅ์• ๋ฅผ ์ฆ๋ช…ํ•˜๋Š” ๊ฒƒ"์ด ํ‰๊ฐ€ ๋Œ€์ƒ์ด๋‹ค. ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์กฐ์ •์€ ์–ด๋””๊นŒ์ง€๋‚˜ ์ž„์‹œ ์กฐ์น˜(Workaround)์ด๋ฉฐ, ์ฑ„์ ์ž๋Š” ์™œ ๊ทธ๋ ‡๊ฒŒ ํŒ๋‹จํ–ˆ๋Š”๊ฐ€์˜ ์ฆ๊ฑฐ ์‚ฌ์Šฌ(๊ด€์ œ ์ˆ˜์น˜ โ†’ ๋กœ๊ทธ ๋ฌธ์ž์—ด โ†’ OS ๋™์ž‘ ์›๋ฆฌ)์„ ๋ณธ๋‹ค.
  3. ์„ธ ์žฅ์• ๋Š” ๊ฐ๊ฐ ๋‹ค๋ฅธ ์ง„๋‹จ ๋„๊ตฌ๋ฅผ ๊ฐ•์š”ํ•œ๋‹ค. OOM์€ ์‹œ๊ณ„์—ด ๋ฉ”๋ชจ๋ฆฌ ์ฆ๊ฐ€(ps/monitor.sh), CPU Spike๋Š” ํ”„๋กœ์„ธ์Šค ๋‹จ์œ„ ์ ์œ ์œจ(top/ps), Deadlock์€ ์Šค๋ ˆ๋“œ ๋‹จ์œ„ ๊ด€์ฐฐ(top -H, ps -L)์ด๋‹ค. ๊ฐ™์€ ๋„๊ตฌ๋กœ ์„ธ ๊ฐœ๋ฅผ ๋‹ค ์„ค๋ช…ํ•˜๋ฉด ๊ฐ์  ํฌ์ธํŠธ๊ฐ€ ๋œ๋‹ค.
  4. Deadlock์€ "์ฃฝ์ง€ ์•Š๋Š” ์žฅ์• "๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ข…๋ฃŒ ๋กœ๊ทธ๊ฐ€ ์—†๋‹ค. "์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค"๋Š” ๊ฒƒ ์ž์ฒด๋ฅผ ์ฆ๊ฑฐ๋กœ ์ œ์‹œํ•˜๋Š” ํ›ˆ๋ จ์ด๋‹ค.
  5. ์œกํ•˜์›์น™ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์ด ๋ช…์‹œ์  ๋ชฉํ‘œ๋‹ค. GitHub Issue ํ…œํ”Œ๋ฆฟ์„ ์ง€ํ‚ค๋Š” ๊ฒƒ์€ ํ˜•์‹์ด ์•„๋‹ˆ๋ผ "๋™๋ฃŒ๊ฐ€ ๋‚ด ๋กœ๊ทธ ์—†์ด๋„ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€"๋ฅผ ๋ฌป๋Š” ์—ญ๋Ÿ‰ ํ‰๊ฐ€๋‹ค.

0.2 ์ตœ์ข… ์‚ฐ์ถœ๋ฌผ (์ œ์ถœ๋ฌผ)

(์›๋ฌธ) ๋‹ค์Œ ๊ณผ์ •์˜ ์‚ฐ์ถœ๋ฌผ์„ PDF ๋˜๋Š” GitHub Repository ๋งํฌ ํ˜•ํƒœ๋กœ ์ œ์ถœํ•ด์•ผ ํ•œ๋‹ค.

D1. ์‹œ์Šคํ…œ ์žฅ์•  ๋ถ„์„ ๋ฐ ์ด์Šˆ ๋ฆฌํฌํŠธ (3๊ฑด)

  • D1 3๊ฐ€์ง€ ์žฅ์•  ์œ ํ˜•(OOM Crash, CPU Latency, Deadlock) ๊ฐ๊ฐ์— ๋Œ€ํ•ด ์ž‘์„ฑ๋œ GitHub Issue ํ˜•ํƒœ์˜ ๊ธฐ์ˆ  ๋ณด๊ณ ์„œ
  • ๊ฐ ๋ฆฌํฌํŠธ๋Š” ์•„๋ž˜์˜ ํ•„์ˆ˜ ํฌํ•จ ํ•ญ๋ชฉ์„ ๋ชจ๋‘ ๊ฐ–์ถ”์–ด์•ผ ํ•œ๋‹ค.
    • D1-1 ๋ฐœ์ƒ ํ˜„์ƒ: ์žฅ์• ๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ด€์ธก๋˜์—ˆ๋Š”์ง€ ์„œ์ˆ 
    • D1-2 ์žฌํ˜„ ๊ฒฝ๋กœ ๋ฐ ์ฆ๊ฑฐ: ๋กœ๊ทธ/๋ช…๋ น์–ด ์ถœ๋ ฅ/์Šคํฌ๋ฆฐ์ƒท ๋“ฑ ๊ฐ๊ด€์  ์ฆ๊ฑฐ ์ฒจ๋ถ€
    • D1-3 ๊ทผ๋ณธ ์›์ธ: ์žฅ์• ์˜ ๊ธฐ์ˆ ์  ์›์ธ ๋ถ„์„
    • D1-4 ์กฐ์น˜ ๋‚ด์šฉ: ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์กฐ์ • ๋“ฑ ์ž„์‹œ ์กฐ์น˜์™€ ๊ทธ ๊ฒฐ๊ณผ
    • D1-5 ๊ฒฐ๊ณผ ํ™•์ธ: ์กฐ์น˜ ํ›„ Before & After ๋น„๊ต ๊ฒฐ๊ณผ

D2. ์ด์Šˆ ๋ฆฌํฌํŠธ ๋งˆํฌ๋‹ค์šด ํ…œํ”Œ๋ฆฟ

(์›๋ฌธ) ๊ฐ ๋ฆฌํฌํŠธ๋Š” ์•„๋ž˜ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฅด๋˜, ์„ธ๋ถ€ ๋‚ด์šฉ์€ ์ž์œ ๋กญ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

[Bug] {์žฅ์•  ์œ ํ˜•} - {ํ•œ ์ค„ ์š”์•ฝ}

## 1. Description (ํ˜„์ƒ ์„ค๋ช…)
- ์–ด๋–ค ํ˜„์ƒ์ด ๋ฐœ์ƒํ–ˆ๋Š”๊ฐ€?
- ์–ธ์ œ, ์–ด๋–ค ์กฐ๊ฑด์—์„œ ๋ฐœ์ƒํ–ˆ๋Š”๊ฐ€?

## 2. Evidence & Logs (์ฆ๊ฑฐ ์ž๋ฃŒ)
- monitor.sh ๊ด€์ œ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ (์ˆ˜์น˜/๊ทธ๋ž˜ํ”„/์Šคํฌ๋ฆฐ์ƒท)
- ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๋กœ๊ทธ ์ค‘ ํ•ต์‹ฌ ๊ตฌ๊ฐ„ ๋ฐœ์ทŒ
- ์‹œ์Šคํ…œ ๋„๊ตฌ(ps, top ๋“ฑ) ์ถœ๋ ฅ ๊ฒฐ๊ณผ

## 3. Root Cause Analysis (์›์ธ ๋ถ„์„)
- ์ˆ˜์ง‘๋œ ์ฆ๊ฑฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ•œ ๊ธฐ์ˆ ์  ์›์ธ ๋ถ„์„
- ๊ด€๋ จ OS ๋™์ž‘ ์›๋ฆฌ ์„ค๋ช…

## 4. Workaround & Verification (์กฐ์น˜ ๋ฐ ๊ฒ€์ฆ)
- ์–ด๋–ค ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์–ด๋–ป๊ฒŒ ์กฐ์ •ํ–ˆ๋Š”๊ฐ€?
- Before & After ๋น„๊ต ๊ฒฐ๊ณผ (์ˆ˜์น˜ ๋˜๋Š” ์Šคํฌ๋ฆฐ์ƒท)
- ๊ทผ๋ณธ์  ํ•ด๊ฒฐ์„ ์œ„ํ•œ ์ถ”๊ฐ€ ์ œ์•ˆ (์„ ํƒ)

E. ์ผ€์ด์Šค๋ณ„ ํ•„์ˆ˜ ์ฆ๊ฑฐ ์ตœ์†Œ ์š”๊ฑด (์›๋ฌธ "3. ์ผ€์ด์Šค๋ณ„ ํ•„์ˆ˜ ์ฆ๊ฑฐ ์ตœ์†Œ ์š”๊ฑด")

E1. OOM

  • E1-1 monitor.sh ๊ฒฐ๊ณผ(๋ฉ”๋ชจ๋ฆฌ ์ƒ์Šน ์ˆ˜์น˜)
  • E1-2 ์ข…๋ฃŒ ์ง์ „/์งํ›„ ์‹คํ–‰ ๋กœ๊ทธ("Memory limit exceededโ€ฆ", "SELF-TERMINATEDโ€ฆ" ๋“ฑ)
  • E1-3 MEMORY_LIMIT ๋ณ€๊ฒฝ ์ „ํ›„ ๋น„๊ต(์ตœ์†Œ 2ํšŒ ์‹คํ–‰)

E2. CPU

  • E2-1 CPU ์‚ฌ์šฉ๋ฅ  ๊ธ‰์ƒ์Šน ๊ตฌ๊ฐ„(top / ps / ๊ด€์ œ) ์บก์ฒ˜
  • E2-2 ์ข…๋ฃŒ ๋กœ๊ทธ("WATCHDOGโ€ฆ SIGTERM" ๋“ฑ)
  • E2-3 CPU_MAX_OCCUPY ๋ณ€๊ฒฝ ์ „ํ›„ ๋น„๊ต

E3. Deadlock

  • E3-1 PID ์กด์žฌ ์ฆ๊ฑฐ(ps -ef | grep โ€ฆ)
  • E3-2 CPU/MEM ๋ณ€ํ™” ์ •์ฒด ์ฆ๊ฑฐ(top -H ๋˜๋Š” ps -L)
  • E3-3 ๋งˆ์ง€๋ง‰ ๋กœ๊ทธ ์ง€์ ("WAITINGโ€ฆ BLOCKED")
  • E3-4 ์Šค๋ ˆ๋“œ/๋ฝ ๋Œ€๊ธฐ ์ถ”๋ก  ๊ทผ๊ฑฐ

๐Ÿ’ก (ํ•ด์„ค) E1-3์˜ "์ตœ์†Œ 2ํšŒ ์‹คํ–‰"์€ ์ด ๋ช…์„ธ์—์„œ ์œ ์ผํ•˜๊ฒŒ ์‹คํ–‰ ํšŸ์ˆ˜๋ฅผ ์ˆซ์ž๋กœ ๋ชป ๋ฐ•์€ ์กฐ๊ฑด์ด๋‹ค. Before 1ํšŒ + After 1ํšŒ๋ฅผ ๊ฐ๊ฐ ๋ณ„๋„์˜ ๋กœ๊ทธ ํŒŒ์ผ/ํƒ€์ž„์Šคํƒฌํ”„๋กœ ๋‚จ๊ฒจ์•ผ ์š”๊ฑด์„ ๋งŒ์กฑํ•œ๋‹ค.


0.3 ๊ณผ์ œ ๋ชฉํ‘œ โ€” ์ˆ˜๋ฃŒ ํ›„ ์Šค์Šค๋กœ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ

(์›๋ฌธ) ํ•ด๋‹น ๋ฏธ์…˜์„ ์™„๋ฃŒํ•œ ๋’ค, ํ•™์Šต์ž๋Š” ์•„๋ž˜๋ฅผ ์Šค์Šค๋กœ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

  • G1 ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ์‹œ์Šคํ…œ ์ „์ฒด์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • G2 ํŠน์ • ํ”„๋กœ์„ธ์Šค์˜ CPU ๊ณผ์ ์œ ๊ฐ€ ์‹œ์Šคํ…œ ์ง€์—ฐ์„ ์œ ๋ฐœํ•˜๋Š” ์›๋ฆฌ๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • G3 ์ž์› ๊ฒฝ์Ÿ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ๊ต์ฐฉ์ƒํƒœ(Deadlock)์˜ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๊ณ , ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉˆ์ถ˜ ์ƒํƒœ๋ฅผ ์‹œ์Šคํ…œ ๋„๊ตฌ๋กœ ์‹๋ณ„ํ•˜์—ฌ ์ง„๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.
  • G4 ๋กœ๊ทธ์™€ ๊ด€์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฆ๊ฑฐ๋กœ ์ œ์‹œํ•˜์—ฌ ์œกํ•˜์›์น™์— ๋งž๊ฒŒ ์žฅ์•  ์ƒํ™ฉ์„ ๊ธฐ์ˆ ํ•˜๊ณ , GitHub Issue๋ฅผ ํ†ตํ•ด ๋™๋ฃŒ ๊ฐœ๋ฐœ์ž์™€ ๋ช…ํ™•ํ•˜๊ฒŒ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ๋‹ค.

0.4 ๊ธฐ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ (ํ•„์ˆ˜)

(์›๋ฌธ) ๋‹ค์Œ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ชจ๋‘ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค.

R1. ์‚ฌ์ „ ์ค€๋น„ ์‚ฌํ•ญ (์ œ๊ณต ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜)

(์›๋ฌธ) agent-leak-app์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜ ์กฐ๊ฑด์ด ๋ชจ๋‘ ์ถฉ์กฑ๋˜์–ด์•ผ ํ•œ๋‹ค. ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜์ง€ ์•Š์œผ๋ฉด ๋ถ€ํŠธ ์‹œํ€€์Šค์—์„œ ์ž๋™์œผ๋กœ ์‹คํŒจ ์ฒ˜๋ฆฌ๋œ๋‹ค.

ํ•ญ๋ชฉ ์กฐ๊ฑด
์‹คํ–‰ ๊ณ„์ • root๊ฐ€ ์•„๋‹Œ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž
AGENT_HOME ํ•„์ˆ˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
AGENT_PORT 15034 (๊ณ ์ •)
AGENT_UPLOAD_DIR $AGENT_HOME/upload_files (๋””๋ ‰ํ„ฐ๋ฆฌ ์กด์žฌ ํ•„์ˆ˜)
AGENT_KEY_PATH $AGENT_HOME/api_keys (๊ฒฝ๋กœ ์กด์žฌ ํ•„์ˆ˜)
AGENT_LOG_DIR ๋กœ๊ทธ ๋””๋ ‰ํ„ฐ๋ฆฌ (์กด์žฌ + ์“ฐ๊ธฐ ๊ถŒํ•œ)
MEMORY_LIMIT ์ •์ˆ˜, 50~512 ๋ฒ”์œ„ (๋‹จ์œ„: MB)
CPU_MAX_OCCUPY ์ •์ˆ˜, 10~100 ๋ฒ”์œ„ (๋‹จ์œ„: %)
MULTI_THREAD_ENABLE true / false (1 / 0, yes / no ํ—ˆ์šฉ)
secret.key ํŒŒ์ผ $AGENT_HOME/api_keys/secret.key ์กด์žฌ, ๋‚ด์šฉ: agent_api_key_test
๋„คํŠธ์›Œํฌ 0.0.0.0:15034 ๋ฐ”์ธ๋”ฉ ๊ฐ€๋Šฅ

์ฒดํฌ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ๋‹ค์‹œ ์ •๋ฆฌํ•˜๋ฉด:

  • R1-1 root๊ฐ€ ์•„๋‹Œ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž ๊ณ„์ •์œผ๋กœ ์‹คํ–‰ํ•œ๋‹ค.
  • R1-2 AGENT_HOME ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•œ๋‹ค. (ํ•„์ˆ˜)
  • R1-3 AGENT_PORT๋ฅผ 15034๋กœ ๊ณ ์ • ์„ค์ •ํ•œ๋‹ค.
  • R1-4 AGENT_UPLOAD_DIR๋ฅผ $AGENT_HOME/upload_files๋กœ ์„ค์ •ํ•˜๊ณ  ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์‹ค์ œ๋กœ ์ƒ์„ฑํ•œ๋‹ค.
  • R1-5 AGENT_KEY_PATH๋ฅผ $AGENT_HOME/api_keys๋กœ ์„ค์ •ํ•˜๊ณ  ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜๊ฒŒ ํ•œ๋‹ค.
  • R1-6 AGENT_LOG_DIR(๋กœ๊ทธ ๋””๋ ‰ํ„ฐ๋ฆฌ)๊ฐ€ ์กด์žฌํ•˜๊ณ  ์“ฐ๊ธฐ ๊ถŒํ•œ์„ ๊ฐ–๊ฒŒ ํ•œ๋‹ค.
  • R1-7 MEMORY_LIMIT๋ฅผ ์ •์ˆ˜ 50~512(MB) ๋ฒ”์œ„๋กœ ์„ค์ •ํ•œ๋‹ค.
  • R1-8 CPU_MAX_OCCUPY๋ฅผ ์ •์ˆ˜ 10~100(%) ๋ฒ”์œ„๋กœ ์„ค์ •ํ•œ๋‹ค.
  • R1-9 MULTI_THREAD_ENABLE๋ฅผ true/false(1/0, yes/no ํ—ˆ์šฉ)๋กœ ์„ค์ •ํ•œ๋‹ค.
  • R1-10 $AGENT_HOME/api_keys/secret.key ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ๋‚ด์šฉ์„ ์ •ํ™•ํžˆ agent_api_key_test๋กœ ์ฑ„์šด๋‹ค.
  • R1-11 0.0.0.0:15034 ๋ฐ”์ธ๋”ฉ์ด ๊ฐ€๋Šฅํ•œ ๋„คํŠธ์›Œํฌ ์ƒํƒœ๋ฅผ ํ™•๋ณดํ•œ๋‹ค.

๐Ÿ’ก (ํ•ด์„ค) ์ด ํ‘œ๋Š” "ํ™˜๊ฒฝ ๊ตฌ์„ฑ ์ˆ™์ œ"๊ฐ€ ์•„๋‹ˆ๋ผ ๋ถ€ํŠธ ์‹œํ€€์Šค ์‹คํŒจ๋ฅผ ํ†ตํ•œ ๋””๋ฒ„๊น… ํ›ˆ๋ จ์ด๋‹ค. 11๊ฐœ ์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋น ์ง€๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘์กฐ์ฐจ ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์‹คํŒจ ๋ฉ”์‹œ์ง€๋ฅผ ์ฝ๊ณ  ์–ด๋–ค ์กฐ๊ฑด์ด ์–ด๊ธ‹๋‚ฌ๋Š”์ง€ ์—ญ์ถ”์ ํ•˜๋Š” ๊ณผ์ • ์ž์ฒด๊ฐ€ ํ•™์Šต ๋‚ด์šฉ์ด๋‹ค. ์ด ์กฐ๊ฑด๋“ค์€ .bash_profile ๋“ฑ์— ์˜๊ตฌ ๋“ฑ๋กํ•ด๋‘๋Š” ํŽธ์ด ์žฌํ˜„์— ์œ ๋ฆฌํ•˜๋‹ค(์›๋ฌธ ์˜ˆ์‹œ ๋ฆฌํฌํŠธ์—์„œ .bash_profile ๋‚ด ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์กฐ์ •ํ–ˆ๋‹ค๊ณ  ์„œ์ˆ ํ•œ๋‹ค).

R2. ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์›์ธ ๊ทœ๋ช… ๋ฐ ๋ฆฌํฌํŒ…

  • R2-1 monitor.sh ๋ฅผ ํ™œ์šฉํ•˜์—ฌ, ๋Œ€์ƒ ํ”„๋กœ์„ธ์Šค(agent-leak-app)์˜ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์‹œ๊ฐ„ ๊ฒฝ๊ณผ์— ๋”ฐ๋ผ ์ฆ๊ฐ€ํ•˜๋Š” ํŒจํ„ด์„ ๊ด€์ธกํ•œ๋‹ค.
  • R2-2 ํ”„๋กœ์„ธ์Šค๊ฐ€ ์˜ˆ๊ณ  ์—†์ด ์ค‘๋‹จ๋˜์—ˆ์„ ๋•Œ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๋กœ๊ทธ๋ฅผ ๋ถ„์„ํ•˜์—ฌ, ๋ฉ”๋ชจ๋ฆฌ ์ž„๊ณ„์น˜ ์ดˆ๊ณผ๋กœ ์ธํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ณดํ˜ธ ์ •์ฑ…(MemoryGuard) ์— ๋”ฐ๋ผ ๊ฐ•์ œ ์ข…๋ฃŒ๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ•ต์‹ฌ ๋กœ๊ทธ๋ฅผ ์‹๋ณ„ํ•œ๋‹ค.
  • R2-3 ํ™˜๊ฒฝ๋ณ€์ˆ˜(MEMORY_LIMIT)๋ฅผ ์กฐ์ •ํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์ด ๋” ์˜ค๋ž˜ ์ƒ์กดํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํฌํŠธ์— Before & After๋กœ ๊ธฐ๋กํ•œ๋‹ค.

R3. CPU ๊ณผ์ ์œ  ๋ถ„์„ ๋ฐ ๋ฆฌํฌํŒ…

  • R3-1 ๊ด€์ œ ํˆด๊ณผ ๋กœ๊ทธ๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ ์ „์ฒด ๋ถ€ํ•˜๊ฐ€ ์•„๋‹Œ ํŠน์ • ํ”„๋กœ์„ธ์Šค(agent-leak-app)์˜ CPU ์‚ฌ์šฉ๋ฅ ์ด ๊ธ‰๊ฒฉํžˆ ์ƒ์Šนํ•˜๋Š” ๊ตฌ๊ฐ„์„ ์‹๋ณ„ํ•œ๋‹ค.
  • R3-2 ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๋กœ๊ทธ ๋ถ„์„์„ ํ†ตํ•ด, ํ•ด๋‹น ์ข…๋ฃŒ๊ฐ€ ์˜ค๋ฅ˜๊ฐ€ ์•„๋‹Œ ๊ณผ์ ์œ  ๋ฐฉ์ง€ ์ •์ฑ…(Watchdog)์— ๋”ฐ๋ฅธ ์‹œ์Šคํ…œ ๋ณดํ˜ธ ์กฐ์น˜์˜€์Œ์„ ์ž…์ฆํ•œ๋‹ค.
  • R3-3 ํ™˜๊ฒฝ๋ณ€์ˆ˜(CPU_MAX_OCCUPY)๋ฅผ ์กฐ์ •ํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ ์—ฌ๋ถ€ ๋˜๋Š” ์ƒ์กด ์‹œ๊ฐ„ ๋ณ€ํ™”๋ฅผ ํ™•์ธํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํฌํŠธ์— Before & After๋กœ ๊ธฐ๋กํ•œ๋‹ค.

R4. ๊ต์ฐฉ์ƒํƒœ(DeadLock) ์ง„๋‹จ ๋ฐ ๋ฆฌํฌํŒ…

  • R4-1 ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š๊ณ  ์‚ด์•„์žˆ์œผ๋‚˜(PID ์กด์žฌ), CPU/๋ฉ”๋ชจ๋ฆฌ ๋ณ€ํ™”๊ฐ€ ์—†๊ณ  ๋กœ๊ทธ ๊ธฐ๋ก๋„ ๋ฉˆ์ถ˜ ๋ฌด์‘๋‹ต ์ƒํƒœ์ž„์„ ์‹๋ณ„ํ•œ๋‹ค.
  • R4-2 ํ”„๋กœ๊ทธ๋žจ ๋กœ๊ทธ์˜ ๋งˆ์ง€๋ง‰ ๊ธฐ๋ก์„ ๋ถ„์„ํ•˜์—ฌ, ์„œ๋กœ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ƒ๋Œ€๋ฐฉ์˜ ์ž์›์„ ๋ฌดํ•œํžˆ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ์ž„์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ฆ๋ช…ํ•œ๋‹ค.
  • R4-3 ํ™˜๊ฒฝ๋ณ€์ˆ˜(MULTI_THREAD_ENABLE)๋ฅผ ์กฐ์ •ํ•˜์—ฌ ๋ฐ๋“œ๋ฝ ์žฌํ˜„/ํšŒํ”ผ ๋น„๊ต ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํฌํŠธ์— ๊ธฐ๋กํ•œ๋‹ค.
  • R4-4 (๊ถŒ์žฅ) Deadlock(๊ต์ฐฉ์ƒํƒœ)์˜ ๊ฐœ๋…์ด ์ƒ์†Œํ•œ ํ•™์Šต์ž๋Š” ์•„๋ž˜ ํ‚ค์›Œ๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ํ•™์Šตํ•œ ํ›„ ๋ฏธ์…˜์— ์ž„ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.
    • ์‹์‚ฌํ•˜๋Š” ์ฒ ํ•™์ž๋“ค ๋ฌธ์ œ(Dining Philosophers Problem): ๊ต์ฐฉ์ƒํƒœ์˜ ๋Œ€ํ‘œ์ ์ธ ๋น„์œ  ๋ชจ๋ธ
    • ๊ต์ฐฉ์ƒํƒœ 4๋Œ€ ์กฐ๊ฑด: ์ƒํ˜ธ ๋ฐฐ์ œ(Mutual Exclusion), ์ ์œ  ๋Œ€๊ธฐ(Hold and Wait), ๋น„์„ ์ (No Preemption), ์ˆœํ™˜ ๋Œ€๊ธฐ(Circular Wait)

๐Ÿ’ก (ํ•ด์„ค) R4-4๋Š” ์›๋ฌธ์—์„œ "๊ถŒ์žฅ"์ด๋ผ๊ณ  ๋ช…์‹œ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ํ•„์ˆ˜ ์ œ์ถœ๋ฌผ์€ ์•„๋‹ˆ๋‹ค. ๋‹ค๋งŒ 0.3์˜ ๋ชฉํ‘œ G3๊ณผ ํ‰๊ฐ€ ์ฒดํฌ๋ฆฌ์ŠคํŠธ์˜ "ํ•ต์‹ฌ ๊ฐœ๋… ์ดํ•ด" ํ•ญ๋ชฉ์ด ์ •ํ™•ํžˆ ์ด ๋‘ ํ‚ค์›Œ๋“œ๋ฅผ ๊ฒจ๋ƒฅํ•˜๋ฏ€๋กœ, ๋ฆฌํฌํŠธ 3์ ˆ(Root Cause Analysis)์— 4๋Œ€ ์กฐ๊ฑด ์ค‘ ์–ด๋–ค ์กฐ๊ฑด์ด ์–ด๋–ป๊ฒŒ ์„ฑ๋ฆฝํ–ˆ๋Š”์ง€๋ฅผ ์ ์–ด๋‘๋ฉด ๊ทธ๋Œ€๋กœ ํ‰๊ฐ€ ๋‹ต๋ณ€์ด ๋œ๋‹ค.


0.5 ๋ณด๋„ˆ์Šค ๊ณผ์ œ (์„ ํƒ)

(์›๋ฌธ) 5. ๋ณด๋„ˆ์Šค ๊ณผ์ œ (์„ ํƒ) โ€” ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ถ”๋ก 

  • B1 ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ถ”๋ก 
    • B1-1 ํ”„๋กœ๊ทธ๋žจ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ ๋ถ„์„: ๋กœ๊ทธ์˜ ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ์‹คํ–‰ ์ˆœ์„œ์™€ ๊ต์ฒด ์ฃผ๊ธฐ๋ฅผ ํŒจํ„ดํ™”ํ•œ๋‹ค.
    • B1-2 ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์—ญ์ถ”๋ก : ๋„์ถœ๋œ ํŒจํ„ด์„ ๊ทผ๊ฑฐ๋กœ, ํ˜„์žฌ ํ”„๋กœ๊ทธ๋žจ์— ์ ์šฉ๋œ ์Šค์ผ€์ค„๋ง ๊ธฐ๋ฒ•์ด Round-Robin, FCFS, Priority ์ค‘ ๋ฌด์—‡์ธ์ง€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ถ”๋ก ํ•œ๋‹ค.
    • B1-3 ์žฅ๋‹จ์  ๋ฐ ์ ํ•ฉํ•œ ์•„ํ‚คํ…์ฒ˜ ๋ถ„์„: ์ถ”๋ก ํ•œ ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ธฐ์ˆ ์  ์žฅ๋‹จ์ ์„ ์„œ์ˆ ํ•˜๊ณ  ์–ด๋–ค ์„ฑ๊ฒฉ์˜ ์„œ๋น„์Šค(์˜ˆ: ์‹ค์‹œ๊ฐ„ ์‘๋‹ต์ด ์ค‘์š”ํ•œ ์›น ์„œ๋ฒ„ vs ์ฒ˜๋ฆฌ๋Ÿ‰์ด ์ค‘์š”ํ•œ ๋ฐฐ์น˜ ์„œ๋ฒ„ ๋“ฑ)์— ์ ํ•ฉํ•œ์ง€ ๋ถ„์„ํ•˜์—ฌ ์ •๋ฆฌํ•œ๋‹ค.

0.6 ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ยท ์ œ์•ฝ ์‚ฌํ•ญ

6. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ (์›๋ฌธ)

  • ์ œ๊ณต๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ(Python ๊ธฐ๋ฐ˜)๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ
  • ๋กœ์ปฌ ๋˜๋Š” ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ(Docker ์ปจํ…Œ์ด๋„ˆ ๋“ฑ)์—์„œ ์‹คํ–‰์„ ๊ถŒ์žฅ
  • ๊ณต์œ  ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ฐฉํ™”๋ฒฝ ์„ค์ •์— ์œ ์˜
  • ๐Ÿšซ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋””์ปดํŒŒ์ผ ๋ฐ ๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋ง ์‹œ๋„ ๊ธˆ์ง€

7. ์ œ์•ฝ ์‚ฌํ•ญ (์›๋ฌธ)

  • monitor.sh , ps , top , htop , pstree , kill ๋“ฑ ๋ฆฌ๋ˆ…์Šค ํ‘œ์ค€ ๋ช…๋ น์–ด ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ

๐Ÿ’ก (ํ•ด์„ค) ์ œ์•ฝ ์‚ฌํ•ญ์˜ ํ•ต์‹ฌ์€ ๋‘ ๊ฐ€์ง€๋‹ค.

  • ๐Ÿšซ ๊ธˆ์ง€: ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋œฏ์–ด๋ณด๊ณ  ๋‹ต์„ ์•Œ์•„๋‚ด๋Š” ํ–‰์œ„(๋””์ปดํŒŒ์ผยท๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋ง). ์ฆ‰ ์†Œ์Šค๊ฐ€ ์•„๋‹ˆ๋ผ "๋ฐ”๊นฅ์—์„œ ๊ด€์ฐฐํ•œ ์ฆ๊ฑฐ"๋งŒ์œผ๋กœ ์›์ธ์„ ์ถ”๋ก ํ•ด์•ผ ํ•œ๋‹ค. ์ด ๊ณผ์ œ์˜ ๋‚œ์ด๋„์™€ ํ•™์Šต ๊ฐ€์น˜๊ฐ€ ์ „๋ถ€ ์—ฌ๊ธฐ์„œ ๋‚˜์˜จ๋‹ค.
  • โœ… ํ—ˆ์šฉ/๊ถŒ์žฅ ๋„๊ตฌ: ๋ฆฌ๋ˆ…์Šค ํ‘œ์ค€ ๋ช…๋ น์–ด. ๋ณ„๋„์˜ APMยทํ”„๋กœํŒŒ์ผ๋Ÿฌ๋ฅผ ์„ค์น˜ํ•ด ์šฐํšŒํ•˜์ง€ ๋ง๊ณ , ps/top/htop/pstree/kill๊ณผ ์ง์ ‘ ๋งŒ๋“  monitor.sh ๋กœ ํ•ด๊ฒฐํ•˜๋ผ๋Š” ์˜๋ฏธ๋‹ค.
  • ํฌํŠธ 15034 ๊ณ ์ •์€ ๋ฐฉํ™”๋ฒฝ/ํฌํŠธ ์ถฉ๋Œ ์‹œ "ํฌํŠธ๋ฅผ ๋ฐ”๊พธ๋Š”" ํšŒํ”ผ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋œป์ด๋‹ค. ๊ฒฉ๋ฆฌ ํ™˜๊ฒฝ ๊ถŒ์žฅ์˜ ์‹ค์งˆ์  ์ด์œ ์ด๊ธฐ๋„ ํ•˜๋‹ค.

0.7 ๊ฒฐ๊ณผ/์ถœ๋ ฅ ์˜ˆ์‹œ

(์›๋ฌธ) ์•„๋ž˜๋Š” ์ •๋‹ต์ด ์•„๋‹ˆ๋ผ ์ฐธ๊ณ  ์˜ˆ์‹œ๋‹ค. ์‹ค์ œ ๋ฌธ๊ตฌ์™€ ๋””์ž์ธ์€ ๋‹ฌ๋ผ๋„ ๋œ๋‹ค.

0.7.1 ์žฅ์•  ๋ถ„์„ ๋ฆฌํฌํŠธ ์˜ˆ์‹œ (GitHub Issue โ€” OOM ๋ถ„์„ Case)

[Bug] ํ”„๋กœ์„ธ์Šค ์‹คํ–‰ 10๋ถ„ ํ›„ ๋ฉ”๋ชจ๋ฆฌ ๋ณดํ˜ธ ์ •์ฑ…์— ์˜ํ•œ ๋น„์ •์ƒ ๊ฐ•์ œ ์ข…๋ฃŒ

## 1. Description (ํ˜„์ƒ ์„ค๋ช…)
`agent-leak-app` ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ณ  ์•ฝ 10๋ถ„์ด ๊ฒฝ๊ณผํ•˜๋ฉด, ํ„ฐ๋ฏธ๋„์—
`SELF-TERMINATED` ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋˜๋ฉฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์˜ˆ๊ณ  ์—†์ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
๋‚ด๋ถ€์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ณดํ˜ธ ์ •์ฑ…(MemoryGuard)์— ์˜ํ•ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ•์ œ ์ข…๋ฃŒ๋˜๋Š” ํ˜„์ƒ์ด ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค.

## 2. Evidence & Logs (์ฆ๊ฑฐ ์ž๋ฃŒ)
`monitor.sh`๋ฅผ ํ†ตํ•ด ์ˆ˜์ง‘๋œ ๊ด€์ œ ๋กœ๊ทธ๋ฅผ ๋ถ„์„ํ•œ ๊ฒฐ๊ณผ, **๋ฉ”๋ชจ๋ฆฌ ์ ์œ ์œจ(MEM)**์ด
์ดˆ๊ธฐ 5%๋Œ€์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์ข…๋ฃŒ ์ง์ „ 96%๊นŒ์ง€ **์„ ํ˜•์ ์œผ๋กœ ๊ธ‰๊ฒฉํžˆ ์ƒ์Šน**ํ•˜๋Š” ํŒจํ„ด์ด
ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด CPU ์‚ฌ์šฉ๋ฅ ์€ ์•ˆ์ •์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

[ monitor.log ๋ฐ์ดํ„ฐ ๋ฐœ์ทŒ ]

[2025-12-30 14:00:00] PROCESS:agent-leak-app CPU:1.2% MEM:5.1% DISK:954G FIREWALL:active
[2025-12-30 14:03:00] PROCESS:agent-leak-app CPU:1.5% MEM:35.4% DISK:954G FIREWALL:active
[2025-12-30 14:06:00] PROCESS:agent-leak-app CPU:1.4% MEM:68.2% DISK:954G FIREWALL:active
[2025-12-30 14:09:00] PROCESS:agent-leak-app CPU:1.3% MEM:89.5% DISK:954G FIREWALL:active
[2025-12-30 14:10:00] PROCESS:agent-leak-app CPU:1.5% MEM:96.8% DISK:954G FIREWALL:active

[ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๋กœ๊ทธ ๋ฐœ์ทŒ ]

[CRITICAL] [MemoryGuard] Memory limit exceeded (256MB >= 256MB) / (Recommend Over 256MB)
[CRITICAL] [MemoryGuard] Self-terminating process 12345 to prevent system instability.
>>> [SYSTEM] SELF-TERMINATED (Memory Limit Exceeded) <<<
## 3. Root Cause Analysis (์›์ธ ๋ถ„์„)
ํ˜„์ƒ ๋ถ„์„: ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง ๋‚ด๋ถ€์—์„œ ์ƒ์„ฑํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํž™(Heap) ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œํ•˜์ง€ ์•Š๊ณ 
์ง€์†์ ์œผ๋กœ ์Œ“๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(Memory Leak) ๊ฒฐํ•จ์ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ํŒ๋‹จ๋ฉ๋‹ˆ๋‹ค.
์‹œ์Šคํ…œ ๋™์ž‘: ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด MEMORY_LIMIT์— ๋„๋‹ฌํ•˜์ž, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด๋ถ€์˜
**MemoryGuard ์ •์ฑ…**์ด ์‹œ์Šคํ…œ ์ „์ฒด ๋ถˆ์•ˆ์ •์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋ฅผ SIGKILL๋กœ
๊ฐ•์ œ ์ข…๋ฃŒ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

## 4. Workaround & Verification (์กฐ์น˜ ๋ฐ ๊ฒ€์ฆ)
์กฐ์น˜ ๋‚ด์šฉ: .bash_profile ๋‚ด์˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜ MEMORY_LIMIT ๊ฐ’์„ ๊ธฐ์กด 256MB์—์„œ 512MB๋กœ
์ƒํ–ฅ ์กฐ์ •ํ•˜์—ฌ ์ž„์‹œ์ ์œผ๋กœ ๊ฐ€์šฉ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™•๋ณดํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ฒ€์ฆ ๊ฒฐ๊ณผ: ์„ค์ • ๋ณ€๊ฒฝ ํ›„ ์žฌ์‹คํ–‰ ๊ฒฐ๊ณผ, ๊ธฐ์กด ์ข…๋ฃŒ ์‹œ์ ์ธ 10๋ถ„์„ ๋„˜๊ฒจ 30๋ถ„ ์ด์ƒ ํ”„๋กœ์„ธ์Šค๊ฐ€
์ƒ์กดํ•จ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ๊ทผ๋ณธ์ ์ธ ํ•ด๊ฒฐ์„ ์œ„ํ•ด์„œ๋Š” ์†Œ์Šค ์ฝ”๋“œ ๋‚ด ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ
์ฃผ๊ธฐ์ ์œผ๋กœ ์‚ญ์ œ(del or pop)ํ•˜๋Š” ๋ฆฌํŒฉํ† ๋ง์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

0.7.2 ์žฅ์•  ๋ถ„์„ ๋ฆฌํฌํŠธ ๊ตฌ์กฐ ์˜ˆ์‹œ (GitHub Issue โ€” CPU ๊ณผ์ ์œ  Case, ์ •๋‹ต ์•„๋‹˜)

[Bug] CPU ๊ณผ์ ์œ ์— ์˜ํ•œ Watchdog ๋ณดํ˜ธ ์กฐ์น˜ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ

## 1. Description (ํ˜„์ƒ ์„ค๋ช…)
`agent-leak-app` ์‹คํ–‰ ํ›„ ์ผ์ • ์‹œ๊ฐ„์ด ๊ฒฝ๊ณผํ•˜๋ฉด, CPU ์‚ฌ์šฉ๋ฅ ์ด ๊ธ‰๊ฒฉํžˆ ์ƒ์Šนํ•˜๊ณ 
"[SYSTEM] WATCHDOG: INITIATING EMERGENCY ABORT (SIGTERM)" ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜
ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

## 2. Evidence & Logs (์ฆ๊ฑฐ ์ž๋ฃŒ)
- monitor.sh ๊ด€์ œ ๋กœ๊ทธ์—์„œ CPU ์‚ฌ์šฉ๋ฅ  ๋ณ€ํ™” ์ถ”์ด (์บก์ฒ˜/์ˆ˜์น˜ ์ฒจ๋ถ€)
- ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๋กœ๊ทธ์—์„œ Watchdog ๊ด€๋ จ ๋กœ๊ทธ ๋ฐœ์ทŒ
- top ๋˜๋Š” ps ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•œ ํ”„๋กœ์„ธ์Šค๋ณ„ CPU ์ ์œ ์œจ ํ™•์ธ ๊ฒฐ๊ณผ

## 3. Root Cause Analysis (์›์ธ ๋ถ„์„)
- CPU ๋ถ€ํ•˜๊ฐ€ ๋‚ด๋ถ€ Watchdog ์ž„๊ณ„์น˜๋ฅผ ์ดˆ๊ณผํ•œ ์›์ธ ๋ถ„์„
- ๊ณผ์ ์œ  ๋ฐฉ์ง€ ์ •์ฑ…์˜ ๋™์ž‘ ์›๋ฆฌ ์„œ์ˆ 

## 4. Workaround & Verification (์กฐ์น˜ ๋ฐ ๊ฒ€์ฆ)
- CPU_MAX_OCCUPY ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์กฐ์ • ์ „ํ›„ ๋น„๊ต (Before & After)
- ์กฐ์ • ํ›„ ํ”„๋กœ์„ธ์Šค ์ƒ์กด ์‹œ๊ฐ„ ๋˜๋Š” ์ข…๋ฃŒ ์—ฌ๋ถ€ ๋ณ€ํ™” ๊ธฐ๋ก

0.7.3 ์žฅ์•  ๋ถ„์„ ๋ฆฌํฌํŠธ ๊ตฌ์กฐ ์˜ˆ์‹œ (GitHub Issue โ€” Deadlock Case, ์ •๋‹ต ์•„๋‹˜)

[Bug] ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๊ต์ฐฉ์ƒํƒœ(Deadlock) ๋ฐœ์ƒ์œผ๋กœ ํ”„๋กœ์„ธ์Šค ๋ฌด์‘๋‹ต

## 1. Description (ํ˜„์ƒ ์„ค๋ช…)
`agent-leak-app` ์‹คํ–‰ ํ›„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š๊ณ  PID๊ฐ€ ์œ ์ง€๋˜๋‚˜,
CPU/๋ฉ”๋ชจ๋ฆฌ ๋ณ€ํ™”๊ฐ€ ์—†๊ณ  ๋กœ๊ทธ ์ถœ๋ ฅ๋„ ์™„์ „ํžˆ ๋ฉˆ์ถ˜ ๋ฌด์‘๋‹ต ์ƒํƒœ๊ฐ€ ์ง€์†๋ฉ๋‹ˆ๋‹ค.

## 2. Evidence & Logs (์ฆ๊ฑฐ ์ž๋ฃŒ)
- ps -ef | grep agent ๊ฒฐ๊ณผ (PID ์กด์žฌ ํ™•์ธ)
- top -H ๋˜๋Š” ps -L ๊ฒฐ๊ณผ (์Šค๋ ˆ๋“œ๋ณ„ CPU/MEM ๋ณ€ํ™” ์—†์Œ ํ™•์ธ)
- ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๋กœ๊ทธ์˜ ๋งˆ์ง€๋ง‰ ๊ธฐ๋ก ๋ฐœ์ทŒ (WAITING/BLOCKED ๋กœ๊ทธ)

## 3. Root Cause Analysis (์›์ธ ๋ถ„์„)
- ๋งˆ์ง€๋ง‰ ๋กœ๊ทธ๋ฅผ ๊ทผ๊ฑฐ๋กœ ์Šค๋ ˆ๋“œ ๊ฐ„ ์ˆœํ™˜ ์ž์› ๋Œ€๊ธฐ ์ƒํƒœ ์ถ”๋ก 
- ์ƒํ˜ธ ๋ฐฐ์ œ์™€ ์ˆœํ™˜ ๋Œ€๊ธฐ ์›๋ฆฌ ์„œ์ˆ 

## 4. Workaround & Verification (์กฐ์น˜ ๋ฐ ๊ฒ€์ฆ)
- MULTI_THREAD_ENABLE ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ false๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์žฌ์‹คํ–‰
- ๋ฐ๋“œ๋ฝ ๋ฐœ์ƒ ์—ฌ๋ถ€ ๋น„๊ต (Before: true โ†’ Deadlock / After: false โ†’ ์ •์ƒ ๋™์ž‘)

0.7.4 ์Šค์ผ€์ค„๋ง ์ถ”๋ก  ๋ฆฌํฌํŠธ ์˜ˆ์‹œ (๋ณด๋„ˆ์Šค B1)

# [Analysis] ๋กœ๊ทธ ํŒจํ„ด ๋ถ„์„์„ ํ†ตํ•œ ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ถ”๋ก 

## 1. ๋กœ๊ทธ ๊ด€์ฐฐ ๊ฐœ์š”
`agent-leak-app`์˜ ์ •์ƒ ์‹คํ–‰ ์ƒํƒœ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์›Œ์ปค(Worker) ์Šค๋ ˆ๋“œ๋“ค์˜
์ž‘์—… ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜์—ฌ, OS ๋˜๋Š” ๋Ÿฐํƒ€์ž„์ด ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์Šค์ผ€์ค„๋ง ๊ธฐ๋ฒ•์„
์—ญ์ถ”์ ํ–ˆ์Šต๋‹ˆ๋‹ค.

## 2. ์ฆ๊ฑฐ ์ž๋ฃŒ
๋กœ๊ทธ์˜ ํƒ€์ž„์Šคํƒฌํ”„์™€ ์ž‘์—… ์ง„ํ–‰๋ฅ (Progress)์„ ๋ถ„์„ํ•œ ๊ฒฐ๊ณผ, ํ•˜๋‚˜์˜ ์ž‘์—…์ด
์™„๋ฃŒ๋˜๊ธฐ ์ „์— ๋‹ค๋ฅธ ์ž‘์—…์ด ๋ผ์–ด๋“œ๋Š” ํ˜„์ƒ์ด ๊ด€์ธก๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

[ Application Log Snapshot ]

[2025-12-30 14:00:00.100] [Thread-A] Task Started. Calculating... (10%)
[2025-12-30 14:00:00.150] [Thread-A] Calculating... (20%)
[2025-12-30 14:00:00.200] [Thread-B] Task Started. Calculating... (10%)  <-- A ์ค‘๋‹จ, B ์‹œ์ž‘
[2025-12-30 14:00:00.250] [Thread-B] Calculating... (20%)
[2025-12-30 14:00:00.300] [Thread-C] Task Started. Calculating... (10%)  <-- B ์ค‘๋‹จ, C ์‹œ์ž‘
[2025-12-30 14:00:00.350] [Thread-A] Resumed. Calculating... (30%)       <-- C ์ค‘๋‹จ, A ์žฌ๊ฐœ
## 3. ํŒจํ„ด ๋ถ„์„ ๋ฐ ๊ฒฐ๋ก 
* ์ˆœ์ฐจ ์ฒ˜๋ฆฌ ์•„๋‹˜: Thread-A๊ฐ€ 100% ์™„๋ฃŒ๋˜๊ธฐ ์ „์— Thread-B๊ฐ€ ์‹คํ–‰๋˜์—ˆ์œผ๋ฏ€๋กœ,
  ๋จผ์ € ์˜จ ์ž‘์—…์„ ๋๊นŒ์ง€ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด ์•„๋‹™๋‹ˆ๋‹ค.
* ์šฐ์„ ์ˆœ์œ„ ์•„๋‹˜: ํŠน์ • ์Šค๋ ˆ๋“œ๊ฐ€ ์ž์›์„ ๋…์ ํ•˜๊ฑฐ๋‚˜, ๊ธด๊ธ‰ํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒฝํ–ฅ ์—†์ด
  A, B, C๊ฐ€ ๊ณตํ‰ํ•˜๊ฒŒ ๋‚˜๋ˆ  ๊ฐ€์ง€๋Š” ๋ชจ์Šต์„ ๋ณด์ž…๋‹ˆ๋‹ค.
* ์ตœ์ข… ๊ฒฐ๋ก : ๊ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ์ •ํ•ด์ง„ ์‹œ๊ฐ„ ํ• ๋‹น๋Ÿ‰๋งŒํผ CPU๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์ž์›์„ ๋ฐ˜๋‚ฉํ•˜๋Š”
  ๋ผ์šด๋“œ ๋กœ๋นˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ถ”๋ก ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก (ํ•ด์„ค) ์˜ˆ์‹œ์—์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋“ฑ์žฅํ•˜๋Š” ํ•ต์‹ฌ ๋กœ๊ทธ ๋ฌธ์ž์—ด์€ ๊ทธ๋Œ€๋กœ ๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ๋กœ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

  • OOM: Memory limit exceeded, MemoryGuard, SELF-TERMINATED
  • CPU: WATCHDOG, EMERGENCY ABORT, SIGTERM
  • Deadlock: WAITING, BLOCKED grep ์œผ๋กœ ์ด ๋ฌธ์ž์—ด์„ ์žก์•„ ๋ฆฌํฌํŠธ์— ๋ฐœ์ทŒํ•˜๋ฉด E1-2 / E2-2 / E3-3 ์š”๊ฑด์„ ์ง์ ‘ ์ถฉ์กฑํ•œ๋‹ค.

0.8 ๐Ÿ“š ์ด ๊ณผ์ œ๊ฐ€ ๊ณต๋ถ€ํ•˜๊ธธ ์›ํ•˜๋Š” ๊ฒƒ (ํ•™์Šต ์ง€๋„)

์š”๊ตฌ์‚ฌํ•ญ ํ‘œ๋ฉด์ ์œผ๋กœ ์‹œํ‚ค๋Š” ์ผ ์‹ค์ œ๋กœ ํ•™์Šต์‹œํ‚ค๋ ค๋Š” ๊ฐœ๋… ์Šค์Šค๋กœ ๋‹ตํ•ด๋ณผ ์งˆ๋ฌธ
R1-1 (root ์•„๋‹Œ ๊ณ„์ •) ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋กœ ์‹คํ–‰ ๋ฆฌ๋ˆ…์Šค ๊ถŒํ•œ ๋ชจ๋ธ๊ณผ ์ตœ์†Œ ๊ถŒํ•œ ์›์น™, root๋กœ ๋Œ๋ฆฌ๋Š” ์„œ๋น„์Šค๊ฐ€ ์™œ ์œ„ํ—˜ํ•œ๊ฐ€ ์ด ์•ฑ์ด root๋กœ ๋Œ์•˜๋‹ค๋ฉด OOM์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‹œ์Šคํ…œ ์ „์ฒด์— ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์ƒ๊ธฐ๋Š”๊ฐ€?
R1-3 / R1-11 (AGENT_PORT=15034 ๊ณ ์ •, 0.0.0.0:15034 ๋ฐ”์ธ๋”ฉ) ํฌํŠธ๋ฅผ ์—ด์–ด๋‘”๋‹ค ์†Œ์ผ“ ๋ฐ”์ธ๋”ฉ, 0.0.0.0 vs 127.0.0.1์˜ ์ฐจ์ด, EADDRINUSE(ํฌํŠธ ์ถฉ๋Œ), ๋ฐฉํ™”๋ฒฝ 0.0.0.0 ๋ฐ”์ธ๋”ฉ๊ณผ 127.0.0.1 ๋ฐ”์ธ๋”ฉ์€ ๋ณด์•ˆ์ƒ ๋ฌด์—‡์ด ๋‹ค๋ฅธ๊ฐ€? ํฌํŠธ๊ฐ€ ์ด๋ฏธ ์“ฐ์ด๊ณ  ์žˆ์œผ๋ฉด ์–ด๋–ป๊ฒŒ ํ™•์ธํ•˜๋Š”๊ฐ€?
R1-2ยทR1-4~R1-10 (ํ™˜๊ฒฝ๋ณ€์ˆ˜ยท๋””๋ ‰ํ„ฐ๋ฆฌยทsecret.key) ํ™˜๊ฒฝ์„ ์ค€๋น„ํ•œ๋‹ค ํ™˜๊ฒฝ๋ณ€์ˆ˜์˜ ํ”„๋กœ์„ธ์Šค ์ƒ์†, 12-Factor์‹ ์™ธ๋ถ€ ์„ค์ • ์ฃผ์ž…, ํŒŒ์ผ ํผ๋ฏธ์…˜(์กด์žฌ vs ์“ฐ๊ธฐ ๊ถŒํ•œ), ๋ถ€ํŠธ ์‹œํ€€์Šค ์‚ฌ์ „ ๊ฒ€์ฆ(fail-fast) ์™œ ์„ค์ •์„ ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š”๊ฐ€? "๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์กด์žฌํ•œ๋‹ค"์™€ "์“ธ ์ˆ˜ ์žˆ๋‹ค"๋Š” ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅด๊ฒŒ ๊ฒ€์‚ฌํ•˜๋Š”๊ฐ€?
R1-7 / R1-8 (MEMORY_LIMIT 50512, CPU_MAX_OCCUPY 10100) ์ˆซ์ž๋ฅผ ๋ฒ”์œ„ ์•ˆ์— ๋„ฃ๋Š”๋‹ค ์ž…๋ ฅ ๊ฒ€์ฆ(range validation), ๋ฆฌ์†Œ์Šค ์ฟผํ„ฐยท์ž„๊ณ„๊ฐ’ ์„ค๊ณ„, cgroups/ulimit ๊ฐ™์€ ์‹ค์ œ OS ์ž์› ์ œํ•œ๊ณผ์˜ ๋น„๊ต ์‹ค์ œ ๋ฆฌ๋ˆ…์Šค๋Š” ํ”„๋กœ์„ธ์Šค ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ์ œํ•œํ•˜๋Š”๊ฐ€(cgroups, ulimit -v)? ์•ฑ ๋‚ด๋ถ€ ์ œํ•œ๊ณผ OS ์ œํ•œ ์ค‘ ๋ฌด์—‡์ด ๋” ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?
R2-1 (monitor.sh๋กœ ๋ฉ”๋ชจ๋ฆฌ ์ฆ๊ฐ€ ๊ด€์ธก) ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ฐ๋Š”๋‹ค ์‹œ๊ณ„์—ด ๊ด€์ œ(polling)์™€ ์ƒ˜ํ”Œ๋ง ์ฃผ๊ธฐ, ps -o rss,vsz,%mem์˜ ์˜๋ฏธ ์ฐจ์ด, RSS/VSZ/ํž™์˜ ๊ตฌ๋ถ„ %MEM๊ณผ RSS๋Š” ๋ฌด์—‡์ด ๋‹ค๋ฅธ๊ฐ€? 3๋ถ„ ๊ฐ„๊ฒฉ ์ƒ˜ํ”Œ๋ง์œผ๋กœ ๋†“์น˜๋Š” ์žฅ์• ๋Š” ๋ฌด์—‡์ธ๊ฐ€?
R2-2 (MemoryGuard ๋กœ๊ทธ ์‹๋ณ„) ์ข…๋ฃŒ ๋กœ๊ทธ๋ฅผ ์ฐพ๋Š”๋‹ค ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜(ํž™์— ์Œ“๊ณ  ํ•ด์ œ ์•ˆ ํ•จ), ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์˜ ํ•œ๊ณ„(์ฐธ์กฐ๊ฐ€ ๋‚จ์œผ๋ฉด GC๋„ ๋ชป ์ง€์šด๋‹ค), ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ ๋ณดํ˜ธ ์ •์ฑ… vs ์ปค๋„ OOM Killer ํŒŒ์ด์ฌ์ฒ˜๋Ÿผ GC๊ฐ€ ์žˆ๋Š” ์–ธ์–ด์—์„œ๋„ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ์™œ ๋ฐœ์ƒํ•˜๋Š”๊ฐ€? ์ปค๋„ OOM Killer๋Š” ๋ฌด์—‡์„ ๊ทผ๊ฑฐ๋กœ ํฌ์ƒ์ž๋ฅผ ๊ณ ๋ฅด๋Š”๊ฐ€(oom_score)?
R2-3 (MEMORY_LIMIT Before & After) ์ž„๊ณ„๊ฐ’์„ ์˜ฌ๋ ค๋ณธ๋‹ค ์ฆ์ƒ ์™„ํ™”์™€ ๊ทผ๋ณธ ํ•ด๊ฒฐ์˜ ๊ตฌ๋ถ„, ํ†ต์ œ ๋ณ€์ธ ํ•˜๋‚˜๋งŒ ๋ฐ”๊พธ๋Š” ์‹คํ—˜ ์„ค๊ณ„, ํšŒ๊ท€ ๊ฒ€์ฆ ํ•œ๋„๋ฅผ 512MB๋กœ ์˜ฌ๋ฆฌ๋ฉด ์žฅ์• ๊ฐ€ "ํ•ด๊ฒฐ"๋œ ๊ฒƒ์ธ๊ฐ€, "์ง€์—ฐ"๋œ ๊ฒƒ์ธ๊ฐ€? ๋ˆ„์ˆ˜์œจ์ด ์ผ์ •ํ•˜๋‹ค๋ฉด ์ƒˆ ์ข…๋ฃŒ ์‹œ์ ์„ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?
R3-1 (์ „์ฒด ๋ถ€ํ•˜ vs ํŠน์ • ํ”„๋กœ์„ธ์Šค) CPU ๊ทธ๋ž˜ํ”„๋ฅผ ๋ณธ๋‹ค load average์™€ %CPU์˜ ์ฐจ์ด, ์ฝ”์–ด ์ˆ˜์— ๋”ฐ๋ฅธ 100%โ†‘ ํ•ด์„, top์˜ Irix/Solaris ๋ชจ๋“œ top์—์„œ 400%๊ฐ€ ์ฐํžˆ๋Š” ๊ฒƒ์€ ๋ฌด์Šจ ๋œป์ธ๊ฐ€? load average 4.0์€ 8์ฝ”์–ด์™€ 2์ฝ”์–ด์—์„œ ๊ฐ๊ฐ ์–ด๋–ค ์ƒํƒœ์ธ๊ฐ€?
R3-2 (Watchdog = ๋ณดํ˜ธ ์กฐ์น˜์ž„์„ ์ž…์ฆ) ์ข…๋ฃŒ ์›์ธ์„ ๋ฐํžŒ๋‹ค ์‹œ๊ทธ๋„ ์˜๋ฏธ๋ก : SIGTERM(์ •์ƒ ์ข…๋ฃŒ ์š”์ฒญ, ํ•ธ๋“ค๋ง ๊ฐ€๋Šฅ) vs SIGKILL(๋ฌด์กฐ๊ฑด ์ข…๋ฃŒ), watchdog/์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค ํŒจํ„ด ์™œ OOM์€ SIGKILL์ด๊ณ  Watchdog์€ SIGTERM์ธ๊ฐ€? SIGTERM์„ ๋ฐ›์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๋งˆ์ง€๋ง‰ ์ผ์€ ๋ฌด์—‡์ธ๊ฐ€?
R3-3 (CPU_MAX_OCCUPY Before & After) ์ž„๊ณ„๊ฐ’์„ ์กฐ์ •ํ•œ๋‹ค CPU ๊ณผ์ ์œ ๊ฐ€ ์‹œ์Šคํ…œ ์ง€์—ฐ์„ ๋งŒ๋“œ๋Š” ์›๋ฆฌ(์Šค์ผ€์ค„๋Ÿฌ ํ ๋Œ€๊ธฐ, ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜ ๋น„์šฉ, starvation) ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ๋…์ ํ•˜๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์‘๋‹ต ์ง€์—ฐ์€ ์™œ ์ƒ๊ธฐ๋Š”๊ฐ€? ์ž„๊ณ„๊ฐ’์„ 100%๋กœ ์˜ฌ๋ฆฌ๋ฉด ๋ฌด์—‡์ด ๋” ๋‚˜๋น ์ง€๋Š”๊ฐ€?
R4-1 (PID ์กด์žฌ + ๋ณ€ํ™” ์—†์Œ) ๋ฉˆ์ถ˜ ๊ฑธ ํ™•์ธํ•œ๋‹ค ํ”„๋กœ์„ธ์Šค ์ƒํƒœ ์ฝ”๋“œ: R/S/D(uninterruptible sleep)/Z/T, "์‚ด์•„์žˆ์Œ"๊ณผ "์ผํ•˜๊ณ  ์žˆ์Œ"์˜ ์ฐจ์ด, ๋ฌด์‘๋‹ต ์ง„๋‹จ ์ ˆ์ฐจ ps STAT ์—ด์ด S์™€ D์ผ ๋•Œ ๋Œ€์‘์ด ์–ด๋–ป๊ฒŒ ๋‹ฌ๋ผ์ง€๋Š”๊ฐ€? ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU 0%์ธ๋ฐ ์ •์ƒ์ธ ๊ฒฝ์šฐ์™€ ๋ฐ๋“œ๋ฝ์ธ ๊ฒฝ์šฐ๋ฅผ ๋ฌด์—‡์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๋Š”๊ฐ€?
R4-2 (์Šค๋ ˆ๋“œ ๊ฐ„ ์ˆœํ™˜ ๋Œ€๊ธฐ ์ฆ๋ช…) ๋งˆ์ง€๋ง‰ ๋กœ๊ทธ๋ฅผ ์ฝ๋Š”๋‹ค ๊ต์ฐฉ์ƒํƒœ 4๋Œ€ ์กฐ๊ฑด(์ƒํ˜ธ ๋ฐฐ์ œยท์ ์œ  ๋Œ€๊ธฐยท๋น„์„ ์ ยท์ˆœํ™˜ ๋Œ€๊ธฐ), ๋ฎคํ…์Šค/๋ฝ ํš๋“ ์ˆœ์„œ, ์Šค๋ ˆ๋“œ ๋‹จ์œ„ ๊ด€์ฐฐ(top -H, ps -L, /proc/<pid>/task) ๋กœ๊ทธ์—์„œ Aโ†’B, Bโ†’A ์ˆœํ™˜ ์˜์กด์„ ์–ด๋–ป๊ฒŒ ์ฝ์–ด๋‚ด๋Š”๊ฐ€? 4๋Œ€ ์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜๋งŒ ๊นจ๋ฉด ๋ฐ๋“œ๋ฝ์ด ์‚ฌ๋ผ์ง€๋Š” ์ด์œ ๋Š”?
R4-3 (MULTI_THREAD_ENABLE ์žฌํ˜„/ํšŒํ”ผ) ์Šค์œ„์น˜๋ฅผ ๋ˆ๋‹ค ์žฌํ˜„ ๊ฐ€๋Šฅ์„ฑ(reproducibility)์ด ๊ณง ์ง„๋‹จ์˜ ์ฆ๊ฑฐ, ๋™์‹œ์„ฑ ๋ฒ„๊ทธ์˜ ๋น„๊ฒฐ์ •์„ฑ, ๋‹จ์ผ ์Šค๋ ˆ๋“œ ์ „ํ™˜์ด "ํ•ด๊ฒฐ"์ด ์•„๋‹Œ ์ด์œ  ์Šค๋ ˆ๋“œ๋ฅผ ๋„๋ฉด ๋ฐ๋“œ๋ฝ์ด ์‚ฌ๋ผ์ง€๋Š”๋ฐ, ์™œ ์ด๊ฒƒ์„ ๊ทผ๋ณธ ํ•ด๊ฒฐ์ด๋ผ ๋ถ€๋ฅด๋ฉด ์•ˆ ๋˜๋Š”๊ฐ€? ์ฝ”๋“œ๋ฅผ ๊ณ ์นœ๋‹ค๋ฉด ๋ฝ ์ˆœ์„œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ •ํ•˜๊ฒ ๋Š”๊ฐ€?
D1-D2 / E1-E3 (Issue ํ…œํ”Œ๋ฆฟยท์ฆ๊ฑฐ ์š”๊ฑด) ๋ฌธ์„œ๋ฅผ ํ˜•์‹์— ๋งž์ถ˜๋‹ค ๊ธฐ์ˆ  ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜: ํ˜„์ƒโ†’์ฆ๊ฑฐโ†’์›์ธโ†’์กฐ์น˜์˜ ์ธ๊ณผ ์‚ฌ์Šฌ, ์œกํ•˜์›์น™, ์žฌํ˜„ ์ ˆ์ฐจ์˜ ์™„๊ฒฐ์„ฑ, ์ฃผ์žฅ๊ณผ ์ฆ๊ฑฐ์˜ ๋ถ„๋ฆฌ ๋‚ด ๋ฆฌํฌํŠธ๋งŒ ์ฝ์€ ๋™๋ฃŒ๊ฐ€ ๋‚ด ํ™˜๊ฒฝ ์—†์ด ๊ฐ™์€ ์žฅ์• ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? "~์ธ ๊ฒƒ ๊ฐ™๋‹ค"๋ฅผ "~๋ผ๋Š” ๋กœ๊ทธ๊ฐ€ ์ด๋ฅผ ๋’ท๋ฐ›์นจํ•œ๋‹ค"๋กœ ๋ฐ”๊ฟ” ์ผ๋Š”๊ฐ€?
B1-1~B1-3 (์Šค์ผ€์ค„๋ง ์—ญ์ถ”๋ก ) ๋กœ๊ทธ ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ๋ณธ๋‹ค CPU ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜(Round-Robin / FCFS / Priority), ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค์™€ ์„ ์ (preemption), ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜, ์ฒ˜๋ฆฌ๋Ÿ‰ vs ์‘๋‹ต์‹œ๊ฐ„ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„ 50ms ๊ฐ„๊ฒฉ ๊ต์ฒด๋Š” ํƒ€์ž„ ํ€€ํ…€์ด 50ms๋ผ๋Š” ๋œป์ธ๊ฐ€? Round-Robin์˜ ํ€€ํ…€์„ ๋Š˜๋ฆฌ๋ฉด ์›น ์„œ๋ฒ„์™€ ๋ฐฐ์น˜ ์„œ๋ฒ„์— ๊ฐ๊ฐ ์–ด๋–ค ์˜ํ–ฅ์ด ์žˆ๋Š”๊ฐ€?
์ œ์•ฝ: ๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋ง ๊ธˆ์ง€ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์•ˆ ๋œฏ๋Š”๋‹ค ๋ธ”๋ž™๋ฐ•์Šค ๊ด€์ธก ๊ธฐ๋ฐ˜ ์ถ”๋ก , ๊ด€์ธก ๊ฐ€๋Šฅ์„ฑ(observability), ๊ฐ€์„ค-๊ฒ€์ฆ ์‚ฌ์ดํด ์†Œ์Šค๋ฅผ ๋ชป ๋ณผ ๋•Œ ๋‚ด๊ฐ€ ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ด€์ธก ์ฐฝ๊ตฌ๋Š” ๋ฌด์—‡์ธ๊ฐ€(/proc, ๋กœ๊ทธ, ์‹œ์Šคํ…œ ์ฝœ, ๋ฆฌ์†Œ์Šค ์ง€ํ‘œ)?
์ „์ฒด (์šด์˜ ๊ด€์ ) 3๊ฑด ๋ฆฌํฌํŠธ๋ฅผ ๋‚ธ๋‹ค ์‚ฌํ›„ ๋ถ„์„(Post-mortem)๊ณผ ์‚ฌ๊ณ  ๋Œ€์‘ ์ ˆ์ฐจ, "์žฌ๋ถ€ํŒ… ๋จผ์ €"๊ฐ€ ์™œ ์ตœ์•…์ธ์ง€, ์„ ์ œ ํƒ์ง€(์•Œ๋ฆผ ์ž„๊ณ„์น˜) ์„ค๊ณ„ ์žฅ์•  ๋ฐœ์ƒ ์ „์— ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ํƒ์ง€ํ•˜๋ ค๋ฉด monitor.sh๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฐœ์„ ํ•ด์•ผ ํ•˜๋Š”๊ฐ€(์ฆ๊ฐ€ ์ถ”์„ธ ๊ธฐ๋ฐ˜ ๊ฒฝ๋ณด)?

๐Ÿ’ก (ํ•ด์„ค) ํ‰๊ฐ€ ์ฒดํฌ๋ฆฌ์ŠคํŠธ(checklists_md/troubleshooting_oom_cpu_deadlock.md)์˜ "3. ํ•ต์‹ฌ ๊ฐœ๋… ์ดํ•ด" / "4. ํ™•์žฅ ์‚ฌ๊ณ  ๋ฐ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…" ํ•ญ๋ชฉ์ด ์œ„ ํ‘œ์˜ "์Šค์Šค๋กœ ๋‹ตํ•ด๋ณผ ์งˆ๋ฌธ" ์—ด๊ณผ ๊ฑฐ์˜ 1:1๋กœ ๋Œ€์‘ํ•œ๋‹ค. ํŠนํžˆ ๋‹ค์Œ 4๊ฐœ๋Š” ๋ฆฌํฌํŠธ ๋ณธ๋ฌธ์— ๋‹ต์ด ์—†์œผ๋ฉด ๊ตฌ์ˆ ๋กœ๋ผ๋„ ๋ฐ˜๋“œ์‹œ ๋‹ตํ•ด์•ผ ํ•œ๋‹ค.

  • OOMยทCPU SpikeยทDeadlock ์ค‘ ์‹ค์ œ ์„œ๋น„์Šค์—์„œ ๊ฐ€์žฅ ์น˜๋ช…์ ์ธ ๊ฒƒ์€ ๋ฌด์—‡์ด๋ฉฐ ๊ทธ ์ด์œ ์™€ ๊ทผ๋ณธ ์˜ˆ๋ฐฉ์ฑ…์€?
  • OOM๊ณผ Deadlock์ด ๋™์‹œ์— ๋ฐœ์ƒํ–ˆ๋‹ค๋ฉด ์–ด๋–ค ์ˆœ์„œ๋กœ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…ํ•˜๊ณ , ์šฐ์„ ์ˆœ์œ„ ํŒ๋‹จ ๊ทผ๊ฑฐ๋Š”?
  • ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์กฐ์ •์€ ์ž„์‹œ ์กฐ์น˜์˜€๋‹ค. ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ณ ์น  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์žฅ์•  ์œ ํ˜•๋ณ„๋กœ ์–ด๋–ค ์ฝ”๋“œ ๋ ˆ๋ฒจ ๊ฐœ์„ ์„ ํ•˜๊ฒ ๋Š”๊ฐ€?
  • ์ด ๋ฏธ์…˜์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ํ•œ๋‹ค๋ฉด ์–ด๋–ค ์ ์„ ๋‹ค๋ฅด๊ฒŒ ์ ‘๊ทผํ•˜๊ฒ ๋Š”๊ฐ€?

0.9 ์ž์ฃผ ๋†“์น˜๋Š” ํ•จ์ •

  1. "๋ฆฌํฌํŠธ 3๊ฑด"์€ 3๊ฐœ์˜ ๋…๋ฆฝ ๋ฌธ์„œ๋‹ค. ํ•˜๋‚˜์˜ ๋ฌธ์„œ์— ์„ธ ์žฅ์• ๋ฅผ ๋ชฐ์•„ ์“ฐ๋ฉด D1์˜ "๊ฐ๊ฐ์— ๋Œ€ํ•ด ์ž‘์„ฑ๋œ" ์กฐ๊ฑด๊ณผ ์–ด๊ธ‹๋‚œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ ๋ฆฌํฌํŠธ๊ฐ€ D1-1~D1-5(ํ˜„์ƒ/์ฆ๊ฑฐ/๊ทผ๋ณธ์›์ธ/์กฐ์น˜/๊ฒฐ๊ณผํ™•์ธ) 5๊ฐœ ํ•ญ๋ชฉ์„ ์ „๋ถ€ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค โ€” ์กฐ์น˜๋งŒ ์“ฐ๊ณ  "๊ฒฐ๊ณผ ํ™•์ธ(Before & After)"์„ ๋น ๋œจ๋ฆฌ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๊ฐ€์žฅ ํ”ํ•˜๋‹ค.

  2. OOM์€ "์ตœ์†Œ 2ํšŒ ์‹คํ–‰"์ด ๋ช…์‹œ๋˜์–ด ์žˆ๋‹ค(E1-3). MEMORY_LIMIT ๋ณ€๊ฒฝ ์ „ 1ํšŒ, ๋ณ€๊ฒฝ ํ›„ 1ํšŒ์˜ ์‹คํ–‰ ๋กœ๊ทธ๊ฐ€ ๊ฐ๊ฐ ๋‚จ์•„ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋ณ€๊ฒฝ ํ›„ ํ•œ ๋ฒˆ๋งŒ ๋Œ๋ฆฌ๊ณ  "์ „์—๋Š” ์ด๋žฌ๋‹ค"๊ณ  ์„œ์ˆ ๋งŒ ํ•˜๋ฉด ์ฆ๊ฑฐ ์š”๊ฑด ๋ฏธ๋‹ฌ์ด๋‹ค.

  3. CPU ์ผ€์ด์Šค์˜ ์„ฑ๊ณต ์กฐ๊ฑด์€ "์ข…๋ฃŒ๋จ"์ด ์•„๋‹ˆ๋‹ค. R3-3์€ "ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ ์—ฌ๋ถ€ ๋˜๋Š” ์ƒ์กด ์‹œ๊ฐ„ ๋ณ€ํ™”"๋ฅผ ์š”๊ตฌํ•œ๋‹ค. ์ž„๊ณ„์น˜๋ฅผ ์˜ฌ๋ ค์„œ ์•„์˜ˆ ์ข…๋ฃŒ๋˜์ง€ ์•Š๋Š” ๊ฒฐ๊ณผ๋„ ์ •๋‹นํ•œ After ๊ฒฐ๊ณผ๋‹ค. ๋ฐ˜๋Œ€๋กœ "After์—๋„ ๋˜‘๊ฐ™์ด ์ฃฝ์—ˆ๋‹ค"๋กœ ๋๋‚ด๋ฉด ๋น„๊ต๊ฐ€ ์„ฑ๋ฆฝํ•˜์ง€ ์•Š๋Š”๋‹ค.

  4. Deadlock์—๋Š” ์ข…๋ฃŒ ๋กœ๊ทธ๊ฐ€ ์—†๋‹ค. OOM/CPU์™€ ๋‹ฌ๋ฆฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ด์•„ ์žˆ์œผ๋ฏ€๋กœ SELF-TERMINATED๋ฅ˜ ๋ฌธ์ž์—ด์„ ์ฐพ์•„ ํ—ค๋งค๋ฉด ์•ˆ ๋œ๋‹ค. ์ฆ๊ฑฐ๋Š” "PID๋Š” ์žˆ๋Š”๋ฐ(E3-1) ์ˆ˜์น˜๊ฐ€ ๋ฉˆ์ท„๊ณ (E3-2) ๋กœ๊ทธ๊ฐ€ ๊ทธ ์ง€์ ์—์„œ ๋Š๊ฒผ๋‹ค(E3-3)" ๋Š” ๋ถ€์žฌ(ไธๅœจ)์˜ ์ฆ๋ช…์ด๋‹ค.

  5. Deadlock์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•„๋‹ˆ๋ผ ์Šค๋ ˆ๋“œ ๋‹จ์œ„๋กœ ๋ด์•ผ ํ•œ๋‹ค. ps -ef๋‚˜ ๊ธฐ๋ณธ top๋งŒ์œผ๋กœ๋Š” "CPU 0%"๊นŒ์ง€๋ฐ–์— ๋ชป ๋ณธ๋‹ค. E3-2๊ฐ€ ๊ตณ์ด top -H ๋˜๋Š” ps -L ์„ ์ง€์ •ํ•œ ์ด์œ ๊ฐ€ ์—ฌ๊ธฐ ์žˆ๋‹ค โ€” ์Šค๋ ˆ๋“œ๋ณ„๋กœ ๊ฐ๊ฐ ๋ฉˆ์ถฐ ์žˆ์Œ์„ ๋ณด์—ฌ์•ผ ์ˆœํ™˜ ๋Œ€๊ธฐ ์ถ”๋ก (E3-4)์˜ ๊ทผ๊ฑฐ๊ฐ€ ๋œ๋‹ค.

  6. ์‚ฌ์ „ ์ค€๋น„ 11๊ฐœ ์กฐ๊ฑด์€ "์ถฉ์กฑ๋˜์ง€ ์•Š์œผ๋ฉด ๋ถ€ํŠธ ์‹œํ€€์Šค์—์„œ ์ž๋™์œผ๋กœ ์‹คํŒจ ์ฒ˜๋ฆฌ๋œ๋‹ค". ์ฆ‰ ์‹คํ–‰์ด ์•ˆ ๋˜๋Š” ๊ฒƒ์ด ๋ฒ„๊ทธ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ช…์„ธ๋Œ€๋กœ์˜ ๋™์ž‘์ด๋‹ค. AGENT_PORT๋Š” 15034 ๊ณ ์ •์ด๋ผ ํฌํŠธ๋ฅผ ๋ฐ”๊ฟ” ํšŒํ”ผํ•  ์ˆ˜ ์—†๊ณ , secret.key๋Š” ํŒŒ์ผ ์กด์žฌ๋ฟ ์•„๋‹ˆ๋ผ ๋‚ด์šฉ์ด ์ •ํ™•ํžˆ agent_api_key_test ์—ฌ์•ผ ํ•œ๋‹ค. AGENT_LOG_DIR๋Š” ์กด์žฌ๋งŒ์œผ๋กœ ๋ถ€์กฑํ•˜๊ณ  ์“ฐ๊ธฐ ๊ถŒํ•œ๊นŒ์ง€ ํ•„์š”ํ•˜๋‹ค.

  7. MEMORY_LIMIT๋Š” 50512, CPU_MAX_OCCUPY๋Š” 10100 ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚  ์ˆ˜ ์—†๋‹ค. ์˜ˆ์‹œ ๋ฆฌํฌํŠธ๊ฐ€ "256MB โ†’ 512MB"๋กœ ์˜ฌ๋ฆฌ๋Š” ์ด์œ ๊ฐ€ ์ด๊ฒƒ์ด๋‹ค. 512๋ฅผ ๋„˜๊ธฐ๋Š” After ์‹คํ—˜์€ ์• ์ดˆ์— ๋ถ€ํŠธ์—์„œ ๋ง‰ํžŒ๋‹ค.

  8. ๋ฐ”์ด๋„ˆ๋ฆฌ ๋””์ปดํŒŒ์ผยท๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋ง์€ ๋ช…์‹œ์  ๊ธˆ์ง€๋‹ค. ์ฝ”๋“œ๋ฅผ ์—ด์–ด ์›์ธ์„ ํ™•์ธํ•˜๊ณ  ๊ทธ๊ฒƒ์„ "๋ถ„์„"์œผ๋กœ ์ œ์ถœํ•˜๋ฉด ์ œ์•ฝ ์œ„๋ฐ˜์ด๋‹ค. ๋ชจ๋“  ๊ทผ๊ฑฐ๋Š” ๊ด€์ œ ๋ฐ์ดํ„ฐยท๋กœ๊ทธยทํ‘œ์ค€ ๋ฆฌ๋ˆ…์Šค ๋ช…๋ น์–ด ์ถœ๋ ฅ์—์„œ ๋‚˜์™€์•ผ ํ•œ๋‹ค.

๐Ÿ’ก (ํ•ด์„ค) ํŒŒ์ผ๋ช… ์ฃผ์˜: ์ œ๊ณต ๋ฐ์ดํ„ฐํŒŒ์ผ์€ agent-app-leak.zip (๋ฐ”์ด๋„ˆ๋ฆฌ agent-app-leak-x86 / agent-app-leak-arm64)์ด์ง€๋งŒ, ์š”๊ตฌ์‚ฌํ•ญ ๋ณธ๋ฌธ๊ณผ ์˜ˆ์‹œ ๋กœ๊ทธ์—์„œ ํ”„๋กœ์„ธ์Šค๋Š” agent-leak-app ์œผ๋กœ ํ‘œ๊ธฐ๋œ๋‹ค. ์›๋ฌธ์— ๋‘ ํ‘œ๊ธฐ๊ฐ€ ์„ž์—ฌ ์žˆ์œผ๋ฏ€๋กœ, ๋ฆฌํฌํŠธ์—์„œ๋Š” ์‹ค์ œ ์‹คํ–‰ ํ™˜๊ฒฝ์—์„œ ps ์— ์ฐํžˆ๋Š” ์ด๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ ์“ฐ๊ณ  ํ•„์š”ํ•˜๋ฉด ๊ฐ์ฃผ๋กœ ๋ฐํ˜€๋‘๋Š” ํŽธ์ด ์•ˆ์ „ํ•˜๋‹ค. (์ด ๋ถˆ์ผ์น˜๋Š” PDF ์›๋ฌธ ๊ทธ๋Œ€๋กœ์ด๋ฉฐ, ์–ด๋А ์ชฝ์ด ์ •๋‹ต์ธ์ง€ PDF๋Š” ๋ช…์‹œํ•˜์ง€ ์•Š๋Š”๋‹ค.)

0.10 โœ… ๊ณผ์ œ ์ˆ˜ํ–‰ ์ ๊ฒ€ (๋ช…์„ธ ๋Œ€์กฐ)

์ ๊ฒ€ ๋ฐฉ์‹: ์ €์žฅ์†Œ์˜ ์‹ค์ œ ์†Œ์Šคยท์ฆ๊ฑฐ ํŒŒ์ผ์„ ๋ช…์„ธ์˜ ์š”๊ตฌ์‚ฌํ•ญ ID ์™€ 1:1 ๋Œ€์กฐ. ํŒ์ • ๊ทผ๊ฑฐ๋Š” ์ €์žฅ์†Œ ๋ฃจํŠธ ๊ธฐ์ค€ ์ƒ๋Œ€๊ฒฝ๋กœ๋กœ ๋ช…์‹œ. README ์˜ ์ฃผ์žฅ์ด ์•„๋‹ˆ๋ผ evidence/ ์›๋ณธ๊ณผ src/ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ง์ ‘ ์—ด์–ด ํ™•์ธํ–ˆ๋‹ค.

์ข…ํ•ฉ ํŒ์ •: ์ถฉ์กฑ โ€” ํ•„์ˆ˜ 25๊ฐœ ์ค‘ ์ถฉ์กฑ 24 / ๋ถ€๋ถ„ 1 / ๋ฏธ์ถฉ์กฑ 0 / ๋กœ์ปฌ๊ฒ€์ฆ๋ถˆ๊ฐ€ 0 (๋ณด๋„ˆ์Šค 4๊ฐœ: ์ถฉ์กฑ 4 / ๋ถ€๋ถ„ 0 / ๋ฏธ์ถฉ์กฑ 0)

ํŠน๊ธฐ ์‚ฌํ•ญ: evidence/ ์˜ ๋กœ๊ทธ๋Š” ์‹ค์ธก ์‚ฐ์ถœ๋ฌผ์ด๋‹ค. evidence/oom_monitor.log:8 ์ด ๊ธฐ๋กํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํ•ด์‹œ md5 0fb02e12554328b32e6e1adac861630e ๊ฐ€ ์ €์žฅ์†Œ์˜ bin/agent-leak-app ์‹ค์ œ ํ•ด์‹œ์™€ ์ผ์น˜ํ•จ์„ ํ™•์ธํ–ˆ๋‹ค(๋ณธ ์ ๊ฒ€์—์„œ md5sum ์‹คํ–‰). ์ฆ‰ ๋ฆฌํฌํŠธ๊ฐ€ ์ธ์šฉํ•œ PIDยทํƒ€์ž„์Šคํƒฌํ”„ยท์ˆ˜์น˜๋Š” ์ด ์ €์žฅ์†Œ์— ๋“ค์–ด ์žˆ๋Š” ๋ฐ”๋กœ ๊ทธ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋Œ๋ ค ์–ป์€ ๊ฐ’์ด๋‹ค.


ํ•„์ˆ˜ ์š”๊ตฌ ์‚ฌํ•ญ

ID ์š”๊ตฌ์‚ฌํ•ญ (์š”์•ฝ) ํŒ์ • ๊ทผ๊ฑฐ / ๋น„๊ณ 
R1 ์‚ฌ์ „ ์ค€๋น„ 11๊ฐœ ์กฐ๊ฑด ์ถฉ์กฑ ์ƒํƒœ๋กœ ์•ฑ ๋ถ€ํŒ… โœ… ์ถฉ์กฑ evidence/oom_app.log:34-49 โ€” ๋ถ€ํŠธ ์‹œํ€€์Šค [1/6]~[6/6] ์ „๋ถ€ [OK] + All Boot Checks Passed! / Agent READY. ๋™์ผ ๋ธ”๋ก์ด evidence/cpu_app.logยทevidence/deadlock_app.log ์—๋„ ์žˆ์Œ
R1-1 root ์•„๋‹Œ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋กœ ์‹คํ–‰ โœ… ์ถฉ์กฑ evidence/oom_app.log:36 โ€” Running as service user 'ashofrondol' (uid=1000). ๊ณ„์ • ์ƒ์„ฑ์€ src/03_users_and_groups.sh
R1-2 AGENT_HOME ์„ค์ • โœ… ์ถฉ์กฑ src/05_env_and_keyfile.sh:34 / ์ˆ˜์ง‘ ํ™˜๊ฒฝ์€ evidence/oom_monitor.log:11 ํ—ค๋”์— ๋ช…์‹œ
R1-3 AGENT_PORT=15034 ๊ณ ์ • โœ… ์ถฉ์กฑ src/05_env_and_keyfile.sh:35, src/monitor.sh:13, ๋ถ€ํŠธ ๋กœ๊ทธ evidence/oom_app.log:41-42 (Port 15034 is available)
R1-4 AGENT_UPLOAD_DIR ์„ค์ • + ๋””๋ ‰ํ„ฐ๋ฆฌ ์ƒ์„ฑ โœ… ์ถฉ์กฑ src/05_env_and_keyfile.sh:36 + ์‹ค์ œ ์ƒ์„ฑ src/04_directories_and_acl.sh:29
R1-5 AGENT_KEY_PATH=$AGENT_HOME/api_keys (๊ฒฝ๋กœ ์กด์žฌ) โœ… ์ถฉ์กฑ src/05_env_and_keyfile.sh:37 + src/04_directories_and_acl.sh:30. B1-1 ์˜ "ํŒŒ์ผ ๊ฒฝ๋กœ" โ†’ B1-2 ์˜ "๋””๋ ‰ํ„ฐ๋ฆฌ" ๋ณ€๊ฒฝ์„ ์Šคํฌ๋ฆฝํŠธ ์ฃผ์„(src/05_env_and_keyfile.sh:7-9)์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ์ฒ˜๋ฆฌ
R1-6 AGENT_LOG_DIR ์กด์žฌ + ์“ฐ๊ธฐ ๊ถŒํ•œ โœ… ์ถฉ์กฑ src/04_directories_and_acl.sh:33,44,56-57 (770 + default ACL), ๋ถ€ํŠธ ๋กœ๊ทธ evidence/oom_app.log:44-45 (Log directory is writable: โ€ฆ). src/monitor.sh:145-152 ๋„ ์กด์žฌยท์“ฐ๊ธฐ ๊ถŒํ•œ์„ ๋”ฐ๋กœ ๊ฒ€์‚ฌ
R1-7 MEMORY_LIMIT ์ •์ˆ˜ 50~512 โœ… ์ถฉ์กฑ src/05_env_and_keyfile.sh:44 (512). ์‹คํ—˜์— ์“ด ๊ฐ’ 100 / 256 / 512 ์ „๋ถ€ ๋ฒ”์œ„ ๋‚ด โ€” evidence/oom_monitor.log:311-315
R1-8 CPU_MAX_OCCUPY ์ •์ˆ˜ 10~100 โœ… ์ถฉ์กฑ src/05_env_and_keyfile.sh:45 (10). ์‹คํ—˜๊ฐ’ 95/80/60/50/10 ์ „๋ถ€ ๋ฒ”์œ„ ๋‚ด โ€” evidence/cpu_monitor.log:286-292
R1-9 MULTI_THREAD_ENABLE true/false โœ… ์ถฉ์กฑ src/05_env_and_keyfile.sh:46, Before=true / After=false ์–‘์ชฝ ์‹ค์ธก โ€” evidence/deadlock_monitor.log:274-302
R1-10 secret.key ๋‚ด์šฉ = agent_api_key_test โœ… ์ถฉ์กฑ src/05_env_and_keyfile.sh:52-57 (์ƒ์„ฑยท๊ถŒํ•œ 640), ๋ถ€ํŠธ ๋กœ๊ทธ evidence/oom_app.log:39-40 โ€” Verified 'secret.key' with correct key string.
R1-11 0.0.0.0:15034 ๋ฐ”์ธ๋”ฉ ๊ฐ€๋Šฅ ๐ŸŸก ๋ถ€๋ถ„ ์ถฉ์กฑ ๊ฐ„์ ‘ ๊ทผ๊ฑฐ๋Š” ์ถฉ๋ถ„ํ•˜๋‹ค โ€” ๋ถ€ํŠธ [4/6] Checking Port Availability [OK](evidence/oom_app.log:41-42), Agent listening at port 15034(evidence/oom_app.log:51), monitor.sh ์˜ LISTEN ๊ฒ€์‚ฌ ํ†ต๊ณผ(evidence/oom_monitor.log:45, ๊ตฌํ˜„์€ src/monitor.sh:57-67), ๋ฐฉํ™”๋ฒฝ ์˜ˆ์™ธ src/02_firewall_allowlist.sh:33. ๋‹ค๋งŒ ๋ฐ”์ธ๋”ฉ ์ฃผ์†Œ๊ฐ€ 0.0.0.0 ์ธ์ง€ 127.0.0.1 ์ธ์ง€ ๊ตฌ๋ถ„ํ•ด ์ฃผ๋Š” ์บก์ฒ˜(ss -tlnp ๋“ฑ)๊ฐ€ evidence ์ „์ฒด์— 0๊ฑด์ด๊ณ , ๋‚จ์•„ ์žˆ๋Š” ์ ‘์† ์‹œ๋„๋Š” curl http://127.0.0.1:15034 ๋ฟ์ด๋‹ค(evidence/deadlock_ps_top.txt:81-90). [2026-09-21 ๋ณด์™„] src/experiments/lib_experiment.sh ์˜ _snapshot_bind_addr() ๊ฐ€ ์•ฑ ๊ธฐ๋™ ์งํ›„ ss -tlnp | grep 15034 ๋ฅผ *_ps_top.txt ์— ๋‚จ๊ธฐ๋„๋ก ๋ฐฐ์„ ๋๋‹ค. ์ œ์ถœ๋ณธ evidence/ ๋Š” ๊ทธ ์ด์ „ ์‹คํ–‰์ด๋ผ ํŒ์ •์€ ๊ทธ๋Œ€๋กœ ๐ŸŸก ์ด๊ณ , ๋‹ค์Œ ์‹คํ–‰๋ถ€ํ„ฐ evidence_live/*_ps_top.txt ์— ์ฃผ์†Œ ์ฆ๊ฑฐ๊ฐ€ ์ž๋™์œผ๋กœ ์Œ“์ธ๋‹ค
R2 ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์›์ธ ๊ทœ๋ช… ๋ฐ ๋ฆฌํฌํŒ… โœ… ์ถฉ์กฑ reports/01_oom_report.md 361์ค„ โ€” Description/Evidence/RCA/Workaround 4๋‹จ ์™„๋น„
R2-1 monitor.sh ๋กœ ๋Œ€์ƒ ํ”„๋กœ์„ธ์Šค ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ์ฆ๊ฐ€ ๊ด€์ธก โœ… ์ถฉ์กฑ evidence/oom_monitor.log:155-164 โ€” monitor.sh ๊ฐ€ ์ง์ ‘ append ํ•œ ๊ด€์ œ ๋ผ์ธ PROC_RSS:42.7MB โ†’ 242.7MB(27์ดˆ). ๊ณ ํ•ด์ƒ๋„ ๊ณ„์—ด 17.7 โ†’ 267.7MB ๋Š” evidence/oom_monitor.log:227-236. SYS_MEM(37.4โ†’37.8%) ์ด ์•„๋‹ˆ๋ผ PROC_RSS ๊ฐ€ ๊ทผ๊ฑฐ์ž„์„ ๋ช…์‹œ(reports/01_oom_report.md:33-43) โ€” ๋ช…์„ธ ํ•ด์„ค์ด ๊ฒฝ๊ณ ํ•œ ํ•จ์ •์„ ์ •๋ฉด์œผ๋กœ ๋‹ค๋ฃธ. ์ˆ˜์ง‘ ๋ช…๋ น๋„ ํ—ค๋”์— ๋ณด์กด(evidence/oom_monitor.log:18-24, while :; do bash src/monitor.sh; sleep 3; done โ€” ์Šคํฌ๋ฆฝํŠธ ๋ฌด์ˆ˜์ •)
R2-2 MemoryGuard ๊ฐ•์ œ ์ข…๋ฃŒ ํ•ต์‹ฌ ๋กœ๊ทธ ์‹๋ณ„ โœ… ์ถฉ์กฑ evidence/oom_app.log:74-75 โ€” [CRITICAL] [MemoryGuard] Memory limit exceeded (275MB >= 256MB) + Self-terminating process 2738539. ๋ฆฌํฌํŠธ๋Š” PDF ์˜ˆ์‹œ์˜ SELF-TERMINATED ๋ฐฐ๋„ˆ๊ฐ€ ์ด ๋ฐ”์ด๋„ˆ๋ฆฌ์— ์—†์Œ์„ ์‹ค์ธก์œผ๋กœ ์ •์ •(reports/01_oom_report.md:27) โ€” ์˜ˆ์‹œ ๋ฌธ์ž์—ด ๋ฒ ๊ปด ์“ฐ๊ธฐ๋ฅผ ํ•˜์ง€ ์•Š์•˜๋‹ค
R2-3 MEMORY_LIMIT ์กฐ์ • โ†’ ๋” ์˜ค๋ž˜ ์ƒ์กด, Before & After โœ… ์ถฉ์กฑ Before 256 (09:02:36~, 0m34s ์‚ฌ๋ง) / After 512 (09:03:11~, 3m00s ์ƒ์กด) ๊ฐ๊ฐ ๋ณ„๋„ PIDยทํƒ€์ž„์Šคํƒฌํ”„๋กœ 2ํšŒ ์‹คํ–‰ โ€” evidence/oom_monitor.log:227-237 vs 239-294. ์—ฌ๊ธฐ์— "512 ๋Š” ๋” ๋Šฆ๊ฒŒ ์ฃฝ๋Š” ๊ฐ’์ด ์•„๋‹ˆ๋ผ ์žฅ์• ๊ฐ€ ์žฌํ˜„๋˜์ง€ ์•Š๋Š” ๊ฐ’"์ž„์„ ์Šค์Šค๋กœ ๊ฐ„ํŒŒํ•˜๊ณ , 100MB(13์ดˆ) โ†’ 256MB(34์ดˆ) ๋Œ€์กฐ๋กœ "์ƒ์กด ์—ฐ์žฅ"์„ ๋ณ„๋„ ์ž…์ฆ(evidence/oom_monitor.log:307-319, ์›๋ณธ ์ข…๋ฃŒ ์š”์•ฝ :337-356). ๋ช…์„ธ๊ฐ€ ์š”๊ตฌํ•œ ๊ฒƒ๋ณด๋‹ค ํ•œ ๋‹จ๊ณ„ ๊นŠ๋‹ค
R3 CPU ๊ณผ์ ์œ  ๋ถ„์„ ๋ฐ ๋ฆฌํฌํŒ… โœ… ์ถฉ์กฑ reports/02_cpu_report.md 352์ค„ โ€” 4๋‹จ ๊ตฌ์กฐ ์™„๋น„
R3-1 ์‹œ์Šคํ…œ ์ „์ฒด๊ฐ€ ์•„๋‹Œ ํŠน์ • ํ”„๋กœ์„ธ์Šค์˜ CPU ์ƒ์Šน ๊ตฌ๊ฐ„ ์‹๋ณ„ โœ… ์ถฉ์กฑ evidence/cpu_top_ps.txt:303-343 โ€” /proc/<pid>/stat ์˜ utime+stime 1์ดˆ ๋ธํƒ€๋กœ ์žฐ PROC_%CPU(0โ†’5%) ์™€ HOST_%CPU(๋ฌด์ถ”์„ธ)๋ฅผ ๊ฐ™์€ ํ‘œ์—์„œ ๋Œ€์กฐ. ์•ฑ ์ž๊ธฐ๋ณด๊ณ  Current Load 5.00โ†’53.72% ์ƒ์Šน ๊ตฌ๊ฐ„์€ evidence/cpu_app.log:67-78. ํ˜ธ์ŠคํŠธ ์ƒ์œ„ ํ”„๋กœ์„ธ์Šค ๋ชฉ๋ก์— ์•ฑ์ด ์—†์Œ๋„ ๊ต์ฐจ ํ™•์ธ(evidence/cpu_top_ps.txt:349-379). ps %CPU ๊ฐ€ ๋ˆ„์  ํ‰๊ท ์ด๋ผ ์ŠคํŒŒ์ดํฌ๋ฅผ ๋ชป ์žก๋Š”๋‹ค๋Š” ํ•œ๊ณ„๋ฅผ ์งš๊ณ  ๋ณ„๋„ ๊ณ„์ธก์„ ๋ถ™์ธ ์ ์ด ์ •ํ™•ํ•˜๋‹ค(reports/02_cpu_report.md:43)
R3-2 ์˜ค๋ฅ˜๊ฐ€ ์•„๋‹Œ ๋ณดํ˜ธ ์ •์ฑ…์— ์˜ํ•œ ์ข…๋ฃŒ์ž„์„ ์ž…์ฆ โœ… ์ถฉ์กฑ evidence/cpu_app.log:78 โ€” [CRITICAL] [CpuWorker] CPU Threshold Violated! (53.72โ€ฆ%). ์ข…๋ฃŒ ์ฝ”๋“œ 143(=128+15, SIGTERM) ์˜ raw ์บก์ฒ˜๋Š” ํ˜•์ œ ์‹คํ–‰์— ์žˆ์Œ(evidence/cpu_monitor.log:309, :325). SIGTERM(์ •์ค‘ํ•œ ์ข…๋ฃŒ) vs SIGKILL(OOM, 137) ๋Œ€๋น„๋กœ "๋ณดํ˜ธ ์กฐ์น˜"๋ฅผ ๋…ผ์ฆ(reports/02_cpu_report.md:256). PDF ์˜ˆ์‹œ์˜ WATCHDOG โ€ฆ EMERGENCY ABORT ๋ฌธ์ž์—ด์ด ์ด ๋ฐ”์ด๋„ˆ๋ฆฌ์— ์—†์Œ์„ ์‹ค์ธก ์ •์ •(reports/02_cpu_report.md:27)
R3-3 CPU_MAX_OCCUPY ์กฐ์ • โ†’ ์ข…๋ฃŒ ์—ฌ๋ถ€/์ƒ์กด ์‹œ๊ฐ„ ๋ณ€ํ™”, Before & After โœ… ์ถฉ์กฑ Before 80 (0m30s ์‚ฌ๋ง) / After 10 (3m00s ์ƒ์กด) โ€” evidence/cpu_monitor.log:205-214 vs :216-271. ๋‚˜์•„๊ฐ€ 5๊ฐœ ๊ฐ’ ์Šค์œ•(95/80/60/50/10)์œผ๋กœ "์ƒํ–ฅ์€ ํšจ๊ณผ 0, ํ•˜ํ–ฅ์ด ์œ ํšจ" ๋ผ๋Š” ๋ฐ˜์ง๊ด€์  ๊ฒฐ๋ก ์„ ์‹ค์ธก์œผ๋กœ ๋’ค์ง‘๊ณ  ์‹คํ—˜ ์Šคํฌ๋ฆฝํŠธ๊นŒ์ง€ ๊ณ ์ณค๋‹ค(evidence/cpu_monitor.log:286-300, src/experiments/02_cpu.sh:29-41). ๋ช…์„ธ ํ•จ์ • 3("After ์—๋„ ๋˜‘๊ฐ™์ด ์ฃฝ์—ˆ๋‹ค๋กœ ๋๋‚ด๋ฉด ์•ˆ ๋œ๋‹ค")์„ ํšŒํ”ผ
R4 ๊ต์ฐฉ์ƒํƒœ ์ง„๋‹จ ๋ฐ ๋ฆฌํฌํŒ… โœ… ์ถฉ์กฑ reports/03_deadlock_report.md 321์ค„ โ€” 4๋‹จ ๊ตฌ์กฐ ์™„๋น„
R4-1 PID ์กด์žฌ + CPU/๋ฉ”๋ชจ๋ฆฌยท๋กœ๊ทธ ์ •์ง€ = ๋ฌด์‘๋‹ต ์‹๋ณ„ โœ… ์ถฉ์กฑ evidence/deadlock_ps_top.txt:56-61 (ps -ef/ps -p PID ์ƒ์กด, STAT=SNl, ELAPSED 01:16, TIME 00:00:00), ๊ด€์ œ PROC_RSS 17.7MB 76์ดˆ ๋ถˆ๋ณ€ + PROC_CPU 3.2โ†’0.0% ๊ฐ์‡ (evidence/deadlock_monitor.log:192-215). 30s/120s/210s ๋ฐ˜๋ณต ์บก์ฒ˜์—์„œ VmRSS 18148kBยทvoluntary_ctxt_switches 14ยท๋กœ๊ทธ ํŒŒ์ผ 1517 bytesยทmtime ์ด ๋‚˜๋…ธ์ดˆ๊นŒ์ง€ ๋™์ผ(evidence/deadlock_ps_top.txt:143-219) โ€” "๋А๋ฆฐ ๊ฒƒ"๊ณผ "๋ฉˆ์ถ˜ ๊ฒƒ"์„ ๊ฐ€๋ฅด๋Š” ๊ฒฐ์ •์  ์ง€ํ‘œ
R4-2 ๋งˆ์ง€๋ง‰ ๋กœ๊ทธ๋กœ ์Šค๋ ˆ๋“œ ๊ฐ„ ์ˆœํ™˜ ๋Œ€๊ธฐ๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ฆ๋ช… โœ… ์ถฉ์กฑ evidence/deadlock_app.log:82-94 โ€” Worker-Thread-1 LOCK ACQUIRED [Shared_Memory_A] / Worker-Thread-2 LOCK ACQUIRED [Socket_Pool_B] โ†’ ๊ฐ๊ฐ ์ƒ๋Œ€ ๋ฝ์— WAITING โ€ฆ (Status: BLOCKED). ์˜์กด ๊ทธ๋ž˜ํ”„์™€ 4๋Œ€ ์กฐ๊ฑด ๋Œ€์กฐํ‘œ๋Š” reports/03_deadlock_report.md:193-218. ์ปค๋„ ๋ ˆ๋ฒจ ๋’ท๋ฐ›์นจ์œผ๋กœ ps -L -o wchan ์˜ ์ „ ์Šค๋ ˆ๋“œ futex_wait_queue(evidence/deadlock_ps_top.txt:75-79) โ€” ๋ช…์„ธ ํ•จ์ • 5(์Šค๋ ˆ๋“œ ๋‹จ์œ„ ๊ด€์ฐฐ)๋ฅผ ์ •ํ™•ํžˆ ์ถฉ์กฑ
R4-3 MULTI_THREAD_ENABLE ์žฌํ˜„/ํšŒํ”ผ ๋น„๊ต โœ… ์ถฉ์กฑ Before(true)=๋ถ€ํŒ… 9์ดˆ ํ›„ freeze / After(false)=3m00s ์ •์ƒ โ€” ๋น„๊ตํ‘œ evidence/deadlock_monitor.log:274-302, After ์‹ค์ธก ์Šค๋ƒ…์ƒท evidence/deadlock_ps_top.txt:102-122(WCHAN ์ด futex_wait_queue1 + do_select2 ๋กœ ๊ฐˆ๋ฆฌ๊ณ  TIME+ ๊ฐ€ ์ „์ง„). "์Šค๋ ˆ๋“œ ์ˆ˜๋Š” ๊ฐ™๊ณ  ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅด๋‹ค"๋Š” ํŒ๋ณ„ ๊ธฐ์ค€์„ ๋ช…์‹œ(reports/03_deadlock_report.md:292)
R4-4 (๊ถŒ์žฅ) ๋ฐ๋“œ๋ฝ 4๋Œ€ ์กฐ๊ฑด ยท ์‹์‚ฌํ•˜๋Š” ์ฒ ํ•™์ž ํ•™์Šต โœ… ์ถฉ์กฑ docs/md/์ด๋ก _์ง€์‹.md:737-866(ยง5 ๋™์‹œ์„ฑยท๋ฝยท๋ฐ๋“œ๋ฝ, :797 ์‹์‚ฌํ•˜๋Š” ์ฒ ํ•™์ž), docs/md/์šฉ์–ด์ง‘.md:697-699, ๋ฆฌํฌํŠธ ๋ณธ๋ฌธ์˜ 4๋Œ€ ์กฐ๊ฑด ์„ฑ๋ฆฝ ๊ทผ๊ฑฐํ‘œ reports/03_deadlock_report.md:209-218. ๊ถŒ์žฅ ํ•ญ๋ชฉ์ด์ง€๋งŒ ์‹ค์ œ ๋ฆฌํฌํŠธ ๋…ผ์ฆ์— ๋…น์•„ ์žˆ๋‹ค

์ œ์ถœ๋ฌผ ยท ์ฆ๊ฑฐ ์ตœ์†Œ ์š”๊ฑด (D1ยทD2 / E1~E3 โ€” ๋ช…์„ธ 0.2 ์ ˆ)

ID ์š”๊ตฌ์‚ฌํ•ญ (์š”์•ฝ) ํŒ์ • ๊ทผ๊ฑฐ / ๋น„๊ณ 
D1 3๊ฐ€์ง€ ์žฅ์•  ๊ฐ๊ฐ ๋…๋ฆฝ๋œ Issue ๋ฆฌํฌํŠธ โœ… ์ถฉ์กฑ reports/01_oom_report.md / reports/02_cpu_report.md / reports/03_deadlock_report.md โ€” ํ•œ ๋ฌธ์„œ์— ๋ชฐ์•„์“ฐ์ง€ ์•Š์Œ(๋ช…์„ธ ํ•จ์ • 1 ํšŒํ”ผ)
D1-1~D1-5 ํ˜„์ƒ / ์žฌํ˜„ยท์ฆ๊ฑฐ / ๊ทผ๋ณธ ์›์ธ / ์กฐ์น˜ / ๊ฒฐ๊ณผ ํ™•์ธ โœ… ์ถฉ์กฑ ์„ธ ๋ฆฌํฌํŠธ ๋ชจ๋‘ ## 1. Description ## 2. Evidence & Logs ## 3. Root Cause Analysis ## 4. Workaround & Verification + Before/After ํ‘œ๋ฅผ ๊ฐ€์ง (reports/01_oom_report.md:275-300, reports/02_cpu_report.md:278-291, reports/03_deadlock_report.md:248-267)
D2 ๋งˆํฌ๋‹ค์šด ํ…œํ”Œ๋ฆฟ ๊ตฌ์กฐ ์ค€์ˆ˜ โœ… ์ถฉ์กฑ ์ œ๋ชฉ์ด [Bug] {์žฅ์•  ์œ ํ˜•} - {ํ•œ ์ค„ ์š”์•ฝ} ํ˜•์‹(reports/01_oom_report.md:1 ๋“ฑ), .github/ISSUE_TEMPLATE/bug_report.mdยทanalysis_report.md ๋„ ๋ณ„๋„ ์ œ๊ณต
E1-1 monitor.sh ๊ฒฐ๊ณผ(๋ฉ”๋ชจ๋ฆฌ ์ƒ์Šน ์ˆ˜์น˜) โœ… ์ถฉ์กฑ evidence/oom_monitor.log:155-164
E1-2 ์ข…๋ฃŒ ์ง์ „/์งํ›„ ์‹คํ–‰ ๋กœ๊ทธ โœ… ์ถฉ์กฑ evidence/oom_app.log:63-75
E1-3 MEMORY_LIMIT ๋ณ€๊ฒฝ ์ „ํ›„ ์ตœ์†Œ 2ํšŒ ์‹คํ–‰ โœ… ์ถฉ์กฑ ํŒŒ์ดํ”„๋ผ์ธ Before/After 2ํšŒ(PID 2738539 / 2739609, evidence/oom_monitor.log:226-294) + ๋…๋ฆฝ probe 4ํšŒ(evidence/oom_monitor.log:337-367). ๋ช…์„ธ์—์„œ ์œ ์ผํ•˜๊ฒŒ ํšŸ์ˆ˜๋ฅผ ๋ชป ๋ฐ•์€ ์กฐ๊ฑด์ธ๋ฐ ์—ฌ์œ  ์žˆ๊ฒŒ ์ดˆ๊ณผ
E2-1 CPU ๊ธ‰์ƒ์Šน ๊ตฌ๊ฐ„ top/ps/๊ด€์ œ ์บก์ฒ˜ ๐ŸŸก ๋ถ€๋ถ„ ์ถฉ์กฑ top/ps ์บก์ฒ˜๋Š” ์žˆ์œผ๋‚˜(evidence/cpu_top_ps.txt:43-55, :71-87) ๊ฑฐ๊ธฐ์— ์ฐํžŒ ๊ฐ’์€ %CPU 0.0 ยท TIME+ 0:00.04โ†’0:00.28 ยท load average 0.23โ†’0.28 ๋กœ "๊ธ‰์ƒ์Šน"์ด ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค. ์‹ค์ œ ์ƒ์Šน์€ /proc/<pid>/stat ๋ธํƒ€ํ‘œ(์ตœ๋Œ€ 5%)์™€ ์•ฑ ์ž๊ธฐ๋ณด๊ณ  Current Load(53.72%)์—์„œ๋งŒ ๊ด€์ธก๋œ๋‹ค. ๋ฆฌํฌํŠธ๊ฐ€ ์ด ํ•œ๊ณ„๋ฅผ ์ˆจ๊ธฐ์ง€ ์•Š๊ณ  ยง2-3 ์— ๊ทธ๋Œ€๋กœ ์ ์€ ์ ์€ ๋†’์ด ํ‰๊ฐ€ํ•˜๋‚˜(reports/02_cpu_report.md:148-154), ์š”๊ฑด ๋ฌธ๊ตฌ๊ฐ€ ์š”๊ตฌํ•œ ํ˜•ํƒœ์˜ ์บก์ฒ˜๋Š” ์•„๋‹ˆ๋‹ค
E2-2 ์ข…๋ฃŒ ๋กœ๊ทธ โœ… ์ถฉ์กฑ evidence/cpu_app.log:78 (WATCHDOG ๋ฌธ์ž์—ด ๋Œ€์‹  ์‹ค์ œ ์ถœ๋ ฅ์ธ [CpuWorker] CPU Threshold Violated!. ๋ช…์„ธ๊ฐ€ "โ€ฆ๋“ฑ"์œผ๋กœ ์—ด์–ด ๋‘” ๋ฒ”์œ„)
E2-3 CPU_MAX_OCCUPY ๋ณ€๊ฒฝ ์ „ํ›„ ๋น„๊ต โœ… ์ถฉ์กฑ evidence/cpu_monitor.log:286-292 (5๊ฐœ ๊ฐ’ ์Šค์œ•)
E3-1 PID ์กด์žฌ ์ฆ๊ฑฐ โœ… ์ถฉ์กฑ evidence/deadlock_ps_top.txt:56-61, ๋ฐ˜๋ณต ์บก์ฒ˜ :144-146 ๋“ฑ
E3-2 top -H / ps -L ๋กœ ๋ณ€ํ™” ์ •์ฒด ์ฆ๋ช… โœ… ์ถฉ์กฑ evidence/deadlock_ps_top.txt:63-79
E3-3 ๋งˆ์ง€๋ง‰ ๋กœ๊ทธ ์ง€์ (WAITINGโ€ฆ BLOCKED) โœ… ์ถฉ์กฑ evidence/deadlock_app.log:93-94
E3-4 ์Šค๋ ˆ๋“œ/๋ฝ ๋Œ€๊ธฐ ์ถ”๋ก  ๊ทผ๊ฑฐ โœ… ์ถฉ์กฑ reports/03_deadlock_report.md:193-207 (์˜์กด ๊ทธ๋ž˜ํ”„) + WCHANยท๋ฌธ๋งฅ๊ตํ™˜ ์นด์šดํ„ฐ

์ œ์•ฝ ์‚ฌํ•ญ ์ ๊ฒ€

ํ•ญ๋ชฉ ํŒ์ • ๊ทผ๊ฑฐ
๐Ÿšซ ๋””์ปดํŒŒ์ผยท๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋ง ๊ธˆ์ง€ โœ… ์œ„๋ฐ˜ ์—†์Œ objdump|readelf|pyinstxtractor|uncompyle|decompil|disassembl|ghidra|radare ์ €์žฅ์†Œ ์ „์ฒด grep 0๊ฑด. ์˜คํžˆ๋ ค reports/02_cpu_report.md:250 ์ด "๋ฐ”์ด๋„ˆ๋ฆฌ ๋‚ด๋ถ€ ๊ตฌํ˜„์€ ๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋ง ๊ธˆ์ง€ ๋Œ€์ƒ์ด๋ผ ํ™•์ธํ•˜์ง€ ์•Š์•˜๋‹ค. ์œ„ ์„œ์ˆ ์€ ์™ธ๋ถ€ ๊ด€์ธก๋งŒ์œผ๋กœ ์„ธ์šด ์ถ”๋ก " ์ด๋ผ๊ณ  ํ•œ๊ณ„๋ฅผ ๋ช…์‹œ
๋ฆฌ๋ˆ…์Šค ํ‘œ์ค€ ๋ช…๋ น์–ด/๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งŒ ์‚ฌ์šฉ โœ… ์œ„๋ฐ˜ ์—†์Œ ์‚ฌ์šฉ ๋„๊ตฌ๋Š” ps top free df ss/netstat awk stat pgrep kill curl + /proc ๋ฟ(src/monitor.sh, src/experiments/lib_experiment.sh). ๋ณ„๋„ APMยทํ”„๋กœํŒŒ์ผ๋Ÿฌ ์„ค์น˜ ์—†์Œ
ํฌํŠธ 15034 ๊ณ ์ • โœ… ์œ„๋ฐ˜ ์—†์Œ src/05_env_and_keyfile.sh:35, src/02_firewall_allowlist.sh:33, src/07_cron_schedule.sh:26 ๋ชจ๋‘ 15034
์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ Bash ์ „์šฉ(์ €์žฅ์†Œ ์ž์ฒด ์„ ์–ธ) โœ… ์œ„๋ฐ˜ ์—†์Œ ๋ณธ README ยง7 ์ œ์•ฝ ์‚ฌํ•ญ ์ด ์„ ์–ธ ๋ฒ”์œ„๋ฅผ "๋ถ„์„ยท๊ด€์ œยท๊ฒ€์ฆ ์ž๋™ํ™”๋Š” Bash ๋กœ๋งŒ"์œผ๋กœ ํ•œ์ •ํ•˜๊ณ , ์œ ์ผํ•œ Python ์ธ tools/build_docs.py ๊ฐ€ ๊ณผ์ œ ์‚ฐ์ถœ๋ฌผ์ด ์•„๋‹Œ ๋ฌธ์„œ HTML ๋นŒ๋”์ž„์„ ๊ฐ™์€ ์ž๋ฆฌ์—์„œ ๋ช…์‹œํ•œ๋‹ค. ํ•ด๋‹น ๊ฒฝ๋กœ(src/**, verify_orbstack.sh, demo.sh, tools/check_req_ids.sh)๋Š” ์ „๋ถ€ Bash โ€” ์˜ˆ์™ธ 0๊ฑด (2026-09-21 ๋ฌธ๊ตฌ ํ•œ์ •์œผ๋กœ ํ•ด์†Œ)
๊ฒฉ๋ฆฌ ํ™˜๊ฒฝ(Docker/VM) ๊ถŒ์žฅ ๐ŸŸก ๊ถŒ์žฅ ๋ฏธ์ค€์ˆ˜ ๋ณธ README ยง5 ๋น ๋ฅธ ์‹คํ–‰ ๊ฐ€์ด๋“œ ์™€ demo.sh/verify_orbstack.sh ๋Š” OrbStack Ubuntu ๋จธ์‹  ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ธฐ์ˆ ํ•˜์ง€๋งŒ, ์ œ์ถœ evidence ๋Š” AGENT_HOME=/home/ashofrondol/b12_sandbox/agent-app ๋กœ ๊ฐœ๋ฐœ ํ˜ธ์ŠคํŠธ์—์„œ ์ง์ ‘ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ๋‹ค(evidence/oom_monitor.log:6,11). ๊ฐ™์€ ํ˜ธ์ŠคํŠธ์—์„œ java(RSS 19GB)ยทgrafanaยทloki ๊ฐ€ ๋Œ๊ณ  ์žˆ์–ด(evidence/oom_ps_top.txt:353-362) ํ˜ธ์ŠคํŠธ ์ง€ํ‘œ์— ๋ฐฐ๊ฒฝ ๋ถ€ํ•˜๊ฐ€ ์„ž์ธ๋‹ค. ๋ฆฌํฌํŠธ๊ฐ€ ์ด๋ฅผ ์Šค์Šค๋กœ ๋ฐํžˆ๊ณ  ํ”„๋กœ์„ธ์Šค ๋‹จ์œ„ ์ง€ํ‘œ๋กœ ๋ถ„๋ฆฌํ–ˆ์œผ๋ฏ€๋กœ(reports/02_cpu_report.md:207) ๊ฒฐ๋ก ์—๋Š” ์˜ํ–ฅ์ด ์—†๋‹ค. ๋ช…์„ธ์ƒ "๊ถŒ์žฅ"์ด๋ผ ๊ฐ์  ์š”์†Œ๋Š” ์•„๋‹ˆ๋‹ค

๋ณด๋„ˆ์Šค ๊ณผ์ œ

ID ์š”๊ตฌ์‚ฌํ•ญ (์š”์•ฝ) ํŒ์ • ๊ทผ๊ฑฐ / ๋น„๊ณ 
B1 ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ถ”๋ก  โœ… ์ถฉ์กฑ reports/04_scheduling_analysis.md 240์ค„ + ์ˆ˜์ง‘ ์Šคํฌ๋ฆฝํŠธ src/experiments/04_scheduling.sh
B1-1 ํƒ€์ž„์Šคํƒฌํ”„ ๊ธฐ๋ฐ˜ ์‹คํ–‰ ์ˆœ์„œยท๊ต์ฒด ์ฃผ๊ธฐ ํŒจํ„ดํ™” โœ… ์ถฉ์กฑ evidence/scheduling_workers.log:38-62 ์›๋ฌธ 21์ค„ + :176-201 ๊ฒฝ๊ณผ/๊ฐ„๊ฒฉ ๊ณ„์‚ฐํ‘œ. ๊ฐ„๊ฒฉ ํ‘œ๋ณธ 20๊ฐœ ์ „๋ถ€ 50~51ms(ํ‰๊ท  50.8ms), ๋“ฑ์žฅ ์ˆœ์„œ Aโ†’Bโ†’C ๊ณ ์ • ํšŒ์ „๊นŒ์ง€ ์ •๋Ÿ‰ํ™”
B1-2 Round-Robin / FCFS / Priority ์ค‘ ์—ญ์ถ”๋ก  โœ… ์ถฉ์กฑ reports/04_scheduling_analysis.md:158-191 โ€” FCFS ๊ธฐ๊ฐ(A ๊ฐ€ 40%์—์„œ Preempted ์งํ›„ B ์‹œ์ž‘), Priority ๊ธฐ๊ฐ(ํ„ด ์ˆ˜ 3/3/3, ํ„ด๋‹น ์ง„ํ–‰ํญ 20%p ๋™์ผ, ์™„๋ฃŒ ์‹œ๊ฐ ์ฐจ 51ms ์ด๋‚ด), RR ๊ฒฐ๋ก (๊ณ ์ • ํ• ๋‹น๋Ÿ‰ยท์ˆœํ™˜ ๊ต์ฒดยท๊ณตํ‰์„ฑยท์ƒํƒœ ๋ณด์กด 4๊ทผ๊ฑฐ). ๊ฒŒ๋‹ค๊ฐ€ [Thread-A/B/C] ๊ฐ€ OS ์Šค๋ ˆ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ์•ฑ ๋‚ด๋ถ€ ๋…ผ๋ฆฌ ํƒœ์Šคํฌ์ž„์„ top -H ๋กœ ํ™•์ธํ•˜๊ณ  ์ดˆํŒ์˜ ์ž˜๋ชป๋œ ๊ทผ๊ฑฐ๋ฅผ ์Šค์Šค๋กœ ํ๊ธฐ(:127-129)
B1-3 ์žฅ๋‹จ์  ๋ฐ ์ ํ•ฉ ์•„ํ‚คํ…์ฒ˜ ๋ถ„์„ โœ… ์ถฉ์กฑ reports/04_scheduling_analysis.md:195-223 โ€” ์žฅ์  3 / ๋‹จ์  3 + ์ ํ•ฉ(์›น์„œ๋ฒ„ยท์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒยท๋ฉ€ํ‹ฐํ…Œ๋„ŒํŠธ) / ๋ถ€์ ํ•ฉ(๋ฐฐ์น˜ยทETL, RTOS, HPC) ํ‘œ. ๋ช…์„ธ๊ฐ€ ์˜ˆ์‹œ๋กœ ๋“  "์‹ค์‹œ๊ฐ„ ์‘๋‹ต ์›น ์„œ๋ฒ„ vs ์ฒ˜๋ฆฌ๋Ÿ‰ ๋ฐฐ์น˜ ์„œ๋ฒ„" ๋Œ€๋น„๋ฅผ ์ •ํ™•ํžˆ ๋‹ค๋ฃธ

๊ณผ์ œ ๋ชฉํ‘œ (G1~G4) ๋Œ€์‘

ID ํŒ์ • ๊ทผ๊ฑฐ
G1 ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐยท๋ˆ„์ˆ˜ ์˜ํ–ฅ โœ… ์ถฉ์กฑ docs/md/์ด๋ก _์ง€์‹.md:92-233 (ยง2 ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ~OOM), ๋ฆฌํฌํŠธ reports/01_oom_report.md:249-254
G2 CPU ๊ณผ์ ์œ  โ†’ ์‹œ์Šคํ…œ ์ง€์—ฐ ์›๋ฆฌ โœ… ์ถฉ์กฑ docs/md/์ด๋ก _์ง€์‹.md:234-325 (ยง3 CPUยท์Šค์ผ€์ค„๋ง), reports/02_cpu_report.md:252-257
G3 ๋ฐ๋“œ๋ฝ ๊ฐœ๋… + ์‹œ์Šคํ…œ ๋„๊ตฌ ์ง„๋‹จ โœ… ์ถฉ์กฑ docs/md/์ด๋ก _์ง€์‹.md:737-866, reports/03_deadlock_report.md:220-225
G4 ์œกํ•˜์›์น™ยทIssue ์†Œํ†ต โœ… ์ถฉ์กฑ ๋ฆฌํฌํŠธ 3์ข…์˜ ๋จธ๋ฆฌ๋ง์ด ํ™˜๊ฒฝยท๊ณ„์ •ยทํ™˜๊ฒฝ๋ณ€์ˆ˜ยท์ธก์ • ๊ตฌ๊ฐ„์„ ๋ชจ๋‘ ์ ์‹œ(reports/01_oom_report.md:3-7), ๋ชจ๋“  ์ธ์šฉ์— ์›๋ณธ: evidence/ํŒŒ์ผ:์ค„๋ฒˆํ˜ธ ์—ญ์ถ”์  ๋งํฌ. ๊ตฌ์ˆ  ๋Œ€๋น„ ๋ฌธ๋‹ต์€ docs/md/ํ‰๊ฐ€_๋ฌธํ•ญ.md 263์ค„

๐Ÿ” ๋ฐœ๊ฒฌ๋œ ๊ฒฉ์ฐจ์™€ ๋ณด์™„ ์ œ์•ˆ

  1. [๊ฒฝ๋ฏธ ยท R1-11] 0.0.0.0 ๋ฐ”์ธ๋”ฉ์„ ์ง์ ‘ ๋ณด์—ฌ ์ฃผ๋Š” ์บก์ฒ˜๊ฐ€ ์—†๋‹ค.

    • ๋ฌด์—‡์ด ๋ถ€์กฑํ•œ๊ฐ€: ํฌํŠธ๊ฐ€ LISTEN ์ด๋ผ๋Š” ์‚ฌ์‹ค์€ ๋ถ€ํŠธ ๋กœ๊ทธยทmonitor.sh ๋กœ ํ™•์ธ๋˜์ง€๋งŒ, ๋ฐ”์ธ๋”ฉ ์ฃผ์†Œ๊ฐ€ 0.0.0.0(์ „ ์ธํ„ฐํŽ˜์ด์Šค)์ธ์ง€ 127.0.0.1(๋ฃจํ”„๋ฐฑ)์ธ์ง€ ๊ตฌ๋ถ„๋˜๋Š” ์ถœ๋ ฅ์ด evidence ์ „์ฒด์— ์—†๋‹ค. ๋ช…์„ธ 0.8 ์ ˆ์˜ ํ•™์Šต ์งˆ๋ฌธ("0.0.0.0 ๊ณผ 127.0.0.1 ๋ฐ”์ธ๋”ฉ์€ ๋ณด์•ˆ์ƒ ๋ฌด์—‡์ด ๋‹ค๋ฅธ๊ฐ€")์ด ์ •์กฐ์ค€ํ•˜๋Š” ์ง€์ ์ด๋‹ค.
    • ์–ด๋–ป๊ฒŒ ๊ณ ์น˜๋ฉด ๋˜๋Š”๊ฐ€: ์•ฑ ๊ธฐ๋™ ์ƒํƒœ์—์„œ ss -tlnp | grep 15034 (๋˜๋Š” ss -tln 'sport = :15034') ํ•œ ์ค„์„ ์บก์ฒ˜ํ•ด *_ps_top.txt ์˜ ๋ถ€ํŠธ ๊ฒ€์ฆ ๋ธ”๋ก์— ์ถ”๊ฐ€ํ•˜๊ณ , ๋ฆฌํฌํŠธ R1 ์ฒดํฌ๋ฆฌ์ŠคํŠธ์—์„œ ์ด๋ฅผ ์ธ์šฉํ•œ๋‹ค.
    • โœ… ๋ฐฐ์„  ์™„๋ฃŒ (2026-09-21). src/experiments/lib_experiment.sh ์— _snapshot_bind_addr() ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ๋„ค ์‹คํ—˜ ์ „๋ถ€(OOM/CPU ์˜ BeforeยทAfter, Deadlock ์˜ BeforeยทAfter, ์Šค์ผ€์ค„๋ง)์—์„œ ์•ฑ ๊ธฐ๋™ ์งํ›„ ํ•œ ๋ฒˆ์”ฉ ํ˜ธ์ถœํ•œ๋‹ค. ๊ฐ™์€ ํŒŒ์ผ์˜ preflight() ์—๋Š” ๊ธฐ๋™ ์ „ ํฌํŠธ ์ ์œ  ์ƒํƒœ๋ฅผ ๋ณด๊ณ ํ•˜๋Š” ์ค„์„ ๋„ฃ์–ด, ์ž”์กด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฌผ๊ณ  ์žˆ๋Š” ํฌํŠธ๋ฅผ ์•ฑ์˜ ๊ฒƒ์œผ๋กœ ์˜ค๋…ํ•˜์ง€ ์•Š๊ฒŒ ํ–ˆ๋‹ค. evidence/ ๋Š” ์ด์ „ ์‹คํ–‰ ์‚ฐ์ถœ๋ฌผ์ด๋ผ ์†Œ๊ธ‰ ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค โ€” ๋‹ค์Œ ์‹คํ–‰๋ถ€ํ„ฐ evidence_live/*_ps_top.txt ์— ๋‚จ๋Š”๋‹ค.
  2. [๊ฒฝ๋ฏธ ยท E2-1] top/ps ์บก์ฒ˜๋งŒ ๋ณด๋ฉด "CPU ๊ธ‰์ƒ์Šน"์ด ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค.

    • ๋ฌด์—‡์ด ๋ถ€์กฑํ•œ๊ฐ€: ์š”๊ฑด์€ "top/ps/๊ด€์ œ๋กœ ๊ธ‰์ƒ์Šน ๊ตฌ๊ฐ„์„ ์บก์ฒ˜"์ธ๋ฐ, ์‹ค์ œ ์บก์ฒ˜๊ฐ’์€ %CPU 0.0 ยท TIME+ 0.24์ดˆ ยท load average ๋ฌด๋ณ€ํ™”๋‹ค. ์ƒ์Šน์€ /proc ๋ธํƒ€ํ‘œ์™€ ์•ฑ ์ž๊ธฐ๋ณด๊ณ  ๊ฐ’์—์„œ๋งŒ ๋ณด์ธ๋‹ค. ๋ฆฌํฌํŠธ๊ฐ€ ์ด ๋ถˆ์ผ์น˜๋ฅผ ์ •์งํ•˜๊ฒŒ ์„œ์ˆ ํ•œ ๊ฒƒ์€ ์˜คํžˆ๋ ค ๊ฐ•์ ์ด์ง€๋งŒ, ์ฑ„์ ์ž๊ฐ€ ์š”๊ฑด ๋ฌธ๊ตฌ๋งŒ ๋Œ€์กฐํ•˜๋ฉด ๋ฏธ๋น„๋กœ ์ฝํž ์ˆ˜ ์žˆ๋‹ค.
    • ์–ด๋–ป๊ฒŒ ๊ณ ์น˜๋ฉด ๋˜๋Š”๊ฐ€: top -b -n 2 -d 1 -p <pid> ์˜ ๋‘ ๋ฒˆ์งธ ์ƒ˜ํ”Œ(= ์ง„์งœ ์ˆœ๊ฐ„๊ฐ’)์„ ๋ถ€ํ•˜ ์ƒ์Šน ๊ตฌ๊ฐ„์—์„œ 3~4ํšŒ ์—ฐ์† ์บก์ฒ˜ํ•ด %CPU ๊ฐ€ ์‹ค์ œ๋กœ ์˜ค๋ฅด๋Š” ํ‘œ๋ฅผ ๋งŒ๋“ค์–ด evidence/cpu_top_ps.txt ยง1 ์— ๋„ฃ๋Š”๋‹ค. ์ง€๊ธˆ๋„ :349-379 ์— top -b -n 2 ์‚ฌ์šฉ ์˜ˆ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๋Œ€์ƒ PID ๋กœ ํ•œ ๋ฒˆ ๋” ๋Œ๋ฆฌ๋ฉด ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฆฌํฌํŠธ ยง2-3 ์ฒซ๋จธ๋ฆฌ์— "์ด ์•ฑ์˜ ๋ถ€ํ•˜๋Š” OS ์ง€ํ‘œ์ƒ ์ตœ๋Œ€ 5%์ด๋ฉฐ, ๊ทธ ์ด์œ ๋Š” ์•ฑ ๋‚ด๋ถ€ ํšŒ๊ณ„๊ฐ€ ์ข…๋ฃŒ๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ"์ด๋ผ๋Š” ํ•œ ์ค„ ์š”์•ฝ์„ ๋จผ์ € ๋ฐฐ์น˜ํ•ด ์˜ค๋…์„ ๋ง‰๋Š”๋‹ค.
  3. [๊ฒฝ๋ฏธ ยท R2-3 / R3-2] ํŒŒ์ดํ”„๋ผ์ธ Before ์‹คํ–‰์˜ ์ข…๋ฃŒ ์ฝ”๋“œ๊ฐ€ raw ์บก์ฒ˜๋กœ ๋‚จ์•„ ์žˆ์ง€ ์•Š๋‹ค.

    • ๋ฌด์—‡์ด ๋ถ€์กฑํ•œ๊ฐ€: ๋ฆฌํฌํŠธ๋Š” Before ๋ฅผ "exit 137"(OOM) / "exit 143"(CPU) ๋กœ ๋‹จ์–ธํ•˜์ง€๋งŒ, ๊ทธ ํ•ด๋‹น ์‹คํ–‰ ์ž์ฒด์˜ ์ข…๋ฃŒ ์ฝ”๋“œ ์ถœ๋ ฅ์€ evidence ์— ์—†๋‹ค. raw exit_code= ์บก์ฒ˜๋Š” ํ˜•์ œ probe ์—๋งŒ ์žˆ๋‹ค(evidence/oom_monitor.log:340,348 / evidence/cpu_monitor.log:309,325). ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ๊ฐ„์— ๋‚จ์€ ๊ฒƒ์€ After ์˜ rc=2(๊ด€์ธก ์ข…๋ฃŒ)๋ฟ์ด๋‹ค(evidence/oom_monitor.log:294, evidence/cpu_monitor.log:271).
    • ์–ด๋–ป๊ฒŒ ๊ณ ์น˜๋ฉด ๋˜๋Š”๊ฐ€: src/experiments/lib_experiment.sh ์˜ _terminating_experiment ๊ฐ€ ์›Œ์ปค ์ข…๋ฃŒ ํ›„ wait; echo "exit=$?" ๊ฒฐ๊ณผ๋ฅผ *_monitor.log ์˜ ํ•ด๋‹น ๊ตฌ๊ฐ„ ๋์ค„์— append ํ•˜๋„๋ก ํ•œ ์ค„ ์ถ”๊ฐ€ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Before ๊ตฌ๊ฐ„ ์ž์ฒด์—์„œ 137/143 ์ด ์ง์ ‘ ์ฆ๋ช…๋œ๋‹ค.
  4. [๊ฒฝ๋ฏธ ยท ๋ฌธ์„œ] โœ… ํ•ด์†Œ๋จ (2026-09-21) โ€” README.md ์™€ ์ €์žฅ์†Œ ์‹ค๋ฌผ์ด ๋‘ ๊ตฐ๋ฐ์—์„œ ์–ด๊ธ‹๋‚ฌ๋‹ค.

    • ยง2 ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ์˜ bin/ ํ•ญ๋ชฉ์ด "๋น„์–ด ์žˆ์Œ", ยง2 ์•„๋ž˜ ๋น„๊ณ ๊ฐ€ "์ด ์ €์žฅ์†Œ์— ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋‹ˆ"๋ผ๊ณ  ์ ์—ˆ์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” bin/agent-leak-app(6.5MB ELF)์ด git ์— ์ถ”์ ๋˜๊ณ  ์žˆ์—ˆ๋‹ค(git ls-files bin/ ํ™•์ธ). ํ•ด์‹œ๊ฐ€ evidence ํ—ค๋”์™€ ์ผ์น˜ํ•ด ์žฌํ˜„์„ฑ ๋ฉด์—์„œ๋Š” ์˜คํžˆ๋ ค ์žฅ์ ์ด๋ฏ€๋กœ ํŒŒ์ผ์„ ์ง€์šฐ์ง€ ์•Š๊ณ  ๋ฌธ๊ตฌ๋ฅผ ์‹ค๋ฌผ์— ๋งž์ท„๋‹ค โ€” ๋‘ ๊ณณ ๋ชจ๋‘ md5 0fb02e12554328b32e6e1adac861630e ๋ฅผ ๋ช…์‹œํ•˜๊ณ , ยง5 ๋น ๋ฅธ ์‹คํ–‰ ๊ฐ€์ด๋“œ ์˜ cp ~/Downloads/โ€ฆ ์•ˆ๋‚ด๋„ "์ด๋ฏธ ํฌํ•จ๋จ, ๊ต์ฒดํ•  ๋•Œ๋งŒ"์œผ๋กœ ๋ฐ”๊ฟจ๋‹ค.
    • ยง7 ์ œ์•ฝ ์‚ฌํ•ญ ์˜ "์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ๋Š” Bash ๋กœ๋งŒ" ์„ ์–ธ๊ณผ tools/build_docs.py ์˜ ๊ณต์กด โ†’ ์„ ์–ธ์„ "๋ถ„์„ยท๊ด€์ œยท๊ฒ€์ฆ ์ž๋™ํ™”๋Š” Bash ๋กœ๋งŒ"์œผ๋กœ ํ•œ์ •ํ•˜๊ณ , build_docs.py ๊ฐ€ ๊ณผ์ œ ์‚ฐ์ถœ๋ฌผ์ด ์•„๋‹Œ ๋ฌธ์„œ ๋นŒ๋”์ž„์„ ๊ฐ™์€ ์ž๋ฆฌ์— ์ ์—ˆ๋‹ค.
  5. [๊ฒฝ๋ฏธ ยท ์ถ”์ ์„ฑ] โœ… ํ•ด์†Œ๋จ (2026-09-21) โ€” ์ž์ฒด ์š”๊ตฌ์‚ฌํ•ญ ID(B1-2-A1, B1-2-P1~P11, B1-2-E-OOM1, B1-2-C2, B1-2-B1~B3)์˜ ์ •์˜ํ‘œ๊ฐ€ ์—†์—ˆ๋‹ค.

    • ๋ฌด์—‡์ด ๋ถ€์กฑํ–ˆ๋‚˜: ๋ฆฌํฌํŠธยทevidenceยท์‹คํ—˜ ์Šคํฌ๋ฆฝํŠธ ์ฃผ์„์ด ์ด ID ๋กœ ๊ทผ๊ฑฐ๋ฅผ ๋‹ฌ๊ณ  ์žˆ๋Š”๋ฐ(์˜ˆ: reports/01_oom_report.md:107, evidence/oom_monitor.log:2), ID โ†’ ์›๋ฌธ ์š”๊ตฌ์‚ฌํ•ญ ๋งคํ•‘ ๋ฌธ์„œ๊ฐ€ ์—†์–ด ์ œ3์ž๊ฐ€ ์ถ”์ ํ•  ์ˆ˜ ์—†์—ˆ๋‹ค.
    • ์–ด๋–ป๊ฒŒ ๊ณ ์ณค๋‚˜: docs/md/์š”๊ตฌ์‚ฌํ•ญ_ID_๋งคํ•‘.md ์— B1-2-P1~P11 โ†” R1-1~R1-11 / B1-2-A1~A9 โ†” R2-1~R4-3 / B1-2-E-* โ†” E1~E3 / B1-2-B1~B3 โ†” B1-1~B1-3 / B1-2-C1~C3 โ†” 0.6 ์ ˆ ๋Œ€์กฐํ‘œ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. ๋ฆฌํฌํŠธ ๋ณธ๋ฌธ์˜ ID ๋Š” ์น˜ํ™˜ํ•˜์ง€ ์•Š์•˜๋‹ค โ€” ์ธ์šฉ ์ค„๋ฒˆํ˜ธ๊ฐ€ ์ „๋ถ€ ๋ฐ€๋ ค ๋‹ค๋ฅธ ๊ทผ๊ฑฐ๊ฐ€ ๊ฑฐ์ง“์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๊ณ , ๋Œ€์กฐํ‘œ ํ•˜๋‚˜๋กœ ๊ฐ™์€ ์ถ”์ ์„ฑ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
    • ํ‘œ๊ฐ€ ์ฉ์ง€ ์•Š๊ฒŒ: tools/check_req_ids.sh ๊ฐ€ ์ €์žฅ์†Œ์—์„œ ์“ฐ์ด๋Š” ๋ชจ๋“  B1-2-* ID ๋ฅผ ๋ชจ์•„ ๋Œ€์กฐํ‘œ์— ์ •์˜๊ฐ€ ์—†์œผ๋ฉด exit 1 ๋กœ ๋๋‚œ๋‹ค. ์ƒˆ ID ๋ฅผ ๋งŒ๋“ค๋ฉด์„œ ํ‘œ๋ฅผ ๊ฐฑ์‹ ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ฒ€์‚ฌ๊ฐ€ ์‹คํŒจํ•œ๋‹ค.
  6. [์ฐธ๊ณ  ยท ๊ฒฐํ•จ ์•„๋‹˜] ๋ฆฌํฌํŠธ๊ฐ€ ์Šค์Šค๋กœ ๋ฐํžŒ ๋ฏธํ™•์ธ ํ•ญ๋ชฉ 3๊ฑด โ€” โ‘  Worker-Thread-1/2 ์™€ LWP ์˜ 1:1 ๋Œ€์‘ ๋ฏธํ™•์ธ(reports/03_deadlock_report.md:70), โ‘ก Preempted ๊ฐ€ ์ง„์งœ ์„ ์ ์ธ์ง€ ํ˜‘์กฐ์  ์–‘๋ณด์ธ์ง€ ๋ฏธ๊ตฌ๋ถ„(reports/04_scheduling_analysis.md:230), โ‘ข OOM ์‹œ dmesg ๋ฏธํ™•์ธ(reports/01_oom_report.md:254). ์…‹ ๋‹ค ๋ช…์„ธ๊ฐ€ ์š”๊ตฌํ•˜์ง€ ์•Š์€ ๋ฒ”์œ„์ด๊ณ , "ํ™•์ธํ•˜์ง€ ๋ชปํ–ˆ๋‹ค"๊ณ  ์ ์€ ํƒœ๋„ ์ž์ฒด๊ฐ€ D1-2(๊ฐ๊ด€์  ์ฆ๊ฑฐ) ๊ธฐ์ค€์— ๋ถ€ํ•ฉํ•œ๋‹ค. ๋” ๊นŠ์ด ๊ฐ€๊ณ  ์‹ถ๋‹ค๋ฉด โ‘ ์€ /proc/<pid>/task/<tid>/comm ์„, โ‘ข์€ dmesg -T | grep -i oom ์„ ์บก์ฒ˜ํ•˜๋ฉด ๋œ๋‹ค.


๐Ÿงช ์‹คํ–‰ ๊ฒ€์ฆ ๊ธฐ๋ก

์ €์žฅ์†Œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ๋„คํŠธ์›Œํฌยท์„ค์น˜ ์—†์ด ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„๋งŒ ์ˆ˜ํ–‰ํ–ˆ๋‹ค. ๋‹จ (2026-09-21 ์ถ”๊ฐ€) ๋กœ ํ‘œ์‹œ๋œ ํ–‰์€ ๊ฐ™์€ ๋‚  ๊ฐœ์„  ์ž‘์—… ์ค‘์— ๋Œ๋ฆฐ ๊ฒƒ์ด๊ณ , ๊ทธ ์ž‘์—…์€ ์ €์žฅ์†Œ๋ฅผ ๋ณ€๊ฒฝํ–ˆ๋‹ค.

๊ฒ€์ฆ ๋ช…๋ น ๊ฒฐ๊ณผ
์…ธ ๋ฌธ๋ฒ• ๊ฒ€์‚ฌ (์ „ ์Šคํฌ๋ฆฝํŠธ) for f in $(find . -name '*.sh' -not -path './.git/*'); do bash -n "$f"; done 20๊ฐœ ์ „๋ถ€ OK (demo.sh, verify_orbstack.sh, src/*.sh 11๊ฐœ, src/experiments/*.sh 6๊ฐœ, tools/check_req_ids.sh 1๊ฐœ) โ€” ๊ตฌ๋ฌธ ์˜ค๋ฅ˜ 0๊ฑด
์š”๊ตฌ์‚ฌํ•ญ ID ๋งคํ•‘ ๊ฒ€์‚ฌ (2026-09-21 ์ถ”๊ฐ€) bash tools/check_req_ids.sh โœ“ ์ €์žฅ์†Œ๊ฐ€ ์“ฐ๋Š” B1-2-* ID ์ „๋ถ€ docs/md/์š”๊ตฌ์‚ฌํ•ญ_ID_๋งคํ•‘.md ์— ์ •์˜๋จ(๊ฐœ์ˆ˜๋Š” ๊ฒ€์‚ฌ ์ถœ๋ ฅ์ด ์ง์ ‘ ๋งํ•ด ์ค€๋‹ค). ์ผ๋ถ€๋Ÿฌ ๋งคํ•‘ํ‘œ์— ์—†๋Š” ๋ฒˆํ˜ธ์˜ P ๊ณ„์—ด ID ๋ฅผ ๋„ฃ์–ด exit 1 ยท ์‚ฌ์šฉ์ฒ˜ ํŒŒ์ผ ์ถœ๋ ฅ์„ ํ™•์ธํ•˜๊ณ  ์›๋ณตํ•จ (์ด ํ–‰์„ ์“ฐ๋‹ค๊ฐ€ ๊ฒ€์‚ฌ๊ฐ€ ์‹ค์ œ๋กœ ํ•œ ๋ฒˆ ๋” ๋ฌผ์—ˆ๋‹ค โ€” README ์— ์ ์€ ์˜ˆ์‹œ ID ๊นŒ์ง€ ์žก๋Š”๋‹ค) โ€” ๊นจ์ง€๋Š” ๊ฒ€์‚ฌ์ž„์ด ์‹ค์ฆ๋๋‹ค
๊ฒ€์ฆ ๋“œ๋ผ์ด๋ฒ„ ์ข…๋ฃŒ ์ฝ”๋“œ (2026-09-21 ์ถ”๊ฐ€) verify_orbstack.sh ์˜ main() ๋งˆ์ง€๋ง‰ return "$EXP_WARN" EXP_WARN=0 โ†’ exit 0 / EXP_WARN=1 โ†’ exit 1 ์–‘์ชฝ ํ™•์ธ. ์ด์ „์—๋Š” ์‹คํ—˜์ด PASS ์•„๋‹ˆ์–ด๋„ ํ•ญ์ƒ 0 ์ด๋ผ CIยท๋ž˜ํผ๊ฐ€ ์‹คํŒจ๋ฅผ ๋ณผ ์ˆ˜ ์—†์—ˆ๋‹ค. demo.sh ๋Š” ์ฝ”๋“œ๋ฅผ ๋ฐ›์•„ ์•ˆ๋‚ด ์ถœ๋ ฅ ํ›„ ๊ทธ๋Œ€๋กœ ์ „ํŒŒํ•œ๋‹ค. ์Šคํ…์œผ๋กœ verify ์ข…๋ฃŒ ์ฝ”๋“œ 0/1 ร— evidence_live ๋น„์—ˆ์Œ/์ฑ„์›Œ์ง 4๊ฐ€์ง€ ์กฐํ•ฉ์„ ์‹ค์ œ๋กœ ๋Œ๋ ค demo.sh ์ข…๋ฃŒ ์ฝ”๋“œ์™€ ์•ˆ๋‚ด ๋„๋‹ฌ์„ ํ™•์ธํ–ˆ๋‹ค โ€” ์ด๋•Œ ๊ฐ“ ํด๋ก ํ•œ ์ƒํƒœ(evidence_live/ ์— README.md ๋ฟ)์—์„œ ์‚ฐ์ถœ๋ฌผ ๋ชฉ๋ก ์ถœ๋ ฅ์˜ `ls โ€ฆ
๋ฐ”์ด๋„ˆ๋ฆฌ ๋™์ผ์„ฑ md5sum bin/agent-leak-app 0fb02e12554328b32e6e1adac861630e โ€” evidence/oom_monitor.log:8 ์ด ๊ธฐ๋กํ•œ ํ•ด์‹œ์™€ ์ผ์น˜. evidence ๊ฐ€ ์ด ์ €์žฅ์†Œ์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ์—์„œ ๋‚˜์™”์Œ์ด ํ™•์ธ๋จ
๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋ง ํ”์  grep -rniE "objdump|readelf|pyinstxtractor|uncompyle|decompil|disassembl|ghidra|radare" --include='*.sh' --include='*.md' --include='*.py' --include='*.txt' --include='*.log' . 0๊ฑด (์šฉ์–ด์ง‘์˜ ์šฉ์–ด ์„ค๋ช… ์ œ์™ธ)
๋ฐ”์ธ๋”ฉ ์ฃผ์†Œ ๊ทผ๊ฑฐ grep -rn "0\.0\.0\.0:15034|ss -tln|netstat -tln|LISTEN" evidence/ ์ฃผ์„ 1์ค„๋ฟ, ์‹ค์ œ ss ์ถœ๋ ฅ ์บก์ฒ˜ 0๊ฑด โ†’ R1-11 ๋ถ€๋ถ„ ์ถฉ์กฑ ํŒ์ •์˜ ๊ทผ๊ฑฐ. (2026-09-21: _snapshot_bind_addr() ๋ฐฐ์„  ์™„๋ฃŒ โ€” ๋ฆฌ์Šค๋„ˆ๊ฐ€ ์žˆ์„ ๋•Œ 0.0.0.0:15034 ์ค„์„, ์—†์„ ๋•Œ "LISTEN ์—†์Œ" ์„ ๋‚จ๊ธฐ๋Š” ๊ฒƒ์„ ์–‘์ชฝ ๋‹ค ์‹คํ–‰ํ•ด ํ™•์ธ. ์ œ์ถœ๋ณธ evidence/ ์—๋Š” ์†Œ๊ธ‰๋˜์ง€ ์•Š๋Š”๋‹ค)
๋ฆฌํฌํŠธโ†”evidence ์ค„๋ฒˆํ˜ธ ๋Œ€์กฐ sed -n ์œผ๋กœ ์ธ์šฉ ๊ตฌ๊ฐ„ ์ง์ ‘ ์—ด๋žŒ (oom_app.log:34-58,63-78 / oom_monitor.log:150-170,225-240,300-370 / oom_ps_top.txt:290-372 / cpu_monitor.log:280-340 / cpu_top_ps.txt:300-350 / deadlock_ps_top.txt:78-95,140-226 / deadlock_monitor.log:274-302 / scheduling_workers.log:30-70,170-206) ํ‘œ๋ณธ์œผ๋กœ ํ™•์ธํ•œ ์ธ์šฉ ์ „๋ถ€ ์ผ์น˜. ๋ฆฌํฌํŠธ ๋ณธ๋ฌธ์— ๋ถ™์€ ์›๋ณธ: โ€ฆ:Lxx-yy ๋งํฌ๊ฐ€ ์‹ค์ œ ์ค„ ๋‚ด์šฉ๊ณผ ๋งž๋‹ค

๋ฏธ์‹คํ–‰ ํ•ญ๋ชฉ๊ณผ ์ด์œ 

  • bin/agent-leak-app ์‹คํ–‰ / src/monitor.sh ์‹คํ–‰ / src/experiments/*.sh ์‹คํ–‰ โ€” ๋ฏธ์‹คํ–‰. ์•ฑ ์‹คํ–‰์€ $AGENT_HOMEยท$AGENT_LOG_DIR ๋””๋ ‰ํ„ฐ๋ฆฌ ์ƒ์„ฑ๊ณผ ๋กœ๊ทธ ํŒŒ์ผ ์“ฐ๊ธฐ๋ฅผ ๋™๋ฐ˜ํ•ด "์ €์žฅ์†Œยท์‹œ์Šคํ…œ ๋ฌด๋ณ€๊ฒฝ" ๊ทœ์น™์— ์–ด๊ธ‹๋‚˜๊ณ , monitor.sh ๋Š” ์•ฑ์ด ๋–  ์žˆ์–ด์•ผ๋งŒ Health Check ๋ฅผ ํ†ต๊ณผํ•˜๋ฉฐ $AGENT_LOG_DIR ์— append ํ•œ๋‹ค.
  • src/0X_*.sh setup ์Šคํฌ๋ฆฝํŠธ โ€” ๋ฏธ์‹คํ–‰. apt-get install(aclยทufwยทcron), ๊ณ„์ • ์ƒ์„ฑ, sudo ์‹œ์Šคํ…œ ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • tools/build_docs.py โ€” ๋ฏธ์‹คํ–‰. markdownยทpygments ์„ค์น˜๊ฐ€ ํ•„์š”ํ•˜๊ณ (๋ณธ README ยง9 ๋ฌธ์„œ ๋นŒ๋“œ) ์„ค์น˜๋Š” ๊ธˆ์ง€ ๋ฒ”์œ„๋‹ค. ๋‹จ, docs/html/index.html ์‚ฐ์ถœ๋ฌผ์ด ์ด๋ฏธ ์กด์žฌํ•จ๊ณผ python3 -m py_compile ํ†ต๊ณผ๋Š” ํ™•์ธํ–ˆ๋‹ค.

0-A. ๋ฏธ์…˜์ด ์ง„์งœ๋กœ ๋ฌป๋Š” ๊ฒƒ (์ €์žฅ์†Œ ์ €์ž ํ•ด์„ค)

์‰˜ ๋ช…๋ น์–ด๋ฅผ ์™ธ์›Œ์„œ ํ‘ธ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ์™ธ๋ถ€์—์„œ ๋ณด์ด๋Š” ๋ฐ์ดํ„ฐ(๋กœ๊ทธยท๊ด€์ œยท์‹œ์Šคํ…œ ๋„๊ตฌ) ๋งŒ์œผ๋กœ ํ”„๋กœ์„ธ์Šค ์•ˆ๊ณผ OS ์•ˆ์—์„œ ๋ฌด์Šจ ์ผ์ด ๋ฒŒ์–ด์กŒ๋Š”์ง€ ์—ญ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๋ฌป๋Š”๋‹ค.

[๊ด€์ธก] monitor.log ์˜ PROC_RSS ๊ฐ€ 17.7MBโ†’267.7MB ๋กœ ์˜ฌ๋ž๊ณ  [MemoryGuard] Self-terminating ์ด ์ฐํ˜”๋‹ค
   โ†“
[์ถ”๋ก ] ์–ด๋–ค ์ž๋ฃŒ๊ตฌ์กฐ ์œ„์—์„œ, ์–ด๋–ค ์ •์ฑ…์ด, ๋ˆ„๊ตฌ๋ฅผ, ์–ด๋–ค ์‹œ๊ทธ๋„๋กœ ์ฃฝ์˜€๋Š”๊ฐ€?
   โ†“
[์ฆ๋ช…] /proc, ps, top ์œผ๋กœ ๊ทธ ์ถ”๋ก ์„ ๋’ท๋ฐ›์นจํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?
   โ†“
[์†Œํ†ต] ์œ„ 3๋‹จ๊ณ„๋ฅผ ๋™๋ฃŒ ๊ฐœ๋ฐœ์ž๊ฐ€ 30์ดˆ๋งŒ์— ๋”ฐ๋ผ์˜ฌ ์ˆ˜ ์žˆ๋Š” Issue ๋กœ ์ •๋ฆฌํ–ˆ๋Š”๊ฐ€?

๋”ฐ๋ผ์„œ ๋ฏธ์…˜์˜ ์‚ฐ์ถœ๋ฌผ์€ ๋ฆฌํฌํŠธ(.md) ๋‹ค. ํ•˜์ง€๋งŒ ์ง„์งœ ์ธก์ • ๋Œ€์ƒ์€ ํ•™์Šต์ž๊ฐ€ ์šด์˜์ฒด์ œ ๋™์ž‘ ์›๋ฆฌ ๋ฅผ ์ž๊ธฐ ์–ธ์–ด๋กœ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋๋Š”๊ฐ€์ด๋‹ค. ๊ทธ๋ž˜์„œ ๋ณธ ์ €์žฅ์†Œ๋Š” ๋ฆฌํฌํŠธ์™€ ํ•จ๊ป˜ ์ด๋ก  ์ง€์‹ ๋ฌธ์„œ๋ฅผ ํ•ต์‹ฌ ์‚ฐ์ถœ๋ฌผ๋กœ ํฌํ•จํ•œ๋‹ค.


1. ํ•™์Šต ๋ชฉํ‘œ

์ˆ˜๋ฃŒ ํ›„ ํ•™์Šต์ž๋Š” ๋‹ค์Œ์„ ์ž๊ธฐ ๋ง๋กœ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค:

  • ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌยทHeapยทRSSยทOOM Killerยท์•ฑ ์ž์ฒด MemoryGuard ์˜ ๊ด€๊ณ„
  • ํŠน์ • ํ”„๋กœ์„ธ์Šค์˜ CPU ๊ณผ์ ์œ ๊ฐ€ ์‹œ์Šคํ…œ ์ง€์—ฐ์„ ์œ ๋ฐœํ•˜๋Š” ์›๋ฆฌ, CFS ์Šค์ผ€์ค„๋Ÿฌ์˜ ๊ธฐ๋ณธ ์ง๊ด€
  • ๋ฐ๋“œ๋ฝ 4๋Œ€ ์กฐ๊ฑด(์ƒํ˜ธ๋ฐฐ์ œยท์ ์œ ๋Œ€๊ธฐยท๋น„์„ ์ ยท์ˆœํ™˜๋Œ€๊ธฐ), ์™ธ๋ถ€ ๋„๊ตฌ๋กœ ๋ฐ๋“œ๋ฝ์„ ์ฆ๋ช…ํ•˜๋Š” 6๊ฐ€์ง€ ์ฆ๊ฑฐ
  • ๋กœ๊ทธยท๊ด€์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทผ๊ฑฐ๋กœ GitHub Issue ํ˜•ํƒœ๋กœ ๋™๋ฃŒ์™€ ์†Œํ†ตํ•˜๋Š” ๋ฐฉ๋ฒ•

์ด๋ก ์  ๋ฐฐ๊ฒฝ์€ docs/md/์ด๋ก _์ง€์‹.md ์— ๊นŠ์ด ์ •๋ฆฌ๋ผ ์žˆ๋‹ค โ€” ๋ฆฌํฌํŠธ๋ฅผ ์“ฐ๊ธฐ ์ „์— ํ•œ ๋ฒˆ ํ†ต๋…ํ•  ๊ฒƒ.


2. ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ

codyssey_B1-2/
โ”œโ”€โ”€ README.md                       โ† ์ด ํŒŒ์ผ (๋ฏธ์…˜ ๊ฐœ์š” + ์ˆ˜ํ–‰ ๋ฐฉ๋ฒ•)
โ”œโ”€โ”€ ์‹คํ—˜_์ ˆ์ฐจ์„œ.md                  โ† 3๊ฐœ ์žฅ์•  ์žฌํ˜„ยท๊ฒ€์ฆ ์ ˆ์ฐจ
โ”œโ”€โ”€ demo.sh                         โ† (macOS) OrbStack ์ž๋™ ์‹œ์—ฐ ๋ž˜ํผ โ€” ํ•œ ์ค„๋กœ ์ „์ฒด ์‹คํ–‰
โ”œโ”€โ”€ verify_orbstack.sh              โ† (macOS) ๋จธ์‹  ์ƒ์„ฑโ†’setupโ†’๋ถ€ํŠธโ†’์‹คํ—˜โ†’์ฆ๊ฑฐ ์ˆ˜์ง‘ ๋“œ๋ผ์ด๋ฒ„
โ”‚
โ”œโ”€โ”€ docs/
โ”‚   โ”œโ”€โ”€ md/
โ”‚   โ”‚   โ”œโ”€โ”€ ์ด๋ก _์ง€์‹.md            โ† ์ปดํ“จํ„ฐ ๊ตฌ์กฐ ยท ๋ฉ”๋ชจ๋ฆฌ ยท CPU ยท ๋™์‹œ์„ฑ (ํ•„๋…)
โ”‚   โ”‚   โ”œโ”€โ”€ ์šฉ์–ด์ง‘.md               โ† ๋ฏธ์…˜์— ๋‚˜์˜ค๋Š” ์šฉ์–ด ์ •์˜
โ”‚   โ”‚   โ”œโ”€โ”€ ํ‰๊ฐ€_๋ฌธํ•ญ.md            โ† ๊ตฌ์ˆ  ํ‰๊ฐ€ ๋Œ€๋น„ ๋ฌธ๋‹ต
โ”‚   โ”‚   โ””โ”€โ”€ ์š”๊ตฌ์‚ฌํ•ญ_ID_๋งคํ•‘.md     โ† B1-2-* ์ž์ฒด ID โ†” ๋ช…์„ธ ์›๋ฌธ ID(R/D/E/B) ๋Œ€์กฐํ‘œ
โ”‚   โ””โ”€โ”€ html/
โ”‚       โ””โ”€โ”€ index.html              โ† tools/build_docs.py ๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ์ •์  ์‚ฌ์ดํŠธ
โ”‚
โ”œโ”€โ”€ reports/                        โ† GitHub Issue ํ˜•์‹ ๋ถ„์„ ๋ฆฌํฌํŠธ (์ œ์ถœ ์‚ฐ์ถœ๋ฌผ)
โ”‚   โ”œโ”€โ”€ 01_oom_report.md
โ”‚   โ”œโ”€โ”€ 02_cpu_report.md
โ”‚   โ”œโ”€โ”€ 03_deadlock_report.md
โ”‚   โ””โ”€โ”€ 04_scheduling_analysis.md   โ† ๋ณด๋„ˆ์Šค (์Šค์ผ€์ค„๋ง ์ถ”๋ก )
โ”‚
โ”œโ”€โ”€ evidence/                       โ† ๋ฆฌํฌํŠธ๊ฐ€ ์ธ์šฉํ•œ ๋กœ๊ทธยท๋ช…๋ น์–ด ์ถœ๋ ฅ ์›๋ณธ
โ”‚   โ”œโ”€โ”€ oom_monitor.log / oom_app.log / oom_ps_top.txt
โ”‚   โ”œโ”€โ”€ cpu_monitor.log / cpu_app.log / cpu_top_ps.txt
โ”‚   โ”œโ”€โ”€ deadlock_monitor.log / deadlock_app.log / deadlock_ps_top.txt
โ”‚   โ””โ”€โ”€ scheduling_workers.log / scheduling_top_h.txt
โ”‚
โ”œโ”€โ”€ bin/                            โ† ์‹คํ—˜์— ์‹ค์ œ๋กœ ์“ด agent-leak-app (์žฌํ˜„์„ฑ ์œ„ํ•ด git ์ถ”์ )
โ”‚   โ””โ”€โ”€ agent-leak-app              โ† md5 0fb02e12554328b32e6e1adac861630e
โ”‚                                      evidence/ ์ „ ํŒŒ์ผ ํ—ค๋”๊ฐ€ ๊ธฐ๋กํ•œ ํ•ด์‹œ์™€ ๋™์ผ =
โ”‚                                      ์ œ์ถœ ๋กœ๊ทธ๊ฐ€ ์ด ํŒŒ์ผ์—์„œ ๋‚˜์™”์Œ์ด ์ฆ๋ช…๋œ๋‹ค
โ”‚
โ”œโ”€โ”€ src/                            โ† B1-1 ์—์„œ ๊ฐ€์ ธ์˜จ ์ธํ”„๋ผ ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ
โ”‚   โ”œโ”€โ”€ monitor.sh                  โ† ์‹œ์Šคํ…œ ์ƒํƒœ ์ˆ˜์ง‘ยท๋กœ๊น… (cron ๋งค๋ถ„)
โ”‚   โ”œโ”€โ”€ report.sh                   โ† monitor.log ํ†ต๊ณ„ ์ถœ๋ ฅ
โ”‚   โ”œโ”€โ”€ archive_logs.sh             โ† ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜ ๋กœ๊ทธ ๋ณด์กด ์ •์ฑ…
โ”‚   โ”œโ”€โ”€ 00_run_all.sh               โ† 01~07 setup ๋‹จ๊ณ„๋ฅผ ํ•œ ๋ฒˆ์— ์‹คํ–‰
โ”‚   โ”œโ”€โ”€ 01_ssh_hardening.sh         โ† SSH ํฌํŠธ 20022 + Root ์ฐจ๋‹จ
โ”‚   โ”œโ”€โ”€ 02_firewall_allowlist.sh    โ† UFW ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ (20022/15034)
โ”‚   โ”œโ”€โ”€ 03_users_and_groups.sh      โ† ๊ณ„์ • 3์ข… + ๊ทธ๋ฃน 2์ข…
โ”‚   โ”œโ”€โ”€ 04_directories_and_acl.sh   โ† ๋””๋ ‰ํ† ๋ฆฌ + ACL
โ”‚   โ”œโ”€โ”€ 05_env_and_keyfile.sh       โ† B1-2 ์‚ฌ์–‘ env 5์ข… + ์‹คํ—˜์šฉ 3์ข… + secret.key
โ”‚   โ”œโ”€โ”€ 06_deploy_app_and_scripts.sh โ† agent-leak-app + *.sh ๋ฐฐํฌ (B1-2 ๋ฒ„์ „)
โ”‚   โ”œโ”€โ”€ 07_cron_schedule.sh         โ† cron ๋งค๋ถ„/๋งค์ผ ๋“ฑ๋ก
โ”‚   โ””โ”€โ”€ experiments/                โ† ์‹คํ—˜_์ ˆ์ฐจ์„œ.md ๋ฅผ ์ž๋™ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒ€์ฆ ํŒŒ์ดํ”„๋ผ์ธ
โ”‚       โ”œโ”€โ”€ 00_run_experiments.sh   โ† 4๊ฐœ ์‹คํ—˜ ์ผ๊ด„/๊ฐœ๋ณ„ ์‹คํ–‰ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ
โ”‚       โ”œโ”€โ”€ lib_experiment.sh       โ† ๊ณตํ†ต ๋„๊ตฌ (์„ค์ •ยท๊ด€์ธก ๋ฃจํ”„ยท์ฆ๊ฑฐ ์Šค๋ƒ…์ƒทยท์š”์•ฝ) โ€” ์ง์ ‘ ์‹คํ–‰ ์•ˆ ํ•จ
โ”‚       โ”œโ”€โ”€ 01_oom.sh               โ† OOM ์žฌํ˜„ยท๊ฒ€์ฆ (MEMORY_LIMIT 256โ†’512)
โ”‚       โ”œโ”€โ”€ 02_cpu.sh               โ† CPU ๊ณผ์ ์œ  ์žฌํ˜„ยท๊ฒ€์ฆ (CPU_MAX_OCCUPY 80โ†’10)
โ”‚       โ”œโ”€โ”€ 03_deadlock.sh          โ† Deadlock(freeze) ์žฌํ˜„ยท๊ฒ€์ฆ (MULTI_THREAD_ENABLE trueโ†’false)
โ”‚       โ””โ”€โ”€ 04_scheduling.sh        โ† ์Šค์ผ€์ค„๋ง ์ถ”๋ก  ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ (๋ณด๋„ˆ์Šค)
โ”‚
โ””โ”€โ”€ tools/
    โ”œโ”€โ”€ build_docs.py               โ† .md โ†’ docs/html/index.html ๋นŒ๋” (๊ณผ์ œ ์‚ฐ์ถœ๋ฌผ ์•„๋‹˜ โ€” ยง7 ์ฐธ๊ณ )
    โ””โ”€โ”€ check_req_ids.sh            โ† ์“ฐ์ด๋Š” B1-2-* ID ๊ฐ€ ๋งคํ•‘ํ‘œ์— ์ „๋ถ€ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌ (์—†์œผ๋ฉด exit 1)

B1-1 ๊ณผ ๊ฐ€์žฅ ํฐ ์ฐจ์ด๋Š” ๋‘ ๊ฐ€์ง€๋‹ค:

  1. src/05_env_and_keyfile.sh ๊ฐ€ B1-2 ์‚ฌ์–‘์œผ๋กœ ๋ฐ”๋€Œ์—ˆ๋‹ค (key ํŒŒ์ผ๋ช…, key ๊ฒฝ๋กœ ์˜๋ฏธ, ์‹คํ—˜์šฉ ENV 3์ข… ์ถ”๊ฐ€).
  2. src/06_deploy_app_and_scripts.sh ์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ด๋ฆ„์ด agent-leak-app ์œผ๋กœ ๋ฐ”๋€Œ์—ˆ๋‹ค. ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” bin/agent-leak-app ์œผ๋กœ ์ด ์ €์žฅ์†Œ์— ํฌํ•จ๋ผ ์žˆ๋‹ค(md5 0fb02e12554328b32e6e1adac861630e) โ€” ์ œ์ถœ evidence ์˜ ํ—ค๋” ํ•ด์‹œ์™€ ๊ฐ™์€ ํŒŒ์ผ์ด๋ผ, ํด๋ก ๋งŒ ํ•˜๋ฉด ๊ฐ™์€ ์‹คํ—˜์„ ๊ทธ๋Œ€๋กœ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋ฅธ ๋นŒ๋“œ(x86/arm64)๋กœ ๋ฐ”๊พธ๋ ค๋ฉด ๊ฐ™์€ ๊ฒฝ๋กœ์— ๋ฎ์–ด์“ฐ๋ฉด ๋œ๋‹ค.

3. ์‚ฌ์ „ ์ค€๋น„ (agent-leak-app ์‹คํ–‰ ์กฐ๊ฑด)

์šด์˜ ์ธก์—์„œ ์ œ๊ณตํ•œ agent-leak-app ์€ ๋ถ€ํŠธ ์‹œํ€€์Šค์—์„œ ์•„๋ž˜ ํ•ญ๋ชฉ์„ ๋ชจ๋‘ ๊ฒ€์‚ฌํ•˜๊ณ , ํ•˜๋‚˜๋ผ๋„ ์‹คํŒจํ•˜๋ฉด ์ž๋™ ๋ถ€ํŒ… ์‹คํŒจ ์ฒ˜๋ฆฌ๋œ๋‹ค.

ํ•ญ๋ชฉ ์กฐ๊ฑด
์‹คํ–‰ ๊ณ„์ • root ๊ธˆ์ง€, ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž (์˜ˆ: agent-admin)
AGENT_HOME ํ•„์ˆ˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜
AGENT_PORT 15034 ๊ณ ์ •
AGENT_UPLOAD_DIR $AGENT_HOME/upload_files (๋””๋ ‰ํ† ๋ฆฌ ์กด์žฌ)
AGENT_KEY_PATH $AGENT_HOME/api_keys (๊ฒฝ๋กœ ์กด์žฌ) โ€” B1-1 ๊ณผ ๋‹ฌ๋ฆฌ ๋””๋ ‰ํ† ๋ฆฌ
AGENT_LOG_DIR ๋””๋ ‰ํ† ๋ฆฌ ์กด์žฌ + ์“ฐ๊ธฐ ๊ถŒํ•œ
MEMORY_LIMIT ์ •์ˆ˜, 50~512 (MB)
CPU_MAX_OCCUPY ์ •์ˆ˜, 10~100 (%)
MULTI_THREAD_ENABLE true/false, 1/0, yes/no ํ—ˆ์šฉ
secret.key ํŒŒ์ผ $AGENT_HOME/api_keys/secret.key, ๋‚ด์šฉ = agent_api_key_test
๋„คํŠธ์›Œํฌ 0.0.0.0:15034 ๋ฐ”์ธ๋”ฉ ๊ฐ€๋Šฅ

.bashrc ์˜ˆ์‹œ (src/05_env_and_keyfile.sh ๊ฐ€ ์ž๋™ ๋“ฑ๋ก):

export AGENT_HOME="/home/agent-admin/agent-app"
export AGENT_PORT="15034"
export AGENT_UPLOAD_DIR="$AGENT_HOME/upload_files"
export AGENT_KEY_PATH="$AGENT_HOME/api_keys"
export AGENT_LOG_DIR="/var/log/agent-app"

# ๋ฒ ์ด์Šค๋ผ์ธ (์ •์ƒ ๊ฐ€๋™) โ€” ์‹คํ—˜ ์‹œ ์‹คํ—˜_์ ˆ์ฐจ์„œ.md ์กฐํ•ฉํ‘œ๋Œ€๋กœ ๋ฐ”๊ฟ”์„œ ์žฌ์‹คํ–‰
#   CPU_MAX_OCCUPY ๋Š” 10 ์ด์–ด์•ผ [Healthy System Monitoring] ์ด ์„ ํƒ๋œ๋‹ค.
#   95 ๋กœ ๋‘๋ฉด CPU ๊ณผ์ ์œ  ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ๊ณจ๋ผ์ ธ 34์ดˆ ๋งŒ์— ์ฃฝ๋Š”๋‹ค(exit 143). ์‹คํ—˜_์ ˆ์ฐจ์„œ.md ยง์กฐํ•ฉํ‘œ ์ฐธ๊ณ .
export MEMORY_LIMIT="512"
export CPU_MAX_OCCUPY="10"
export MULTI_THREAD_ENABLE="false"

4. ๋ถ„์„ ํ๋ฆ„ (๋ชจ๋“  ์žฅ์•  ๊ณตํ†ต)

[1] ์ •์ƒ ๊ฐ€๋™ (Baseline ์ˆ˜์ง‘)
        โ”‚  monitor.sh ๊ฐ€ 1๋ถ„ ๋‹จ์œ„๋กœ CPU/MEM/DISK ๋กœ๊ทธ
        โ–ผ
[2] ์žฅ์•  ๊ด€์ธก (Symptom)
        โ”‚  - OOM: ๋ฉ”๋ชจ๋ฆฌ ์„ ํ˜• ์ฆ๊ฐ€ โ†’ ์ข…๋ฃŒ
        โ”‚  - CPU: CPU% ๊ธ‰์ƒ์Šน โ†’ SIGTERM
        โ”‚  - Deadlock: PID ์‚ด์•„์žˆ์ง€๋งŒ ๋กœ๊ทธ/๋ฆฌ์†Œ์Šค ์ •์ง€
        โ–ผ
[3] ์ฆ๊ฑฐ ์ˆ˜์ง‘ (Evidence)
        โ”‚  monitor.log + agent-leak-app ์‹คํ–‰ ๋กœ๊ทธ + ps/top
        โ–ผ
[4] ์›์ธ ์ถ”๋ก  (Root Cause)
        โ”‚  OS ๋™์ž‘ ์›๋ฆฌ + ์•ฑ ์ •์ฑ… ๋งคํ•‘
        โ”‚  โ†’ ๋ง‰ํžˆ๋ฉด docs/md/์ด๋ก _์ง€์‹.md ์žฌ์ฐธ์กฐ
        โ–ผ
[5] ์ž„์‹œ ์กฐ์น˜ & ์žฌ๊ฒ€์ฆ (Workaround)
        โ”‚  ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์กฐ์ • โ†’ ์žฌ์‹คํ–‰ โ†’ Before/After ๋น„๊ต
        โ–ผ
[6] GitHub Issue ์ž‘์„ฑ (reports/*.md)

5. ๋น ๋ฅธ ์‹คํ–‰ ๊ฐ€์ด๋“œ

5.1 ํ™˜๊ฒฝ ๊ตฌ์ถ• (OrbStack)

(A) ํ•œ ์ค„ ์ž๋™ ์‹คํ–‰ โ€” ๊ถŒ์žฅ (macOS)

bin/agent-leak-app ์€ ์ด๋ฏธ ์ €์žฅ์†Œ์— ๋“ค์–ด ์žˆ๋‹ค. ํด๋ก ํ•œ ๊ทธ๋Œ€๋กœ, ๋จธ์‹  ์ƒ์„ฑ โ†’ ยง1~ยง7 setup โ†’ agent-leak-app ๋ถ€ํŠธ ๊ฒ€์ฆ โ†’ monitor/cron ํ™•์ธ โ†’ 3๋Œ€ ์žฅ์•  ์‹คํ—˜ โ†’ ์ฆ๊ฑฐ ์ˆ˜์ง‘๊นŒ์ง€ ํ•œ ๋ฒˆ์— ๋Œ๋ฆฐ๋‹ค. ์ฆ๊ฑฐ๋Š” ./.verify-artifacts/ ์— ๋ชจ์ธ๋‹ค.

# bin/agent-leak-app ์€ ์ด๋ฏธ ํฌํ•จ๋ผ ์žˆ๋‹ค. ๋‹ค๋ฅธ ๋นŒ๋“œ๋กœ ๊ต์ฒดํ•  ๋•Œ๋งŒ:
#   cp ~/Downloads/agent-leak-app bin/agent-leak-app

./demo.sh                 # ์‹œ์—ฐ ๋ชจ๋“œ(์„น์…˜๋งˆ๋‹ค ์—”ํ„ฐ) + ์‹คํ—˜ ์ „์ฒด(์‹ค์ธก)
./demo.sh --quick         # ์žฅ์•  ์‹คํ—˜ ๋Œ€๊ธฐ์‹œ๊ฐ„ ๋‹จ์ถ• (๋ผ์ด๋ธŒ ์‹œ์—ฐ ๊ถŒ์žฅ)
./demo.sh --no-exp        # setup + ๋ถ€ํŠธ ๊ฒ€์ฆ๊นŒ์ง€๋งŒ (์‹คํ—˜ ์ƒ๋žต)
./demo.sh --fast          # ์ผ์‹œ์ •์ง€ ์—†์ด ๋๊นŒ์ง€ (CI ์ฒ˜๋Ÿผ)

# demo.sh ์—†์ด ๋“œ๋ผ์ด๋ฒ„๋งŒ ์ง์ ‘:
./verify_orbstack.sh                  # ์‹คํ—˜ ์ „์ฒด(์‹ค์ธก โ€” OOM โ‰ค25๋ถ„ ๋“ฑ ๋งค์šฐ ๊น€)
QUICK=1 ./verify_orbstack.sh          # ์‹คํ—˜ ๋‹จ์ถ•
RUN_EXPERIMENTS=0 ./verify_orbstack.sh # setup+๋ถ€ํŠธ๋งŒ
FRESH=1 ./verify_orbstack.sh          # ๋จธ์‹  ๊นจ๋—์ด ์žฌ์ƒ์„ฑ

โš  ์‹คํ—˜ '์ „์ฒด(์‹ค์ธก)' ๋Š” ์˜๋„์ ์œผ๋กœ ์žฅ์• ๋ฅผ ์žฌํ˜„ํ•˜๋ฏ€๋กœ ๋งค์šฐ ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค (OOM โ‰ค25๋ถ„ / CPU โ‰ค15๋ถ„ / Deadlock โ‰ค10๋ถ„). ๋น ๋ฅธ ํ™•์ธ์€ --quick ๋˜๋Š” --no-exp.

(B) ์ˆ˜๋™ ๋‹จ๊ณ„ ์‹คํ–‰ (๋จธ์‹  ์•ˆ์—์„œ ์ง์ ‘)

# macOS ํ˜ธ์ŠคํŠธ
brew install orbstack
orb create ubuntu:24.04 codyssey-b1-2

# bin/agent-leak-app ์€ ์ €์žฅ์†Œ์— ํฌํ•จ๋ผ ์žˆ๋‹ค (๊ต์ฒดํ•  ๋•Œ๋งŒ cp)
orb push -m codyssey-b1-2 src/*.sh bin/agent-leak-app /tmp/

orb shell -m codyssey-b1-2

# ๋จธ์‹  ์•ˆ์—์„œ (CRLF ์ •๋ฆฌ ํ›„ setup)
sudo apt-get install -y dos2unix
dos2unix /tmp/*.sh && chmod +x /tmp/*.sh
bash /tmp/00_run_all.sh           # 7๋‹จ๊ณ„ setup ํ•œ ๋ฒˆ์—

5.2 ๋ถ€ํŠธ ์‹œํ€€์Šค ํ™•์ธ

sudo -iu agent-admin
cd $AGENT_HOME
./agent-leak-app             # ๋ชจ๋“  [OK] ๊ฐ€ ๋– ์•ผ ์ •์ƒ

5.3 ์žฅ์•  ์‹คํ—˜

์„ธ ๊ฐ€์ง€ ์žฅ์• ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์žฌํ˜„ํ•˜๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์กฐํ•ฉ๊ณผ ๊ฒ€์ฆ ๋ช…๋ น์€ ์‹คํ—˜_์ ˆ์ฐจ์„œ.md ์— ์ •๋ฆฌ๋ผ ์žˆ๋‹ค.

# ํ•œ ์ค„ ์š”์•ฝ
# (์•„๋ž˜ ์‹œ๊ฐ„ยท์‹œ๊ทธ๋‹ˆ์ฒ˜๋Š” 2026-08-26 ์‹ค์ธก๊ฐ’. ๋‚˜๋จธ์ง€ ๋‘ ๋ณ€์ˆ˜๋Š” ์•ˆ์ „๊ฐ’ MEMORY_LIMIT=512 / CPU_MAX_OCCUPY=10 ๊ณ ์ •)
# OOM     : MEMORY_LIMIT=256        โ†’ 0m34s ํ›„ exit 137, [MemoryGuard] Memory limit exceeded + Self-terminating
# CPU     : CPU_MAX_OCCUPY=80       โ†’ 0m30s ํ›„ exit 143, [CpuWorker] CPU Threshold Violated!
# Deadlock: MULTI_THREAD_ENABLE=true โ†’ ๋ถ€ํŒ… ์•ฝ 9์ดˆ ํ›„ ๋ฌด์‘๋‹ต (PID ์ƒ์กด, ์ž๊ฐ€ ์ข…๋ฃŒ ์—†์Œ)

์œ„ ์ ˆ์ฐจ๋ฅผ ์‚ฌ๋žŒ ์† ์—†์ด ์ž๋™ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด src/experiments/ ์˜ ํŒŒ์ดํ”„๋ผ์ธ์„ ์“ด๋‹ค (ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • โ†’ ์•ฑ ์‹คํ–‰ โ†’ ์ž์› ์ƒ˜ํ”Œ๋ง โ†’ ps/top/curl ์ฆ๊ฑฐ ์บก์ฒ˜ โ†’ ์ข…๋ฃŒ/freeze ํŒ์ • โ†’ Before/After ๋น„๊ต โ†’ PASS/FAIL ์š”์•ฝ):

cd $AGENT_HOME/experiments        # ๋˜๋Š” src/experiments ๋ฅผ ๋จธ์‹ ์— ํ‘ธ์‹œํ•œ ๊ฒฝ๋กœ
bash 00_run_experiments.sh selftest   # ์•ฑ ์•ˆ ๋„์šฐ๊ณ  ํ™˜๊ฒฝ/๊ถŒํ•œ๋งŒ ์ ๊ฒ€
bash 00_run_experiments.sh all        # 4๊ฐœ ํŒŒ์ดํ”„๋ผ์ธ ์ผ๊ด„ (oomโ†’cpuโ†’deadlockโ†’scheduling)
bash 01_oom.sh                        # ํŒŒ์ดํ”„๋ผ์ธ ํ•˜๋‚˜๋งŒ ๋‹จ๋… ์‹คํ–‰
QUICK=1 bash 00_run_experiments.sh all   # ๋Œ€๊ธฐ์‹œ๊ฐ„ ๋‹จ์ถ• (๋ฐฐ์„  ํ™•์ธยท๋ฐ๋ชจ์šฉ)

5.4 ๊ด€์ œ ๋ชจ๋‹ˆํ„ฐ๋ง

# ๋‹ค๋ฅธ ํ„ฐ๋ฏธ๋„
tail -f /var/log/agent-app/monitor.log              # cron ๋งค๋ถ„ ๋ˆ„์ 
tail -f $AGENT_LOG_DIR/agent_app.log               # ์•ฑ ์ž์ฒด ๋กœ๊ทธ (์•ฑ์ด ์ง์ ‘ append)
tail -f $AGENT_LOG_DIR/agent_app.out               # nohup stdout (๋ถ€ํŠธ ์‹œํ€€์Šค [1/6]~[6/6])

๋ผ์ด๋ธŒ ๊ด€์ฐฐ๋งŒ์œผ๋กœ๋Š” ๋ฆฌํฌํŠธ์— ๋„ฃ์„ ์ˆ˜์น˜๊ฐ€ ์•ˆ ๋‚˜์˜จ๋‹ค. monitor.log ์—์„œ ์ถ”์„ธ๋ฅผ ๋ฝ‘๊ฑฐ๋‚˜(grep/awk), src/report.sh ๋กœ ๊ตฌ๊ฐ„ ํ†ต๊ณ„(Max/Minยท๋„๋‹ฌ ์‹œ๊ฐยทํ‰๊ท )๋ฅผ ์‚ฐ์ถœํ•œ๋‹ค:

# ํŠน์ • PID ์˜ PROC_RSS(MB) ์‹œ๊ณ„์—ด๋งŒ ์ถ”์ถœ (Evidence ํ‘œ/๊ทธ๋ž˜ํ”„ ์žฌ๋ฃŒ)
# monitor.log ํฌ๋งท: [TS] PID:n SYS_CPU:x% SYS_MEM:y% PROC_CPU:z% PROC_RSS:wMB DISK_USED:d%
#   SYS_* = ํ˜ธ์ŠคํŠธ ์ „์ฒด / PROC_* = ๋Œ€์ƒ ํ”„๋กœ์„ธ์Šค. ํ”„๋กœ์„ธ์Šค ๋ฉ”๋ชจ๋ฆฌ ์ฆ๊ฐ€์˜ ๊ทผ๊ฑฐ๋Š” PROC_RSS ๋‹ค.
grep "PID:<pid>" /var/log/agent-app/monitor.log | awk -F'PROC_RSS:' '{print $2}' | awk -F'MB' '{print $1}'

# ๊ตฌ๊ฐ„ ํ†ต๊ณ„ โ€” ====== STATISTICS REPORT ====== ([Process RSS] Maximum โ€ฆ MB at โ€ฆ )
bash src/report.sh                                          # ์ „์ฒด
bash src/report.sh "2026-08-26 09:02:37" "2026-08-26 09:03:11"   # ๊ตฌ๊ฐ„ ์ง€์ • (OOM Before ์‹ค์ธก ๊ตฌ๊ฐ„)

6. ๋ฆฌํฌํŠธ ์ž‘์„ฑ ๊ฐ€์ด๋“œ

์„ธ ๋ฆฌํฌํŠธ ๋ชจ๋‘ ๋™์ผํ•œ 4๋‹จ ๊ตฌ์กฐ๋กœ ์“ด๋‹ค:

[Bug] {์žฅ์•  ์œ ํ˜•} - {ํ•œ ์ค„ ์š”์•ฝ}

## 1. Description (ํ˜„์ƒ ์„ค๋ช…)
- ๋ฌด์—‡์ด, ์–ธ์ œ, ์–ด๋–ค ์กฐ๊ฑด์—์„œ ๋ฐœ์ƒํ–ˆ๋‚˜

## 2. Evidence & Logs (์ฆ๊ฑฐ ์ž๋ฃŒ)
- monitor.log ๋ฐœ์ทŒ (์ˆ˜์น˜)
- ์•ฑ ๋กœ๊ทธ ํ•ต์‹ฌ ๋ผ์ธ ๋ฐœ์ทŒ
- ps/top ์ถœ๋ ฅ

## 3. Root Cause Analysis (์›์ธ ๋ถ„์„)
- ์œ„ ์ฆ๊ฑฐ๊ฐ€ OS ๋™์ž‘ ์›๋ฆฌ๋กœ ์–ด๋–ป๊ฒŒ ์„ค๋ช…๋˜๋Š”๊ฐ€
- (์ด๋ก _์ง€์‹.md ์˜ ์–ด๋А ๋ถ€๋ถ„์„ ๋Œ์–ด์™”๋Š”์ง€ ์ž๊ธฐ ์–ธ์–ด๋กœ ์ ๊ธฐ)

## 4. Workaround & Verification (์กฐ์น˜ ๋ฐ ๊ฒ€์ฆ)
- ์–ด๋–ค ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฐ”๊ฟจ๊ณ 
- Before / After ๊ฒฐ๊ณผ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋‹ฌ๋ผ์กŒ๋Š”๊ฐ€
- ๊ทผ๋ณธ ํ•ด๊ฒฐ์€ ๋ฌด์—‡์ธ๊ฐ€ (์„ ํƒ)

๐Ÿ”‘ ๋ฆฌํฌํŠธ์˜ ํ•ฉ๊ฒฉ์„ ์€ "๋™๋ฃŒ๊ฐ€ 30์ดˆ ์•ˆ์— ๋”ฐ๋ผ์˜ฌ ์ˆ˜ ์žˆ๋Š”๊ฐ€" ๋‹ค. 4๋‹จ ๊ตฌ์กฐ์˜ ๊ฐ ์„น์…˜์„ ํ•œ ๋ฒˆ์— ํ•œ ๊ฐ€์ง€ ์‚ฌ์‹ค๋งŒ ์ ๋˜, ๊ทธ ์‚ฌ์‹ค์˜ ๊ทผ๊ฑฐ๋ฅผ evidence/ ํŒŒ์ผ๊ณผ 1:1 ๋กœ ์—ฐ๊ฒฐ๋˜๊ฒŒ ์ธ์šฉํ•œ๋‹ค.


7. ์ œ์•ฝ ์‚ฌํ•ญ

  • ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๋„๊ตฌ: monitor.sh, ps, top, htop, pstree, kill, vmstat, /proc ๋“ฑ ๋ฆฌ๋ˆ…์Šค ํ‘œ์ค€ ๋„๊ตฌ
  • ๋ฐ”์ด๋„ˆ๋ฆฌ ๋””์ปดํŒŒ์ผ/๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋ง ๊ธˆ์ง€ โ€” ์™ธ๋ถ€ ๊ด€์ธก ์ •๋ณด(๋กœ๊ทธ/๊ด€์ œ)๋งŒ์œผ๋กœ ์ถ”๋ก 
  • ์ผ๋ฐ˜ ๊ณ„์ •์œผ๋กœ๋งŒ ์‹คํ–‰ (root ๊ธˆ์ง€)
  • ๋ถ„์„ยท๊ด€์ œยท๊ฒ€์ฆ ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ๋Š” Bash ๋กœ๋งŒ โ€” src/**, verify_orbstack.sh, demo.sh, tools/check_req_ids.sh ๊ฐ€ ์ „๋ถ€ ์—ฌ๊ธฐ์— ํ•ด๋‹นํ•˜๊ณ  ์˜ˆ์™ธ ์—†์ด Bash ๋‹ค
    • ์˜ˆ์™ธ๋Š” tools/build_docs.py ํ•˜๋‚˜๋ฟ์ด๋‹ค. ์ด๊ฒƒ์€ ๊ณผ์ œ ์‚ฐ์ถœ๋ฌผ์ด ์•„๋‹ˆ๋ผ ๋ฌธ์„œ HTML ๋นŒ๋”๋กœ, ์žฅ์•  ์žฌํ˜„ยท๊ด€์ œยท์ฆ๊ฑฐ ์ˆ˜์ง‘ ๊ฒฝ๋กœ ๋ฐ”๊นฅ์— ์žˆ๋‹ค. ํ•œ ๋ฒˆ๋„ ์‹คํ–‰ํ•˜์ง€ ์•Š์•„๋„ ๋ฆฌํฌํŠธ์™€ evidence ๋Š” ๊ทธ๋Œ€๋กœ ์™„์ „ํ•˜๋‹ค (ยง9 ๋ฌธ์„œ ๋นŒ๋“œ ์ฐธ๊ณ )

8. ํ•„์ˆ˜ ์ฆ๊ฑฐ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

์žฅ์•  ์ฆ๊ฑฐ
OOM monitor.log PROC_RSS ์„ ํ˜• ์ฆ๊ฐ€ ๊ตฌ๊ฐ„(SYS_MEM ์•„๋‹˜) + [MemoryGuard] Memory limit exceeded / Self-terminating process โ€ฆ ๋กœ๊ทธ + ์ข…๋ฃŒ ์ฝ”๋“œ 137 + MEMORY_LIMIT ๋ณ€๊ฒฝ ์ „/ํ›„ ์ƒ์กด์‹œ๊ฐ„ ๋น„๊ต
CPU [CpuWorker] Current Load ์ƒ์Šน ๊ณ„์—ด + /proc/<pid>/stat ๋ธํƒ€๋กœ ์žฐ ํ”„๋กœ์„ธ์Šค CPU(ํ˜ธ์ŠคํŠธ ์ „์ฒด์™€ ๋Œ€์กฐ) + [CpuWorker] CPU Threshold Violated! ๋กœ๊ทธ + ์ข…๋ฃŒ ์ฝ”๋“œ 143 + CPU_MAX_OCCUPY ๋ณ€๊ฒฝ ์ „/ํ›„ ๋น„๊ต
Deadlock ps -ef | grep agent PID ์กด์žฌ + top -H ์Šค๋ ˆ๋“œ TIME+ ์ •์ง€ + ps -L -o wchan ์˜ futex_wait_queue(์ „ ์Šค๋ ˆ๋“œ) + ์•ฑ ๋กœ๊ทธ mtime ์ •์ง€ + ๋งˆ์ง€๋ง‰ WAITING/BLOCKED ๋กœ๊ทธ + MULTI_THREAD_ENABLE=false ํšŒํ”ผ ํ™•์ธ
(๋ณด๋„ˆ์Šค) ์Šค์ผ€์ค„๋ง ์›Œ์ปค ์Šค๋ ˆ๋“œ ๋กœ๊ทธ์˜ ํƒ€์ž„์Šคํƒฌํ”„ + ์ง„ํ–‰๋ฅ  ํŒจํ„ด โ†’ RR / FCFS / Priority / CFS ์ค‘ ์–ด๋А ์‹œ๊ทธ๋‹ˆ์ฒ˜์ธ์ง€

9. ๋ฌธ์„œ ๋นŒ๋“œ (์„ ํƒ)

์„ธ ๊ฐœ์˜ .md (์ด ํŒŒ์ผ, ์‹คํ—˜_์ ˆ์ฐจ์„œ, ์ด๋ก _์ง€์‹) ์™€ 4๊ฐœ ๋ฆฌํฌํŠธ๋ฅผ ๋ฌถ์–ด ๋ณด๊ธฐ ์ข‹์€ ์ •์  HTML ๋กœ ๋นŒ๋“œ:

# ์˜์กด์„ฑ (Python 3 + markdown + pygments)
pip install markdown pygments

python3 tools/build_docs.py            # docs/html/index.html ์ƒ์„ฑ
# Windows: ๋”๋ธ”ํด๋ฆญ์œผ๋กœ ์—ด๊ธฐ / macOS: open docs/html/index.html

์ƒ์„ฑ๋œ docs/html/index.html ์€ ๋‹จ์ผ ํŒŒ์ผยท์™ธ๋ถ€ ํŒŒ์ผ ์—†์Œ ์œผ๋กœ ๋งŒ๋“ค์–ด์ ธ ์–ด๋””๋กœ ์˜ฎ๊ฒจ๋„ ๊ทธ๋Œ€๋กœ ์—ด๋ฆฐ๋‹ค. ์ขŒ์ธก ์‚ฌ์ด๋“œ๋ฐ”์—์„œ ๋ฌธ์„œ ๊ฐ„ ์ด๋™ + ์šฐ์ธก์— ํ˜„์žฌ ๋ฌธ์„œ ๋ชฉ์ฐจ๊ฐ€ ๊ฐ™์ด ๋ณด์ธ๋‹ค.

9.1 ์š”๊ตฌ์‚ฌํ•ญ ID ๊ฒ€์‚ฌ (์˜์กด์„ฑ ์—†์Œ)

๋ฆฌํฌํŠธยท์ฆ๊ฑฐ๊ฐ€ ์“ฐ๋Š” ์ž์ฒด ID(B1-2-A1 ๋“ฑ)๊ฐ€ docs/md/์š”๊ตฌ์‚ฌํ•ญ_ID_๋งคํ•‘.md ์— ์ „๋ถ€ ์ •์˜๋ผ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค. ์„ค์น˜๋„ ๋„คํŠธ์›Œํฌ๋„ ํ•„์š” ์—†๊ณ  Bash ๋งŒ ์žˆ์œผ๋ฉด ๋œ๋‹ค.

bash tools/check_req_ids.sh     # ์ •์˜ ์—†๋Š” ID ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ์œผ๋ฉด exit 1

10. ๋‹ค์Œ ๋‹จ๊ณ„ โ€” ํ•™์Šต ์ฒดํฌ๋ฆฌ์ŠคํŠธ

๋ฆฌํฌํŠธ๋ฅผ ๋‹ค ์“ด ๋’ค, ์ด๋ก _์ง€์‹.md ์˜ ยง8 ํ•™์Šต ์ฒดํฌ๋ฆฌ์ŠคํŠธ ์˜ ์งˆ๋ฌธ๋“ค์— ์ž๊ธฐ ์–ธ์–ด๋กœ ๋‹ตํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž. ๋‹ต์ด ๋ง‰ํžˆ๋Š” ํ•ญ๋ชฉ์ด ์žˆ๋‹ค๋ฉด ๊ทธ ๋ถ€๋ถ„์ด ์ด๋ฒˆ ๋ฏธ์…˜์—์„œ ๋” ์ฑ„์›Œ์•ผ ํ•  ์ด๋ก ์˜ ๋นˆ ๊ณณ์ด๋‹ค.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages