시스템에서 프로세스 우선순위를 조정하는 것은 성능 최적화에 매우 중요합니다. nice
및 renice
명령어는 이러한 목표를 달성하는 데 핵심적인 역할을 합니다. 이번 튜토리얼에서는 리눅스 및 유닉스 계열 운영 체제에서 이러한 명령어를 효과적으로 사용하는 방법에 대해 자세히 알아보겠습니다.
프로세스 우선순위의 중요성
컴퓨터 시스템 내부에서는 사용자가 직접 실행하는 응용 프로그램 외에도 다양한 백그라운드 프로세스가 동시에 작동합니다. 이러한 프로세스는 운영 체제의 핵심 기능이나 사용자 인터페이스를 지원하며, 시스템 자원을 공유하며 작동합니다. 리눅스 커널은 이러한 프로세스들을 효율적으로 관리하고, 각 프로세스에 필요한 자원을 분배하는 역할을 합니다.
커널은 프로세스의 중요도와 우선순위를 고려하여 자원을 할당합니다. 시스템의 안정적인 작동에 필수적인 프로세스는 다른 프로세스보다 높은 우선순위를 가지게 됩니다. 따라서, 웹 브라우저와 같은 일반 응용 프로그램은 시스템 핵심 프로세스에 비해 자원 할당에서 우선순위가 낮을 수 있습니다.
nice
값의 이해
프로세스의 우선순위는 nice
값이라는 정수에 의해 결정됩니다. 모든 프로세스는 기본적으로 0의 nice
값을 가지며, 이 값은 -19에서 20 사이의 범위를 가집니다. nice
값이 높을수록 해당 프로세스는 다른 프로세스에게 더 많은 자원을 양보하게 됩니다. 반대로, nice
값이 낮을수록 프로세스는 더 많은 CPU 시간을 확보하려고 합니다. 음수 nice
값은 더 높은 우선순위를 의미하며, 이는 시스템 관리자 권한을 필요로 합니다.
nice
명령어는 프로세스 시작 시 nice
값을 설정하는 데 사용되며, renice
명령어는 이미 실행 중인 프로세스의 nice
값을 변경하는 데 사용됩니다. 각 명령어에 대한 자세한 정보는 다음 링크에서 확인할 수 있습니다. nice
명령어 설명 및 renice
명령어 설명.
nice
명령어 사용법
nice
명령어를 사용하면 특정 프로그램을 실행할 때 프로세스의 nice
값을 조정하여 우선순위를 변경할 수 있습니다. 예를 들어, ackermann
이라는 계산 집약적인 프로그램을 실행한다고 가정해 보겠습니다. 기본적으로 이 프로그램은 다음과 같이 실행될 수 있습니다.
./ackermann
top
명령어를 사용하면 실행 중인 프로세스의 목록을 볼 수 있습니다.
top
top
명령어의 출력에서 “NI” 열을 통해 ackermann
프로그램의 nice
값이 0으로 설정되어 있음을 확인할 수 있습니다. 이제, ackermann
프로그램의 nice
값을 15로 설정하여 우선순위를 낮춰 보겠습니다.
nice -15 ./ackermann
여기서 -15
는 음수 15가 아니라 긍정적인 15를 나타냅니다. -
기호는 매개변수를 전달하는 데 사용되며, 음수 값을 지정하려면 --
기호를 사용해야 합니다. 다시 top
명령어를 사용하여 ackermann
프로그램의 행동 변화를 관찰해 보겠습니다.
top
ackermann
프로그램의 nice
값이 15로 변경되어 다른 프로세스에 CPU 시간을 양보하는 것을 확인할 수 있습니다. 이제 ackermann
프로그램에 음수 nice
값을 지정하여 우선순위를 높여 보겠습니다. 이를 위해서는 시스템 관리자 권한이 필요합니다.
sudo nice --10 ./ackermann
다시 top
명령어를 실행하여 결과를 확인해 보겠습니다.
top
ackermann
프로그램의 nice
값이 -10으로 변경되어 이전보다 더 많은 CPU 시간을 사용하는 것을 확인할 수 있습니다.
renice
명령어 사용법
renice
명령어를 사용하면 이미 실행 중인 프로세스의 nice
값을 실시간으로 변경할 수 있습니다. renice
명령어는 프로세스 ID (PID)를 매개변수로 사용합니다. PID는 top
명령어 또는 ps
와 grep
명령어를 조합하여 찾을 수 있습니다.
ps -eu dave | grep ackermann
이제 PID를 사용하여 renice
명령어를 통해 ackermann
프로그램의 nice
값을 5로 변경해 보겠습니다. 시스템 관리자 권한이 필요하며, 양수 nice
값을 지정할 때는 -n
옵션을 사용합니다.
sudo renice -n 5 2339
renice
명령어는 변경된 nice
값과 이전 값을 출력하여 결과를 확인할 수 있게 해줍니다.
일반적으로 커널은 프로세스 우선순위를 효율적으로 관리하지만, CPU 사용률이 높은 작업을 실행하는 경우에는 nice
및 renice
명령어를 사용하여 프로세스의 우선순위를 적절하게 조정함으로써 시스템 전체의 성능을 개선할 수 있습니다.