리눅스 nice 명령어: 우선순위 지정과 renice 변경, CPU를 다툴 때의 몫 실측

리눅스 nice 명령어는 프로그램을 실행할 때 CPU를 얼마나 양보할지 정하는 nice 값(-20~19)을 지정하는 명령어입니다. AlmaLinux 9 서버에서 CPU 코어 하나에 작업 둘을 묶어 nice 값을 바꿔 가며 잰 결과, 몫은 CPU를 다툴 때만 나뉘었고 nice 19 작업은 1.4%만 사용했습니다.
이미 실행 중인 프로세스는 renice로 바꾸며, 디스크 쪽 양보는 ionice가 담당합니다. 세 명령 모두 root 계정과 일반 계정에서 직접 실행한 출력 그대로 실었습니다.
1️⃣ 리눅스 nice 명령어: 값 범위와 CPU를 다툴 때의 몫
nice 값은 CPU 시간을 나눌 때의 양보 정도를 정하는 숫자이며, -20부터 19까지 지정할 수 있습니다. 보통 프로그램은 0으로 실행되고, -20이 가장 먼저 처리되며 19가 가장 많이 양보합니다.
숫자가 클수록 먼저 처리된다고 생각하기 쉽지만 nice 값은 반대입니다. 리눅스 스케줄러는 nice 값마다 무게를 정해 그 비율로 CPU 시간을 배분하며, nice 0은 1024, 10은 110, 19는 15입니다.
양보는 CPU를 다툴 때만 일어납니다. 쉬는 CPU가 있으면 nice 19 작업도 기다리지 않고 실행됩니다. 버스 노약자석에 빈자리가 있으면 누구나 앉고, 붐빌 때만 자리를 양보하는 것과 같습니다.
무게 표는 리눅스 커널 소스 [kernel/sched/core.c]의 [sched_prio_to_weight] 배열이며, nice 값이 1 오를 때마다 CPU 시간이 약 10%씩 줄어들도록 정해져 있습니다.
2️⃣ nice 기본 사용법: 숫자 생략 시 +10과 범위 밖 값
nice 뒤에 명령을 붙이면 그 명령의 nice 값을 바꿔 실행하며, 명령 없이 입력하면 지금 셸의 nice 값을 출력합니다.
nice0아래 예시는 실행된 bash가 자기 nice 값을 [ps -o ni=]로 출력하는 명령입니다. -n 없이 실행하면 지금 값에 10이 더해지고, -n 5는 5가 더해집니다.
nice bash -c 'ps -o ni= -p $$' 10nice -n 5 bash -c 'ps -o ni= -p $$' 5범위를 넘는 값은 오류 없이 끝값으로 맞춰지며, -n 50은 19로 실행됩니다.
nice -n 50 bash -c 'ps -o ni= -p $$' 19음수로 앞당기는 것은 root 계정만 가능합니다. 일반 계정은 [cannot set niceness] 경고가 출력되고, 명령은 nice 0 그대로 실행됩니다.
# 일반 계정
nice -n -5 bash -c 'ps -o ni= -p $$'nice: cannot set niceness: 허가 거부
0# root 계정
nice -n -5 bash -c 'ps -o ni= -p $$' -5nice로 실행한 명령이 다시 실행하는 자식 프로세스도 같은 nice 값으로 실행됩니다.
nice -n 7 bash -c 'sleep 1 & ps -o ni= -p $!' 7그래서 스크립트 하나를 nice로 실행하면 그 안의 명령 전체가 양보합니다.
3️⃣ renice: 실행 중인 프로세스의 nice 값 변경
nice는 실행할 때만 값을 정하므로, 이미 실행 중인 프로세스는 renice로 바꿉니다. top의 NI 열이나 ps로 PID와 지금 값을 먼저 확인합니다.
ps -o pid,ni,cmd -p 201643 PID NI CMD
201643 5 sleep 600renice -n 10 -p 201643201643 (process ID) old priority 5, new priority 10출력처럼 renice -n은 지금 값에 더하지 않고 지정한 값으로 맞추며, 5에 10을 더한 15가 아니라 10이 됩니다. 에어컨 리모컨의 ▲ 버튼으로 한 칸 올리는 것이 아니라, 희망 온도를 24도로 지정하는 것과 같습니다.
util-linux 공식 문서도 -n을 절댓값으로 설명하며, 더하는 방식은 새 판의 [–relative] 옵션이 담당합니다. 테스트한 util-linux 2.37.4에는 이 옵션이 없었습니다.
일반 계정은 자기 프로세스의 값을 올릴 수만 있고, 한 번 올린 값을 다시 낮추지 못합니다.
# 일반 계정
renice -n 10 -p 201649201649 (process ID) old priority 0, new priority 10renice -n 5 -p 201649renice: failed to set priority for 201649 (process ID): 허가 거부root 계정은 낮추는 것도 가능하며, 같은 시험에서 10을 3으로 바로 변경했습니다.
🔲 nice · renice 시뮬레이터
일반 계정으로 접속한 아래 시뮬레이터에서 nice와 renice를 직접 입력해 nice 값이 바뀌는 것을 확인할 수 있습니다.
4️⃣ CPU를 다툴 때의 몫 실측: nice 0 vs 0·10·19
nice 값을 올린다고 그 작업이 늘 느려지지는 않습니다. 같은 CPU를 두고 다른 작업과 다툴 때만 몫이 줄어듭니다.
CPU 코어 하나에 작업 둘을 묶고(taskset), 5초 동안 숫자를 하나씩 세는 아래 스크립트를 동시에 실행했습니다. 센 숫자가 클수록 CPU 시간을 많이 사용한 것입니다.
#!/bin/bash
end=$((SECONDS+5)); n=0
while [ $SECONDS -lt $end ]; do n=$((n+1)); done
echo $n스크립트는 5초가 지날 때까지 n을 1씩 늘린 뒤 마지막 값을 출력합니다.
nice 0끼리는 반씩 나눴고, nice 10은 약 10%, nice 19는 1.4%만 사용했습니다. 커널 무게로 계산한 비율(1024 : 110은 90.3 : 9.7, 1024 : 15는 98.6 : 1.4)과 같은 결과입니다.
같은 코어에서 nice 19를 혼자 실행했을 때는 5초 동안 약 65만~114만 번을 세었습니다. 양보할 상대가 없으면 nice 19도 CPU를 그대로 사용하며, 시험하는 동안 서버 부하(load average)는 3~5였습니다.
5️⃣ ionice: 디스크 쪽 양보와 스케줄러 확인
nice는 CPU 몫만 정하므로, 백업처럼 디스크를 오래 읽고 쓰는 작업은 ionice로 디스크 순서도 양보합니다. -c3(idle)으로 실행하면 다른 프로그램이 디스크를 사용하지 않을 때만 처리됩니다.
ionice -c3 bash -c 'ionice -p $$'idleionice -p $$none: prio 0아무것도 지정하지 않은 프로세스는 [none]으로 표시되며, 커널 문서 기준으로 best-effort 등급으로 처리되고 순위는 CPU nice 값에서 계산됩니다.
ionice 등급은 디스크 스케줄러가 지원할 때만 효과가 있으며, 커널 문서는 bfq와 mq-deadline을 지원 스케줄러로 적고 있습니다. 대괄호로 표시된 것이 지금 사용 중인 스케줄러입니다.
cat /sys/block/nvme0n1/queue/scheduler[none] mq-deadline kyber bfq테스트한 서버의 NVMe 디스크는 [none]이라 공식 문서 기준으로 ionice를 지정해도 효과가 없을 수 있으며, 효과는 따로 측정하지 않았습니다. 디스크 이름은 lsblk로 확인합니다.
6️⃣ nice를 사용하는 자리: 백업·크론·wp-cli
오래 걸리지만 급하지 않은 작업에 nice를 붙입니다. 백업 압축은 CPU와 디스크를 함께 사용하므로 nice와 ionice를 같이 지정합니다.
nice -n 19 ionice -c3 tar czf backup.tgz /home/example이미 실행 중인 작업이 서버를 느리게 하면 top에서 PID를 확인한 뒤 renice로 값을 올리며, 매일 실행하는 크론 작업은 명령 앞에 nice를 붙입니다.
0 3 * * * nice -n 10 /usr/local/bin/backup.sh워드프레스 서버에서 검색 치환이나 이미지 재생성 같은 큰 wp-cli 작업을 nice -n 10으로 실행하면, CPU가 바쁠 때 방문자 요청을 처리하는 php-fpm이 먼저 CPU를 사용합니다.
nice -n 10 wp media regenerate --yes반대로 php-fpm이나 웹 서버 자체에는 nice 값을 올리지 않습니다. 방문자 응답을 처리하는 프로세스가 양보하면 CPU가 바쁠 때 페이지 응답이 늦어집니다.
🔢 FAQ & 추천 콘텐츠









ℹ️ 제휴 안내
본 사이트의 콘텐츠에는 제휴 링크가 포함되어 있습니다. 방문자가 이 링크를 통해 상품 또는 서비스를 구매하면 본 사이트는 판매처로부터 수수료를 지급받습니다. 이 과정에서 구매자가 지불하는 금액(이벤트 할인 시 금액이 내려갑니다↓)은 오르지 않습니다. 게시된 가격·할인·재고 정보는 작성 시점 기준이며 실제와 다를 수 있으므로, 구매 전 판매처에서 최종 확인하시기 바랍니다. 상품 선정과 평가는 자체 기준에 따라 작성되며, 수수료 지급 여부가 소개 순서나 평가 내용에 영향을 주지 않습니다.
