Session d'étude interne Ozvision Matériel LT.
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
# -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
# 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
# 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
Valeur de gentillesse de processus, valeur de correction de priorité (valeur de réglage de l'espace utilisateur)
Priorité de processus réelle à laquelle se référer dans le planificateur du noyau Formule PR générale du processus: 20 --NI
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.
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.
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.
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
--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
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.
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
En principe, le besoin de temps réel est faible et un traitement lourd est prémisse.
nice -n 10 /batch_sh/huge_time_and_low_priority.sh
nice -n 10 mysqldump -u xxxx -p DBNAME > all_db_dump.sql
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
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.
--APACHE, batch, Shell Command, si vous faites quelque chose, c'est un processus.
nice
vous permet de limiter le temps que vous passez sur un processus.renice
Changer la gentillesse d'un processus existant
Recommended Posts