Wyszukiwanie w witrynie

Jak ustawić priorytet procesu w systemie Linux za pomocą poleceń nice i renice


W tym artykule pokrótce wyjaśnimy harmonogram jądra (znany również jako harmonogram procesów) i priorytet procesu, które są tematami wykraczającymi poza zakres tego przewodnika. Następnie zagłębimy się w zarządzanie procesami w Linuksie: zobaczmy, jak uruchomić program lub polecenie ze zmodyfikowanym priorytetem, a także zmienić priorytet uruchomionych procesów w Linuksie.

Przeczytaj także: Jak monitorować procesy systemu Linux i ustawiać limity procesów dla poszczególnych użytkowników

Zrozumienie harmonogramu jądra systemu Linux

Harmonogram jądra to jednostka jądra, która określa najbardziej odpowiedni proces spośród wszystkich możliwych do uruchomienia procesów, który ma zostać wykonany w następnej kolejności; przydziela czas procesora pomiędzy możliwymi do uruchomienia procesami w systemie. Proces możliwy do uruchomienia to taki, który czeka tylko na czas procesora, jest gotowy do wykonania.

Harmonogram stanowi rdzeń wielozadaniowości w systemie Linux, wykorzystując algorytm planowania oparty na priorytetach do wyboru pomiędzy możliwymi do uruchomienia procesami w systemie. Szereguje procesy na podstawie najbardziej zasługujących na nie, a także zapotrzebowania na czas procesora.

Zrozumienie priorytetu procesu i dobrej wartości

Jądro przechowuje wiele informacji o procesach, w tym o priorytecie procesu, który jest po prostu priorytetem planowania przypisanym do procesu. Procesy o wyższym priorytecie będą wykonywane przed procesami o niższym priorytecie, natomiast procesy o tym samym priorytecie są planowane jeden po drugim, wielokrotnie.

W systemie Linux zaimplementowano łącznie 140 priorytetów i dwa różne zakresy priorytetów. Pierwszą z nich jest wartość nice (niceness), która waha się od -20 (wartość o najwyższym priorytecie) do 19 (wartość o najniższym priorytecie), a wartość domyślna to 0, to właśnie odkryjemy w tym przewodniku. Drugi to priorytet czasu rzeczywistego, który domyślnie waha się od 1 do 99, a następnie od 100 do 139 są przeznaczone do przestrzeni użytkownika.

Ważną cechą Linuksa jest dynamiczne planowanie oparte na priorytetach, które pozwala na zmianę wartości procesów (zwiększanie lub zmniejszanie) w zależności od potrzeb, jak zobaczymy później.

Jak sprawdzić niezłą wartość procesów systemu Linux

Aby zobaczyć ładne wartości procesów, możemy użyć narzędzi takich jak ps, top lub htop.

Aby wyświetlić ładną wartość procesów za pomocą polecenia ps w formacie zdefiniowanym przez użytkownika (tutaj NI kolumna pokazuje dokładność procesów).

ps -eo pid,ppid,ni,comm

Alternatywnie możesz użyć narzędzi top lub htop, aby wyświetlić ładne wartości procesów Linux, jak pokazano.

top
htop

Różnica między PR lub PRI i NI

Z powyższych wyników top i htop zauważysz, że istnieje kolumna o nazwie PR i PRI. co pokazuje priorytet procesu.

Oznacza to zatem, że:

  • NI – to wartość nice, która jest koncepcją przestrzeni użytkownika, podczas gdy
  • PR lub PRI – to rzeczywisty priorytet procesu, widziany przez jądro Linuksa.
Jak obliczyć wartości PR lub PRI
Total number of priorities = 140
Real time priority range(PR or PRI):  0 to 99 
User space priority range: 100 to 139

Niezły zakres wartości (NI): -20 do 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.

Jeśli jednak zobaczysz rt zamiast liczby, jak pokazano na zrzucie ekranu poniżej, oznacza to po prostu, że proces działa z priorytetem harmonogramu w czasie rzeczywistym.

Jak uruchomić polecenie z podaną wartością Nice w systemie Linux

