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

공정위 광고 문구 Ver 3.1
공정위 광고 문구 Ver 3.2(모바일 전용)
테스트 환경RHEL 계열AlmaLinux 9.8root · 일반 사용자 계정2026-10-17 확인

리눅스 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 작업도 기다리지 않고 실행됩니다. 버스 노약자석에 빈자리가 있으면 누구나 앉고, 붐빌 때만 자리를 양보하는 것과 같습니다.

🧭 CPU가 남을 때와 다툴 때의 nice 값
설명 다이어그램
🖥️ CPU
⚖️ 작업 B
🖥️ 쉬는 CPU가 있어 작업마다 코어 하나씩🖥️ CPU 코어 하나를 작업 둘이 사용
작업 Anice 0 · 무게 1024
100%50.0%90.3%98.6%
작업 Bnice 0 · 무게 1024nice 10 · 무게 110nice 19 · 무게 15
100%50.0%9.7%1.4%
CPU가 남으면 양보할 상대가 없어, 작업 B는 nice 값과 상관없이 CPU를 그대로 사용합니다.
같은 코어를 두고 다투면 무게가 같은 nice 0끼리는 CPU 시간을 반씩 나눕니다.
nice 10의 무게는 110으로 nice 0(1024)의 약 9분의 1이며, CPU 시간은 약 90.3 : 9.7로 배분됩니다.
nice 19의 무게는 15이며, 다툴 때 작업 B는 CPU 시간의 약 1.4%만 사용합니다.

무게 표는 리눅스 커널 소스 [kernel/sched/core.c]의 [sched_prio_to_weight] 배열이며, nice 값이 1 오를 때마다 CPU 시간이 약 10%씩 줄어들도록 정해져 있습니다.

2️⃣ nice 기본 사용법: 숫자 생략 시 +10과 범위 밖 값

nice 뒤에 명령을 붙이면 그 명령의 nice 값을 바꿔 실행하며, 명령 없이 입력하면 지금 셸의 nice 값을 출력합니다.

nice
0

아래 예시는 실행된 bash가 자기 nice 값을 [ps -o ni=]로 출력하는 명령입니다. -n 없이 실행하면 지금 값에 10이 더해지고, -n 5는 5가 더해집니다.

nice bash -c 'ps -o ni= -p $$'
 10
nice -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 $$'
 -5

