Alert

์ด ๊ธ€์€ Claude Code์˜ ๋„์›€์„ ๋ฐ›์•„ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค

nice์™€ renice : ํ”„๋กœ์„ธ์Šค ์šฐ์„ ์ˆœ์œ„ ์ œ์–ด

๋ฐฐ๊ฒฝ : Linux ํ”„๋กœ์„ธ์Šค ์Šค์ผ€์ค„๋ง๊ณผ ์šฐ์„ ์ˆœ์œ„
  • Linux ์ปค๋„์€ CPU ์‹œ๊ฐ„์„ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค์— ๋ถ„๋ฐฐํ•˜๋Š”๋ฐ, ์ด๋•Œ ๊ฐ ํ”„๋กœ์„ธ์Šค์˜ ์šฐ์„ ์ˆœ์œ„(priority) ๋ฅผ ์ฐธ๊ณ 
  • ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋” ๋งŽ์€ CPU ์‹œ๊ฐ„์„ ํ• ๋‹น๋ฐ›์Œ
  • ์šฐ์„ ์ˆœ์œ„์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ๊ฐ’์ด ๋ฐ”๋กœ nice ๊ฐ’
nice ๊ฐ’ (Niceness)
  • ๋ฒ”์œ„ : -20 ~ 19
    • -20 : ๊ฐ€์žฅ ๋†’์€ ์šฐ์„ ์ˆœ์œ„ (๊ฐ€์žฅ โ€œ์ด๊ธฐ์ ์ธโ€ ํ”„๋กœ์„ธ์Šค)
    • 19 : ๊ฐ€์žฅ ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„ (๊ฐ€์žฅ โ€œ์–‘๋ณดํ•˜๋Š”โ€ ํ”„๋กœ์„ธ์Šค)
    • 0 : ๊ธฐ๋ณธ๊ฐ’
  • โ€œniceโ€๋ผ๋Š” ์ด๋ฆ„์˜ ์˜๋ฏธ : ๊ฐ’์ด ํด์ˆ˜๋ก ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์–‘๋ณด(nice) ํ•œ๋‹ค๋Š” ๋œป
  • nice ๊ฐ’๊ณผ ์‹ค์ œ ์ปค๋„ ์šฐ์„ ์ˆœ์œ„(PRI)์˜ ๊ด€๊ณ„
    • PRI = 20 + nice (์ผ๋ฐ˜์ ์œผ๋กœ)
    • PRI ๊ฐ’์ด ๋‚ฎ์„์ˆ˜๋ก ์šฐ์„ ์ˆœ์œ„ ๋†’์Œ
ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค์˜ nice ๊ฐ’ ํ™•์ธ
# ps๋กœ ํ™•์ธ (NI ์ปฌ๋Ÿผ)
ps -el | head -5
#   F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
#   4 S     0     1     0  0  80   0 -  ...  -      ?        00:00:03 systemd
 
# top์—์„œ๋„ NI ์ปฌ๋Ÿผ์œผ๋กœ ํ™•์ธ ๊ฐ€๋Šฅ
top
# PID USER  PR  NI    VIRT    RES    SHR S  %CPU  %MEM   TIME+ COMMAND
#   1 root  20   0  ...                                   systemd
 
# ํŠน์ • ํ”„๋กœ์„ธ์Šค์˜ nice ๊ฐ’๋งŒ ํ™•์ธ
ps -o pid,ni,comm -p <PID>

nice : ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์ •

๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•
nice ๋ช…๋ น์–ด
# ๊ธฐ๋ณธ: nice ๊ฐ’ 10์œผ๋กœ ์‹คํ–‰ (๊ธฐ๋ณธ ์ฆ๊ฐ€๋ถ„์ด 10)
nice long_running_script.sh
 
# nice ๊ฐ’์„ ์ง€์ •ํ•˜์—ฌ ์‹คํ–‰
nice -n 15 python heavy_batch_job.py
# โ†’ nice ๊ฐ’ 15๋กœ ์‹คํ–‰ (๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„, ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ์–‘๋ณด)
 