W tym miejscu przyjrzymy się, jak ustalić priorytet wykorzystania procesora przez program lub polecenie. Jeśli masz program lub zadanie intensywnie obciążające procesor, ale wiesz również, że jego ukończenie może zająć dużo czasu, możesz ustawić mu wysoki lub korzystny priorytet za pomocą polecenie nice.

Składnia jest następująca:

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]

Ważny:

  • Jeśli nie podano żadnej wartości, nice domyślnie ustawia priorytet 10.
  • Polecenie lub program uruchamiany bez ładnej wartości domyślnej ma priorytet zerowy.
  • Tylko root może uruchomić polecenie lub program o podwyższonym lub wysokim priorytecie.
  • Zwykli użytkownicy mogą uruchamiać tylko polecenia lub programy o niskim priorytecie.

Na przykład, zamiast uruchamiać program lub polecenie z domyślnym priorytetem, możesz uruchomić go z określonym priorytetem, używając następującego polecenia nice.

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

Możesz także użyć trzeciej metody, która jest nieco myląca, szczególnie w przypadku ujemnych wartości uprzejmości.

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

Zmień priorytet planowania procesu w systemie Linux

Jak wspomnieliśmy wcześniej, Linux umożliwia dynamiczne planowanie oparte na priorytetach. Dlatego jeśli program już działa, możesz zmienić jego priorytet za pomocą polecenie renice w tej formie:

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

Z przykładowego górnego wyniku poniżej wynika, że teamspe+ z PID 1055 wynosi teraz -12 i dla wszystkich procesy należące do użytkownika Apache to -2.

Nadal korzystając z tego wyniku, możesz zobaczyć formułę PR=20 + NI,

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

Wszelkie zmiany dokonane za pomocą polecenia renice w wartościach nice procesów użytkownika mają zastosowanie tylko do następnego ponownego uruchomienia. Aby ustawić stałe wartości domyślne, przeczytaj następną sekcję.

Jak ustawić domyślną wartość Nice dla określonych procesów użytkownika

Możesz ustawić domyślną wartość nice dla konkretnego użytkownika lub grupy w pliku /etc/security/limits.conf. Jego podstawową funkcją jest określenie limitów zasobów dla użytkowników zalogowanych poprzez PAM.

Składnia definiowania limitu dla użytkownika jest następująca (a możliwe wartości poszczególnych kolumn są wyjaśnione w pliku):

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

Teraz użyj poniższej składni, gdzie hard — oznacza wymuszanie twardych łączy, a miękki — wymuszanie miękkich limitów.

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

Alternatywnie utwórz plik w /etc/security/limits.d/, który zastępuje ustawienia z głównego pliku powyżej, a pliki te zostaną odczytane w kolejności alfabetycznej.

Zacznij od utworzenia pliku /etc/security/limits.d/tecmint-priority.conf dla użytkownika tecmint:

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

Następnie dodaj w nim tę konfigurację:

tecmint  hard  priority  10

Zapisz i zamknij plik. Odtąd każdy proces należący do tecmint będzie miał niezłą wartość 10 i PR 30.

Aby uzyskać więcej informacji, przeczytaj strony podręcznika nice i renice:

man nice
man renice 

Możesz także przeczytać poniższe artykuły na temat zarządzania procesami w systemie Linux.

  1. Jak znaleźć i zabić działające procesy w systemie Linux
  2. Przewodnik po poleceniach Kill, Pkill i Killall w celu zakończenia procesu w systemie Linux
  3. Jak monitorować wykorzystanie systemu, awarie i rozwiązywać problemy z serwerami Linux
  4. CPUTool – ograniczaj i kontroluj wykorzystanie procesora przez dowolny proces w systemie Linux

W tym artykule pokrótce wyjaśniliśmy harmonogram jądra, priorytet procesu, sprawdziliśmy, jak uruchomić program lub polecenie ze zmodyfikowanym priorytetem, a także zmienić priorytet aktywnych procesów Linuksa. Możesz podzielić się swoimi przemyśleniami na ten temat, korzystając z poniższego formularza opinii.