nice로 실행한 명령이 다시 실행하는 자식 프로세스도 같은 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 600
renice -n 10 -p 201643
201643 (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 201649
201649 (process ID) old priority 0, new priority 10
renice -n 5 -p 201649
renice: failed to set priority for 201649 (process ID): 허가 거부

root 계정은 낮추는 것도 가능하며, 같은 시험에서 10을 3으로 바로 변경했습니다.

🔲 nice · renice 시뮬레이터

일반 계정으로 접속한 아래 시뮬레이터에서 nice와 renice를 직접 입력해 nice 값이 바뀌는 것을 확인할 수 있습니다.

nice 명령어 시뮬레이터nice 8.32 · renice 2.37.4
[root@server work]#
브라우저 안에서만 동작하며 실제 프로세스는 건드리지 않습니다. 일반 계정으로 접속한 가상 서버이며, nice 값을 바꿔 실행하거나 renice로 backup.sh(PID 2481)의 값을 바꾼 뒤 ps -o pid,ni,cmd로 확인할 수 있습니다. 키보드 ↑↓ 로 앞에서 쓴 명령을 다시 불러옵니다.

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씩 늘린 뒤 마지막 값을 출력합니다.

📊CPU 코어 하나를 다툰 5초5초 동안 센 횟수
앞 작업 nice 0뒤 작업
nice 0 vs nice 0
무게가 같은 두 작업.
025만50만75만100만
nice 0497,596번48.8%
nice 0522,040번51.2%
nice 0 vs nice 10
뒤 작업만 nice 10으로 실행.
025만50만75만100만
nice 0979,971번90.1%
nice 10107,671번9.9%
nice 0 vs nice 19
뒤 작업만 nice 19로 실행.
025만50만75만100만
nice 0909,895번98.6%
nice 1913,010번1.4%
숫자는 2026년 10월 17일 AlmaLinux 9 서버에서 두 작업을 CPU 코어 하나에 묶어 동시에 5초씩 실행한 결과입니다.

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 $$'
idle
ionice -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 & 추천 콘텐츠

일반 프로세스는 top의 PR이 20에 nice 값을 더한 값으로 표시됩니다. nice 5로 실행한 프로세스는 PR 25, NI 5로 나왔으며, ps의 PRI 열은 계산 방식이 달라 같은 프로세스가 14로 표시되었습니다.

nice는 지정한 값을 지금 nice 값에 더합니다. [nice -n 5 nice -n 3 nice]는 8을 출력하며, 지정한 값으로 맞추는 renice -n과 다른 방식입니다.

서비스 유닛 파일의 [Service] 절에 [Nice=]를 적으면 그 서비스가 실행하는 프로세스의 nice 값이 정해집니다. systemd.exec 공식 문서 기준으로 -20부터 19까지 지정할 수 있습니다.

🧭 프로세스와 작업 예약 추천 콘텐츠 글 11 · 참조 4
🗂️ 프로세스와 작업 예약
📄 ps 명령어 📄 top 명령어 📄 리눅스 nice 명령어 📄 kill 명령어 📄 killall 명령어 📄 백그라운드&포그라운드 📄 uptime 명령어
📄 crontab 설정
📋 WP CLI: 설치 및 설정 📄 WP-Cron(wp-cron.php) 📄 동기화된 패턴 찾기: WP-CLI
📡 GNU Coreutils nice invocation 📡 renice(1) Linux manual page 📡 Block io priorities(커널 문서) 📡 sched_prio_to_weight(커널 소스)
ps 명령어로 프로세스 확인
Linux · 프로세스
ps 명령어(프로세스 명령어)
ps 명령어는 현재 실행 중인 프로세스를 출력하는 명령어입니다.
글 보기 →현재 콘텐츠
리눅스 TOP 명령어: 명령줄 인터페이스(CLI-Command-Line Interface)
Linux · 프로세스
리눅스 top 명령어(CPU, 메모리 점유율 확인)
리눅스 top 명령어는 구동 중인 OS의 상태를 보여주는 명령어이며 table of processes의 뜻을 가지고 있습니다.
글 보기 →현재 콘텐츠
리눅스 nice 명령어 nice 0과 nice 0·10·19가 CPU 코어 하나를 다툰 5초 실측 막대
Linux · 프로세스
리눅스 nice 명령어: 우선순위 지정과 renice 변경, CPU를 다툴 때의 몫 실측
리눅스 nice 명령어는 프로그램을 실행할 때 CPU를 얼마나 양보할지 정하는 nice 값(-20~19)을 지정하는 명령어입니다.
글 보기 →현재 콘텐츠
리눅스 커맨드 라인 인터페이스(Linux command line Interface-CLI)
Linux · 프로세스
리눅스 kill 명령어[kill -9 PID]
리눅스 kill 명령어는 사용 중인 프로세스를 종료하는 명령어입니다.
글 보기 →현재 콘텐츠
리눅스 killall 명령어 버전 정보 확인
Linux · 프로세스
리눅스 killall 명령어: 설치, 사용 방법과 옵션
리눅스 killall 명령어는 특정 프로세스를 한번에 종료 시키는 명령어입니다.
글 보기 →현재 콘텐츠
리눅스 이미지
Linux · 프로세스
리눅스 백그라운드(Back Ground)&포그라운드(Fore Ground): 프로세스 제어하기
리눅스의 프로세스는 백그라운드(Back Ground)와 포그라운드(Fore Ground) 두 가지의 모드로 작동됩니다.
글 보기 →현재 콘텐츠
리눅스 기초(The Linux Foundation)
Linux · 서버 부하
리눅스 uptime 명령어(서버 가동 시간&1,5,15 평균 로드 확인)
리눅스 uptime 명령어는 시스템의 평균 부하율과 서버의 가동 시간을 확인하는 명령어입니다.
글 보기 →현재 콘텐츠

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

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Prove your humanity: 0   +   1   =