개요
서버 리소스가 부족한 환경에서 백그라운드 작업이나 무거운 배치 스크립트가 실행되면 핵심 서비스의 응답 속도가 느려질 수 있습니다. 본 글에서는 nice와 renice 명령어를 활용하여 CPU 스케줄링 우선순위를 설정하고 시스템 안정성을 유지하는 실무 팁을 알아봅니다.
1. 프로세스 우선순위(NI/PR) 확인 및 htop 모니터링 환경 구축
프로세스 우선순위 모니터링 실습을 위해 필수 도구인 htop과 procps 패키지를 설치합니다.

ps 명령어는 현재 시스템에서 실행 중인 프로세스의 상세 정보와 우선순위 값을 확인합니다.
출력된 결과에서 NI는 사용자가 조절할 수 있는 nice 값이며, PRI는 커널 스케줄러가 실제로 부여한 우선순위를 나타냅니다.
⚙️ [주요 옵션]
-e : 시스템에서 실행 중인 모든 프로세스를 선택하여 표시합니다.-o : 출력할 열 항목(pid, ni, pri, comm 등)을 사용자 지정 형식으로 설정합니다.-u : 특정 사용자가 소유한 프로세스만 필터링하여 출력합니다.-p : 지정한 특정 PID(프로세스 ID)에 해당하는 프로세스만 조회합니다.-f : 프로세스의 전체 세부 정보를 포함하는 전체 포맷 리스트를 출력합니다.

2. nice 명령어로 낮은 우선순위의 백그라운드 작업 실행하기
실습에 필요한 테스트 파일을 안전하게 생성하고 관리하기 위해 임시 작업 디렉터리를 만들고 해당 위치로 이동합니다.

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

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

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

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

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

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

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

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

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

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

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