웹사이트 검색

nice 및 renice 명령을 사용하여 Linux 프로세스 우선 순위를 설정하는 방법


이 도움말에서는 다음 주제인 커널 스케줄러(프로세스 스케줄러라고도 함)와 프로세스 우선순위에 대해 간략하게 설명합니다. 이 가이드의 범위. 그런 다음 약간의 Linux 프로세스 관리에 대해 살펴보겠습니다. 수정된 우선순위로 프로그램이나 명령을 실행하는 방법과 Linux 프로세스 실행 우선순위를 변경하는 방법을 살펴보겠습니다.

추가 읽기: Linux 프로세스를 모니터링하고 사용자별로 프로세스 제한을 설정하는 방법

Linux 커널 스케줄러 이해

커널 스케줄러는 실행 가능한 모든 프로세스 중에서 다음에 실행할 가장 적합한 프로세스를 결정하는 커널 단위입니다. 시스템에서 실행 가능한 프로세스 사이에 프로세서 시간을 할당합니다. 실행 가능한 프로세스는 CPU 시간만 기다리고 실행 준비가 되어 있는 프로세스입니다.

스케줄러는 우선순위 기반 스케줄링 알고리즘을 사용하여 시스템에서 실행 가능한 프로세스 중에서 선택함으로써 Linux에서 멀티태스킹의 핵심을 형성합니다. 가장 가치 있는 프로세스와 CPU 시간의 필요성을 기준으로 프로세스의 순위를 매깁니다.

프로세스 우선순위와 좋은 가치 이해

커널은 단순히 프로세스에 첨부된 스케줄링 우선순위인 프로세스 우선순위를 포함하여 프로세스에 대한 많은 정보를 저장합니다. 우선순위가 높은 프로세스는 우선순위가 낮은 프로세스보다 먼저 실행되고, 우선순위가 같은 프로세스는 차례로 반복적으로 예약됩니다.

Linux에는 총 140개의 우선순위와 두 가지 우선순위 범위가 구현되어 있습니다. 첫 번째는 -20(가장 높은 우선순위 값)에서 19(가장 낮은 우선순위 값)까지의 범위를 갖는 nice 값(niceness)이고 기본값은 0이며, 이 가이드에서 이에 대해 알아볼 것입니다. 다른 하나는 실시간 우선순위로, 기본적으로 1부터 99까지, 그 다음에는 100부터 139까지입니다. 사용자 공간을 위한 것입니다.

Linux의 한 가지 중요한 특징은 나중에 살펴보겠지만 필요에 따라 프로세스의 좋은 값을 변경(증가 또는 감소)할 수 있는 동적 우선순위 기반 스케줄링입니다.

Linux 프로세스의 좋은 가치를 확인하는 방법

프로세스의 좋은 값을 보려면 ps, top 또는 htop과 같은 유틸리티를 사용할 수 있습니다.

사용자 정의 형식의 ps 명령을 사용하여 프로세스의 좋은 값을 보려면(여기서 NI 열은 프로세스의 좋은 정도를 보여줍니다).

ps -eo pid,ppid,ni,comm

또는 top 또는 htop 유틸리티를 사용하여 표시된 대로 Linux 프로세스의 좋은 값을 볼 수 있습니다.

top
htop

PR 또는 PRI와 NI의 차이점

위의 tophtop 출력에서 수용적으로 PRPRI라는 열이 있음을 알 수 있습니다. 프로세스의 우선순위를 보여줍니다.

따라서 이는 다음을 의미합니다.

  • NI – 사용자 공간 개념인 좋은 값이고,
  • PR 또는 PRI – Linux 커널에 표시되는 프로세스의 실제 우선순위입니다.
PR 또는 PRI 값을 계산하는 방법
Total number of priorities = 140
Real time priority range(PR or PRI):  0 to 99 
User space priority range: 100 to 139

좋은 값 범위(NI): -20~19

PR = 20 + NI
PR = 20 + (-20 to + 19)
PR = 20 + -20  to 20 + 19
PR = 0 to 39 which is same as 100 to 139.

그러나 아래 스크린샷에 표시된 것처럼 숫자가 아닌 rt가 표시되면 기본적으로 프로세스가 실시간 예약 우선순위에 따라 실행되고 있음을 의미합니다.

Linux에서 주어진 Nice 값으로 명령을 실행하는 방법

여기서는 프로그램이나 명령의 CPU 사용 우선순위를 지정하는 방법을 살펴보겠습니다. CPU를 매우 많이 사용하는 프로그램이나 작업이 있지만 완료하는 데 시간이 오래 걸릴 수 있다는 점을 알고 있는 경우 nice 명령을 사용하여 높거나 유리한 우선순위를 설정할 수 있습니다.

