"OZV Study Group LT" "Linux" Processus et priorité à connaître avec une belle commande

Session d'étude interne Ozvision Matériel LT.


Qu'est-ce que Nice

Exécutez le programme avec la priorité de planification modifiée man page : https://linuxjm.osdn.jp/html/GNU_coreutils/man1/nice.1.html

nice [OPTION] [COMMAND [ARG]...]  

-n, --adjustment=N
Ajouter une valeur entière N à la priorité(Défaut: 10)

--help
Afficher cette utilisation et quitter

--version
Afficher les informations de version et quitter

Comment utiliser Nice

# -n [niceness value]Option requise
#La gamme de gentillesse est, 19 ~ -20 * Plus la gentillesse est faible, plus la priorité est élevée.

nice -n /something/default_nicevalue_is_10
nice -n 0 /batch_sh/something.sh #valeur de gentillesse 0
nice -n 5 zgrep "something text" very_huge_data.log.gz
nice -n 10 mysqldump -u user -p DBNAME TABLE_NAME > OUTPUT_FILE
nice -n -10 /something/this_is_high_priority_execution

Vérifier la priorité du processus


Vérifier avec PS

# PRI,Vérifiez NI

[vagrant@comics ~]$ ps l
F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
0  1000 22121 22120  20   0 124924  4256 -      Ss   pts/0      0:00 -bash
0  1000 22647 22121  20   0 160236  2204 -      R+   pts/0      0:00 ps l

Vérifiez en haut

# PR,Vérifier avec NI

[vagrant@comics ~]$ top
top - 18:36:27 up  2:22,  1 user,  load average: 1.15, 0.77, 0.66
Tasks: 167 total,   3 running,  90 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.4 us,  2.9 sy,  0.0 ni, 94.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1009004 total,   263660 free,   337808 used,   407536 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   508032 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
22255 apache    20   0  523200  30656  11248 R  20.6  3.0   0:00.69 httpd
 3018 mysql     20   0 2050332 121596  19976 S   0.7 12.1   0:11.54 mysqld
    8 root      20   0       0      0      0 R   0.3  0.0   0:03.04 rcu_sched
 3217 root      20   0  236900  22764   4652 S   0.3  2.3   0:02.13 fluentd
22867 vagrant   20   0  171112   4592   3896 R   0.3  0.5   0:02.46 top

PR et NI


Qu'est-ce que NI