nice -n -5 ./critical_service
# โ†’ nice ๊ฐ’ -5๋กœ ์‹คํ–‰ (๋†’์€ ์šฐ์„ ์ˆœ์œ„)
# โš ๏ธ ์Œ์ˆ˜ ๊ฐ’์€ root ๊ถŒํ•œ ํ•„์š”
์‹ค๋ฌด ํ™œ์šฉ ์˜ˆ์‹œ
nice ์‹ค๋ฌด ์˜ˆ์‹œ
# 1. ๋ฐฑ์—… ์ž‘์—… : CPU๋ฅผ ๋งŽ์ด ์“ฐ์ง€๋งŒ ๊ธ‰ํ•˜์ง€ ์•Š์œผ๋‹ˆ ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„๋กœ
nice -n 19 tar -czf /backup/data.tar.gz /data/
 
# 2. ๋กœ๊ทธ ์••์ถ• : ์„œ๋น„์Šค์— ์˜ํ–ฅ ์ฃผ์ง€ ์•Š๋„๋ก
nice -n 15 gzip /var/log/app-2026-03-30.log
 
# 3. ๋ฐฐ์น˜ ์ž‘์—… (ETL ๋“ฑ) : ์šด์˜ ์„œ๋น„์Šค๋ณด๋‹ค ํ›„์ˆœ์œ„๋กœ
nice -n 10 python etl_pipeline.py
 
# 4. ์ค‘์š”ํ•œ ์„œ๋น„์Šค : ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋กœ ์‹คํ–‰ (root ํ•„์š”)
sudo nice -n -10 ./realtime_processor

renice : ์ด๋ฏธ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ณ€๊ฒฝ

๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•
renice ๋ช…๋ น์–ด
# PID๋กœ ์šฐ์„ ์ˆœ์œ„ ๋ณ€๊ฒฝ
renice -n 10 -p 12345
# โ†’ PID 12345์˜ nice ๊ฐ’์„ 10์œผ๋กœ ๋ณ€๊ฒฝ
 
# ํŠน์ • ์‚ฌ์šฉ์ž์˜ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค ์šฐ์„ ์ˆœ์œ„ ๋ณ€๊ฒฝ
renice -n 5 -u username
 
# ํŠน์ • ๊ทธ๋ฃน์˜ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค ์šฐ์„ ์ˆœ์œ„ ๋ณ€๊ฒฝ
renice -n 5 -g groupname
์‹ค๋ฌด ํ™œ์šฉ ์˜ˆ์‹œ
renice ์‹ค๋ฌด ์˜ˆ์‹œ
# 1. CPU๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์ ์œ ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค ๋ฐœ๊ฒฌ ์‹œ
top
# PID 8823์ด CPU 95% ์‚ฌ์šฉ ์ค‘ โ†’ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋‚ฎ์ถฐ์„œ ๋‹ค๋ฅธ ์„œ๋น„์Šค์— ์–‘๋ณด์‹œํ‚ด
renice -n 19 -p 8823
 
# 2. ๋ฐ˜๋Œ€๋กœ ์ค‘์š”ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋А๋ ค์งˆ ๋•Œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋†’์ž„ (root ํ•„์š”)
sudo renice -n -10 -p 5567
 
# 3. ํŠน์ • ์‚ฌ์šฉ์ž์˜ ๋ฐฐ์น˜ ์ž‘์—… ์ „์ฒด๋ฅผ ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„๋กœ
sudo renice -n 15 -u batch_user

nice vs renice ๋น„๊ต

ํ•ญ๋ชฉnicerenice
์ ์šฉ ์‹œ์ ํ”„๋กœ์„ธ์Šค ์‹œ์ž‘ ์‹œ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค
๋Œ€์ƒ ์ง€์ •์‹คํ–‰ํ•  ๋ช…๋ น์–ดPID, ์‚ฌ์šฉ์ž, ๊ทธ๋ฃน
๊ธฐ๋ณธ ๋™์ž‘nice ๊ฐ’ 10 ์ฆ๊ฐ€์ง€์ •ํ•œ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ
์‚ฌ์šฉ ์˜ˆnice -n 15 ./job.shrenice -n 15 -p 1234

๊ถŒํ•œ ์ œํ•œ

