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 ๊ฐ์ด ๋ฎ์์๋ก ์ฐ์ ์์ ๋์
# 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 ๊ฐ 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 ๊ถํ ํ์์ค๋ฌด ํ์ฉ ์์
# 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_processorrenice : ์ด๋ฏธ ์คํ ์ค์ธ ํ๋ก์ธ์ค์ ์ฐ์ ์์๋ฅผ ๋ณ๊ฒฝ
๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
# PID๋ก ์ฐ์ ์์ ๋ณ๊ฒฝ
renice -n 10 -p 12345
# โ PID 12345์ nice ๊ฐ์ 10์ผ๋ก ๋ณ๊ฒฝ
# ํน์ ์ฌ์ฉ์์ ๋ชจ๋ ํ๋ก์ธ์ค ์ฐ์ ์์ ๋ณ๊ฒฝ
renice -n 5 -u username
# ํน์ ๊ทธ๋ฃน์ ๋ชจ๋ ํ๋ก์ธ์ค ์ฐ์ ์์ ๋ณ๊ฒฝ
renice -n 5 -g groupname์ค๋ฌด ํ์ฉ ์์
# 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_usernice vs renice ๋น๊ต
| ํญ๋ชฉ | nice | renice |
|---|---|---|
| ์ ์ฉ ์์ | ํ๋ก์ธ์ค ์์ ์ | ์คํ ์ค์ธ ํ๋ก์ธ์ค |
| ๋์ ์ง์ | ์คํํ ๋ช ๋ น์ด | PID, ์ฌ์ฉ์, ๊ทธ๋ฃน |
| ๊ธฐ๋ณธ ๋์ | nice ๊ฐ 10 ์ฆ๊ฐ | ์ง์ ํ ๊ฐ์ผ๋ก ๋ณ๊ฒฝ |
| ์ฌ์ฉ ์ | nice -n 15 ./job.sh | renice -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