리눅스 서버가 버벅일 때 필수! nice 명령어로 프로세스 우선순위 완벽 조절하기

개요

서버 리소스가 부족한 환경에서 백그라운드 작업이나 무거운 배치 스크립트가 실행되면 핵심 서비스의 응답 속도가 느려질 수 있습니다. 본 글에서는 nice와 renice 명령어를 활용하여 CPU 스케줄링 우선순위를 설정하고 시스템 안정성을 유지하는 실무 팁을 알아봅니다.

1. 프로세스 우선순위(NI/PR) 확인 및 htop 모니터링 환경 구축

프로세스 우선순위 모니터링 실습을 위해 필수 도구인 htop과 procps 패키지를 설치합니다.

apt-get update -qq && apt-get install -y htop procps

ps 명령어는 현재 시스템에서 실행 중인 프로세스의 상세 정보와 우선순위 값을 확인합니다.
출력된 결과에서 NI는 사용자가 조절할 수 있는 nice 값이며, PRI는 커널 스케줄러가 실제로 부여한 우선순위를 나타냅니다.
⚙️ [주요 옵션]

-e : 시스템에서 실행 중인 모든 프로세스를 선택하여 표시합니다.
-o : 출력할 열 항목(pid, ni, pri, comm 등)을 사용자 지정 형식으로 설정합니다.
-u : 특정 사용자가 소유한 프로세스만 필터링하여 출력합니다.
-p : 지정한 특정 PID(프로세스 ID)에 해당하는 프로세스만 조회합니다.
-f : 프로세스의 전체 세부 정보를 포함하는 전체 포맷 리스트를 출력합니다.

ps -eo pid,ni,pri,comm | head -n 15

2. nice 명령어로 낮은 우선순위의 백그라운드 작업 실행하기

실습에 필요한 테스트 파일을 안전하게 생성하고 관리하기 위해 임시 작업 디렉터리를 만들고 해당 위치로 이동합니다.

mkdir -p /tmp/nice_demo && cd /tmp/nice_demo

nice 명령어로 nice 값을 10으로 지정하여 CPU 자원 점유율을 양보하도록 우선순위를 낮춘 상태에서 대용량 파일 생성 작업을 백그라운드(&)로 실행합니다.

nice -n 10 dd if=/dev/urandom of=/tmp/nice_demo/sample.dat bs=1M count=100 &

ps 명령어와 grep을 조합하여 실행 중인 dd 프로세스의 PID와 함께 실제 반영된 nice 값(NI)이 의도한 대로 설정되었는지 확인합니다.

ps -eo pid,ni,comm | grep dd

3. renice 명령어로 이미 실행 중인 프로세스 우선순위 실시간 변경

실시간 우선순위 변경 실습을 위해 300초 동안 대기하는 sleep 프로세스를 백그라운드(&)로 실행합니다.

sleep 300 &

가장 최근에 백그라운드로 실행한 프로세스의 ID(PID)를 나타내는 특수 변수 $!를 활용하여 환경변수 TARGET_PID에 저장합니다.

TARGET_PID=$!

ps 명령어로 대상 프로세스의 현재 nice 값(NI)을 확인하며, 기본값인 0으로 동작 중임을 알 수 있습니다.

ps -p $TARGET_PID -o pid,ni,comm

renice 명령어를 사용하여 이미 실행 중인 대상 프로세스의 nice 값을 15로 변경하여 우선순위를 낮춥니다.
출력 결과를 통해 기존 우선순위(old priority 0)가 새로운 우선순위(new priority 15)로 정상 변경되었음을 확인할 수 있습니다.

renice 15 -p $TARGET_PID

ps 명령어로 대상 프로세스를 다시 조회하여 nice 값(NI)이 15로 즉시 반영되었는지 확인합니다.

ps -p $TARGET_PID -o pid,ni,comm

실습이 완료된 테스트 프로세스를 강제 종료(kill -9)하여 시스템 자원을 정리합니다.

kill -9 $TARGET_PID

4. root 권한을 이용한 높은 우선순위(음수 nice) 부여 및 주의점

일반 사용자는 설정할 수 없는 음수 nice 값(-5)을 적용하기 위해 sudo 관리자 권한을 사용하여 우선순위를 높인 프로세스를 백그라운드(&)로 실행합니다.
음수 nice 값을 부여받은 프로세스는 CPU 스케줄링 시 더 높은 실행 우선순위를 갖게 되므로 시스템 자원을 집중적으로 할당받을 수 있습니다.

sudo nice -n -5 bash -c ’echo “High priority process running” && sleep 5’ &

ps 명령어로 실행 중인 프로세스를 조회하여 대상 프로세스(sleep)의 nice 값(NI)이 -5로 정상 반영되었는지 확인합니다.
출력 결과에서 일반적인 기본 프로세스(0)와 달리 음수 nice 값(-5)이 설정되어 높은 우선순위로 동작 중임을 확인할 수 있습니다.

ps -eo pid,ni,comm | grep -E ‘sleep|bash’ | tail -n 5

지금까지 리눅스 서버가 버벅일 때 유용하게 활용할 수 있는 nice 명령어로 프로세스 우선순위를 조절하는 방법을 간단하게 살펴보았습니다.
서버 자원이 부족할 때 상황에 맞는 우선순위를 지정하여 시스템을 훨씬 안정적이고 쾌적하게 운영해 보시기 바랍니다.