๋™์ž‘์ผ๋ฐ˜ ์‚ฌ์šฉ์žroot
nice ๊ฐ’ ๋†’์ด๊ธฐ (0 โ†’ 19)โœ… ๊ฐ€๋Šฅโœ… ๊ฐ€๋Šฅ
nice ๊ฐ’ ๋‚ฎ์ถ”๊ธฐ (0 โ†’ -20)โŒ ๋ถˆ๊ฐ€โœ… ๊ฐ€๋Šฅ
ํ•œ๋ฒˆ ๋†’์ธ nice ๊ฐ’ ๋‹ค์‹œ ๋‚ฎ์ถ”๊ธฐโŒ ๋ถˆ๊ฐ€โœ… ๊ฐ€๋Šฅ
๋‹ค๋ฅธ ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค ๋ณ€๊ฒฝโŒ ๋ถˆ๊ฐ€โœ… ๊ฐ€๋Šฅ
  • ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋Š” ์ž๊ธฐ ํ”„๋กœ์„ธ์Šค์˜ nice ๊ฐ’์„ ๋†’์ด๋Š” ๊ฒƒ(์šฐ์„ ์ˆœ์œ„ ๋‚ฎ์ถ”๊ธฐ)๋งŒ ๊ฐ€๋Šฅ
  • ํ•œ๋ฒˆ ์–‘๋ณด(nice ๊ฐ’ ์ฆ๊ฐ€)ํ•˜๋ฉด ๋‹ค์‹œ ๋˜๋Œ๋ฆด ์ˆ˜ ์—†์Œ โ†’ root๋งŒ ๊ฐ€๋Šฅ
๊ถŒํ•œ ์ œํ•œ ํ™•์ธ
# ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๊ฐ€ ์Œ์ˆ˜ nice ๊ฐ’ ์‹œ๋„ ์‹œ
nice -n -5 ./script.sh
# nice: cannot set niceness: Permission denied
 
# root๋กœ ์‹คํ–‰ํ•˜๋ฉด ๊ฐ€๋Šฅ
sudo nice -n -5 ./script.sh

์ฐธ๊ณ  : nice์™€ ํ•จ๊ป˜ ์•Œ๋ฉด ์ข‹์€ ๋ช…๋ น์–ด

๊ด€๋ จ ๋ช…๋ น์–ด
# 1. ionice : ๋””์Šคํฌ I/O ์šฐ์„ ์ˆœ์œ„ ์ œ์–ด (nice๋Š” CPU ์šฐ์„ ์ˆœ์œ„)
ionice -c 3 -p 12345          # Idle ํด๋ž˜์Šค๋กœ ๋ณ€๊ฒฝ (๋‹ค๋ฅธ I/O ์—†์„ ๋•Œ๋งŒ ์‚ฌ์šฉ)
ionice -c 2 -n 7 dd if=/dev/sda of=/backup/disk.img  # Best-effort, ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„
 
# 2. nice + ionice ์กฐํ•ฉ : CPU์™€ I/O ๋ชจ๋‘ ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„๋กœ
nice -n 19 ionice -c 3 tar -czf /backup/full.tar.gz /data/
 
# 3. cpulimit : CPU ์‚ฌ์šฉ๋ฅ  ์ž์ฒด๋ฅผ ์ œํ•œ (nice์™€๋Š” ๋‹ค๋ฅธ ์ ‘๊ทผ)
cpulimit -l 30 -p 12345      # PID 12345์˜ CPU ์‚ฌ์šฉ๋ฅ ์„ 30%๋กœ ์ œํ•œ
 
# 4. cgroups : ํ”„๋กœ์„ธ์Šค ๊ทธ๋ฃน ๋‹จ์œ„๋กœ ๋ฆฌ์†Œ์Šค(CPU, ๋ฉ”๋ชจ๋ฆฌ, I/O) ์ œํ•œ
# systemd๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์„œ๋น„์Šค ๋‹จ์œ„๋กœ ์„ค์ • ๊ฐ€๋Šฅ
# /etc/systemd/system/myservice.service ์—์„œ:
# [Service]
# CPUWeight=50
# Nice=10