Valeur de gentillesse de processus, valeur de correction de priorité (valeur de réglage de l'espace utilisateur)

Qu'est-ce que PR (PRI)?

Priorité de processus réelle à laquelle se référer dans le planificateur du noyau Formule PR générale du processus: 20 --NI


Programmes et processus


Qu'est-ce qu'un programme?

Un ensemble de code de commande qui peut être interprété et exécuté par un ordinateur. Généralement, il est enregistré au format de fichier.

Qu'est-ce qu'un processus?

Une ressource générée à partir du moment où une commande d'exécution est donnée à un programme.

Pour la personne moyenne, les ressources de processus sont chargées en mémoire Sous le contrôle du contrôle de la planification des processus OS Les instructions sont traitées par une mémoire de niveau supérieur et des unités arithmétiques.


Relation entre programmes et processus

image.png


Besoin de priorité de processus


Pourquoi le système d'exploitation peut-il exécuter et traiter autant de programmes?

Fondamentalement, 1 CPU (1 CORE) ne peut traiter qu'une seule instruction à la fois. (1 fois = 1hz, 3Ghz = 3 milliards de fois en 1 seconde peut traiter les instructions)

Pourquoi pensez-vous que vos programmes sont traités en même temps sous ces contraintes?

Il y a un concept de, et il est établi.


Planification des processus

La plupart des systèmes d'exploitation utilisent différents algorithmes pour gérer plusieurs processus, mais utilisent essentiellement le concept de partage de temps. Le temps que plusieurs processus peuvent traiter dans leur propre ordre est défini en fonction de la priorité.

L'algorithme round-robin est un exemple facile à comprendre image.png


Changement d'état du processus (cycle de vie)

image.png

--creation: créer un nouveau processus --dispatch: le planificateur du système d'exploitation alloue le temps de calcul du processeur pour exécuter le traitement. Transition vers l'état de fonctionnement --timeout: le temps de calcul alloué a expiré. Renvoyer les ressources et passer à l'état Prêt --blocking / unblocking: Attendez dans l'état de bloc pour attendre le traitement IO lorsque le travail IO se produit dans le processus, contrôlé par le processeur


Et s'il n'y avait pas de priorités et d'horaire?

Avec plusieurs processus allouant le même temps, plus il y a de processus, plus le temps de traitement global sera retardé. Le problème est que des processus importants et des processus système sont également affectés et que le système de contrôle-commande du système ne fonctionne pas.


En pratique


Soyez conscient que faire quelque chose dans un environnement OS est un processus

Exécuter une commande ou un programme sur le serveur signifie occuper une partie des ressources limitées de l'ordinateur sous forme de temps.

À moins que vous ne spécifiiez la priorité des processus généraux, le même ratio de ressources peut être affecté, donc plus il y a de processus, plus le temps de traitement des autres processus sera affecté.

nice peut spécifier cette occupation du temps et limiter la priorité de traitement pour chaque processus.

#C'est possible?
Sur un serveur Web de production, l'ajout d'un traitement par lots a ralenti la vitesse de réponse de l'ensemble du site Web.
>>> APACHE(prefork setting)Dans le cas de, une demande devient un processus, elle est donc naturellement affectée par la priorité du processus.
>>>Si le traitement par lots n'est pas critique, moins de priorité d'exécution (sinon jusqu'à des serveurs séparés)

Après avoir exécuté manuellement un lot sur le serveur de lots de production
Le temps de traitement des autres lots, qui devaient être terminés par tous les moyens, a été retardé.
>>>Les lots exécutés manuellement doivent être correctement hiérarchisés et exécutés sauf en cas de raison spécifique

Exemple d'utilisation de nice

En principe, le besoin de temps réel est faible et un traitement lourd est prémisse.

Un travail d'exécution manuel par lots est requis sur le serveur de lots de production

nice -n 10 /batch_sh/huge_time_and_low_priority.sh

Vider une grande quantité de données avec mysqldump

nice -n 10 mysqldump -u xxxx -p DBNAME > all_db_dump.sql

Serveur Web de production, serveur de journaux de production grep

nice -n 10 zgrep -E `^\d+$` 1GB_FILE.log.gz

#Le traitement de zgrep et des expressions régulières est une tâche gourmande en ressources processeur

Exécution binaire par appel systématique en php

exec('nice -n 10 /something/command', $result, $ret);

#Lorsque cela est nécessaire dans un appel système en traitement par lots ou en traitement asynchrone
#Il n'est pas recommandé d'utiliser les appels système, veuillez donc chercher une référence.

Conclusion

--APACHE, batch, Shell Command, si vous faites quelque chose, c'est un processus.


Supplément: renice

Changer la gentillesse d'un processus existant

Recommended Posts

"OZV Study Group LT" "Linux" Processus et priorité à connaître avec une belle commande
[Linux] Comment afficher l'utilisation du processeur avec la commande ps, afficher l'en-tête et ne pas afficher le processus grep
[linux] commande kill pour tuer le processus
Comment passer des arguments ou des variables d'environnement avec Makefile et faire une commande sur #Linux
Commande Yum pour accéder à MySQL avec Python 3 sous Linux
Groupe d'étude Linux 1er: console virtuelle et manipulation de fichiers
[Linux] Après connexion à DB avec teraterm et saisie de la commande Sqlplus, jusqu'à la connexion à DB (oracle)