구문은 다음과 같습니다.

nice -n niceness-value [command args] 
OR
nice -niceness-value [command args] 	#it’s confusing for negative values
OR
nice --adjustment=niceness-value [command args]

중요한:

  • 값이 제공되지 않으면 nice는 기본적으로 우선순위를 10으로 설정합니다.
  • nice 없이 실행되는 명령이나 프로그램의 기본값은 0입니다.
  • 루트만이 우선순위가 높거나 높은 명령이나 프로그램을 실행할 수 있습니다.
  • 일반 사용자는 우선 순위가 낮은 명령이나 프로그램만 실행할 수 있습니다.

예를 들어 기본 우선순위로 프로그램이나 명령을 시작하는 대신 다음 nice 명령을 사용하여 특정 우선순위로 시작할 수 있습니다.

sudo nice -n 5 tar -czf backup.tar.gz ./Documents/*
OR
sudo nice --adjustment=5 tar -czf backup.tar.gz ./Documents/*

특히 음의 niceness 값에 대해 약간 혼란스러운 세 번째 방법을 사용할 수도 있습니다.

sudo nice -5 tar -czf backup.tar.gz  ./Documents/*

Linux에서 프로세스의 예약 우선순위 변경

앞서 언급했듯이 Linux는 동적 우선순위 기반 스케줄링을 허용합니다. 따라서 프로그램이 이미 실행 중인 경우 다음 형식의 renice 명령을 사용하여 우선순위를 변경할 수 있습니다.

renice -n  -12  -p 1055
renice -n -2  -u apache

아래의 샘플 top 출력에서 PID가 1055teamspe+의 성능은 이제 -12이며 모든 사용자 apache가 소유한 프로세스는 -2입니다.

이 출력을 계속 사용하면 PR=20 + NI 공식을 볼 수 있습니다.

PR for ts3server = 20 + -12 = 8
PR for apache processes = 20 + -2 = 18

사용자 프로세스의 nice 값에 대해 renice 명령을 사용하여 변경한 모든 내용은 다음에 재부팅할 때까지만 적용됩니다. 영구 기본값을 설정하려면 다음 섹션을 읽어보세요.

특정 사용자 프로세스의 기본 Nice 값을 설정하는 방법

/etc/security/limits.conf 파일에서 특정 사용자 또는 그룹의 기본 nice 값을 설정할 수 있습니다. 주요 기능은 PAM을 통해 로그인한 사용자에 대한 리소스 제한을 정의하는 것입니다.

사용자에 대한 제한을 정의하는 구문은 다음과 같습니다. 다양한 열의 가능한 값은 파일에 설명되어 있습니다.

#<domain>   <type>  <item>  <value>

이제 아래 구문을 사용하세요. 여기서 hard는 하드 링크를 적용하는 것을 의미하고 Soft는 소프트 제한을 적용하는 것을 의미합니다.

<username>  <hard|soft>  priority  <nice value>

또는 위 기본 파일의 설정을 재정의하는 /etc/security/limits.d/ 아래에 파일을 생성하면 이 파일을 알파벳순으로 읽습니다.

tecmint 사용자를 위한 /etc/security/limits.d/tecmint-priority.conf 파일을 생성하여 시작하십시오.

vi /etc/security/limits.d/tecmint-priority.conf

그런 다음 다음 구성을 추가합니다.

tecmint  hard  priority  10

파일을 저장하고 닫습니다. 이제부터 tecmint가 소유한 모든 프로세스는 10의 좋은 값과 30의 PR을 갖게 됩니다.

자세한 내용은 nicerenice의 매뉴얼 페이지를 읽어보세요.

man nice
man renice 

Linux 프로세스 관리에 대한 다음 기사를 읽어볼 수도 있습니다.

  1. Linux에서 실행 중인 프로세스를 찾아 종료하는 방법
  2. Linux에서 프로세스를 종료하기 위한 Kill, Pkill 및 Killall 명령 가이드
  3. 시스템 사용량, 중단을 모니터링하고 Linux 서버 문제를 해결하는 방법
  4. CPUTool - Linux에서 모든 프로세스의 CPU 사용률을 제한하고 제어합니다.

이 기사에서는 커널 스케줄러, 프로세스 우선순위에 대해 간략하게 설명하고, 수정된 우선순위로 프로그램이나 명령을 실행하는 방법과 활성 Linux 프로세스의 우선순위를 변경하는 방법을 살펴보았습니다. 아래 피드백 양식을 통해 이 주제에 관한 의견을 공유할 수 있습니다.