Tuesday, 3 January 2017

Moving Moyenne Pid

Htop expliqué Explication de tout ce que vous pouvez voir dans htoptop sur Linux Dernière mise à jour le 2 janvier 2017 1 sur Hacker News le 2 décembre 2016 1 sur rsysadmin le 2 décembre 2016 2 sur rlinux le 2 décembre 2016 Pour le plus long temps que j'ai fait Ne sais pas ce que tout signifiait dans htop. Je pensais que la charge moyenne 1.0 sur ma machine à deux noyaux signifie que l'utilisation du processeur est à 50. Ce n'est pas tout à fait raison. Et aussi, pourquoi dit-il 1.0 J'ai décidé de tout regarder et documenter ici. Ils disent aussi que la meilleure façon d'apprendre quelque chose est d'essayer de l'enseigner. Table des matières htop sur Ubuntu Server 16.04 x64 Voici une capture d'écran de htop que je vais décrire. Uptime indique la durée de fonctionnement du système. Vous pouvez voir les mêmes informations en exécutant uptime: Comment le programme de disponibilité sait-il qu'il lit les informations de la procuptime fichier. Le premier nombre est le nombre total de secondes pendant lesquelles le système a été relevé. Le second nombre est la quantité de temps que la machine a passée au ralenti, en secondes. La deuxième valeur peut être supérieure à la disponibilité globale du système sur les systèmes à noyaux multiples car il s'agit d'une somme. Comment ai-je su que j'ai regardé quels fichiers le programme uptime s'ouvre quand il est exécuté. Nous pouvons utiliser l'outil strace pour cela. Il y aura beaucoup de résultats. Nous pouvons grep pour l'appel système ouvert. Mais cela ne fonctionnera pas vraiment puisque strace produit tout au flux d'erreur standard (stderr). Nous pouvons rediriger le stderr vers le flux de sortie standard (stdout) avec 2gtamp1. Notre sortie est celle-ci: qui contient le fichier procuptime que j'ai mentionné. Il s'avère que vous pouvez également utiliser strace - e open uptime et ne pas se soucier de grepping. Alors pourquoi avons-nous besoin du programme uptime si nous pouvons simplement lire le contenu du fichier La sortie uptime est joliment formaté pour les humains alors que le nombre de secondes est plus utile à utiliser dans vos propres programmes ou scripts. En plus du temps de fonctionnement, il y avait aussi trois nombres représentant la moyenne de la charge. Ils sont extraits du fichier procloadavg. Si vous regardez de nouveau la sortie strace, vous verrez que ce fichier a également été ouvert. Les trois premières colonnes représentent la charge moyenne du système des dernières périodes de 1, 5 et 15 minutes. La quatrième colonne indique le nombre de processus en cours d'exécution et le nombre total de processus. La dernière colonne affiche le dernier ID de processus utilisé. Commençons par le dernier chiffre. Chaque fois que vous lancez un nouveau processus, un numéro d'identification lui est attribué. Les ID de processus augmentent habituellement, sauf s'ils ont été exaustés et sont réutilisés. L'identifiant de processus 1 appartient à sbininit qui est démarré au démarrage. Regardons de nouveau le contenu du procloadavg, puis lancer la commande sleep en arrière-plan. Lorsqu'il est lancé en arrière-plan, son ID de processus s'affiche. Donc, le 1123 signifie qu'il ya un processus en cours d'exécution ou prêt à fonctionner à ce moment et il ya 123 traités au total. Lorsque vous exécutez htop et voir un seul processus en cours d'exécution, cela signifie que c'est le processus htop lui-même. Si vous exécutez le sommeil 30 et exécutez htop à nouveau, vous remarquerez qu'il n'y a encore qu'un seul processus en cours d'exécution. C'est parce que le sommeil ne fonctionne pas, c'est dormir ou ralentir ou en d'autres termes, attendant que quelque chose se produise. Un processus en cours d'exécution est un processus qui est en cours d'exécution sur l'UC physique ou en attente de son tour pour s'exécuter sur la CPU. Si vous exécutez cat devurandom gt devnull qui génère à plusieurs reprises des octets aléatoires et les écrit dans un fichier spécial qui n'est jamais lu, vous verrez qu'il ya maintenant deux processus en cours. Il y a maintenant deux processus en cours (génération de nombres aléatoires et le chat qui lit le contenu de procloadavg) et vous remarquerez également que les moyennes de charge ont augmenté. La moyenne de charge représente la charge moyenne du système sur une période de temps. Le nombre de charge est calculé en comptant le nombre de processus en cours (en cours d'exécution ou d'attente) et ininterrompus (en attente d'une activité de disque ou de réseau). Il ne s'agit donc que d'un certain nombre de processus. Les moyennes de charge sont alors le nombre moyen de ces processus au cours des 1, 5 et 15 dernières minutes, à droite. Il s'avère qu'il n'est pas aussi simple que cela. La moyenne de charge est la moyenne mobile amortie exponentiellement du nombre de charge. De Wikipédia: mathématiquement parlant, les trois valeurs toujours moyenne toute la charge du système depuis le démarrage du système. Ils décroissent tous de façon exponentielle, mais ils se décomposent à vitesse différente. Ainsi, la moyenne de charge de 1 minute ajoutera 63 de la charge à partir de la dernière minute, plus 37 de la charge depuis le démarrage à l'exclusion de la dernière minute. Par conséquent, il n'est pas techniquement exact que la moyenne de charge de 1 minute inclue seulement les 60 dernières secondes d'activité (puisqu'elle comprend encore 37 activités du passé), mais cela inclut surtout la dernière minute. Est-ce ce que vous attendiez Let's revenir à notre génération de nombres aléatoires. Bien que techniquement non correct, c'est la façon dont je simplifie les moyennes de charge pour le rendre plus facile à raisonner à leur sujet. Dans ce cas, le processus de génération de nombre aléatoire est lié au processeur, de sorte que la moyenne de charge au cours de la dernière minute est de 1,00 ou en moyenne 1 processus en cours. Puisqu'il n'y a qu'une seule CPU sur mon système, l'utilisation du processeur est de 100 puisque ma CPU ne peut exécuter qu'un seul processus à la fois. Si j'avais deux cœurs, mon utilisation du processeur serait 50 puisque mon ordinateur peut exécuter deux processus en même temps. La moyenne de charge d'un ordinateur avec 2 cœurs qui a une utilisation de 100 CPU serait 2,00. Vous pouvez voir le nombre de vos cœurs ou CPU dans le coin supérieur gauche de htop ou en exécutant nproc. Parce que le numéro de charge inclut également des processus dans des états non interruptibles qui n'ont pas beaucoup d'effet sur l'utilisation d'UC, il n'est pas tout à fait correct d'inférer l'utilisation de CPU à partir des moyennes de charge comme je viens de le faire. Cela explique également pourquoi vous pouvez voir des moyennes de charge élevée, mais pas beaucoup de charge sur le processeur. Mais il existe des outils comme mpstat qui peuvent montrer l'utilisation instantanée du processeur. Pourquoi utilisons-nous les moyennes de charge? Dans le coin supérieur droit, htop affiche le nombre total de processus et le nombre d'entre eux sont en cours d'exécution. Mais il dit Tâches pas processus. Pourquoi Un autre nom pour un processus est une tâche. Le noyau Linux se réfère en interne aux processus en tant que tâches. Htop utilise Tâches au lieu de Processus probablement parce qu'il est plus court et enregistre un peu d'espace dans l'écran. Vous pouvez également voir des fils dans htop. Pour activer la visibilité des threads, appuyez sur Shift H sur votre clavier. Si vous voyez Tâches: 23, 10 thr. Il signifie qu'ils sont visibles. Vous pouvez également voir les threads du noyau avec Shift K. Quand ils sont visibles, it39ll say Tâches: 23, 40 kthr. Process ID PID Chaque fois qu'un nouveau processus est démarré, on lui attribue un numéro d'identification (ID) qui s'appelle process ID ou PID pour short. Si vous exécutez un programme en arrière-plan (ampli) à partir de bash. Vous verrez le numéro du travail entre crochets et le PID. Si vous l'avez manqué, vous pouvez utiliser la variable dans bash qui sera étendue au dernier ID de processus en arrière-plan. Process ID est très utile. Il peut être utilisé pour voir des détails sur le processus et pour le contrôler. Procfs est un pseudo système de fichiers qui permet aux programmes userland d'obtenir des informations à partir du noyau en lisant des fichiers. Il est généralement monté à proc et pour vous, il ressemble à un répertoire régulier que vous pouvez parcourir avec ls et cd. Toutes les informations relatives à un processus se trouvent à procltpidgt. Par exemple, procltpidgtcmdline donnera la commande qui a été utilisée pour lancer le processus. Ugh, ce n'est pas juste. Il s'avère que la commande est séparée par l'octet 0. Que nous pouvons remplacer par un espace ou une nouvelle ligne Le répertoire de processus pour un processus peut contenir des liens Par exemple, cwd pointe vers le répertoire de travail courant et exe est le binaire exécuté. Voilà comment htop. sommet. Ps et autres utilitaires de diagnostic obtiennent leurs informations sur les détails d'un processus: ils le lisent à partir de procltpidgtltfilegt. Lorsque vous lancez un nouveau processus, le processus qui a lancé le nouveau processus s'appelle le processus parent. Le nouveau processus est maintenant un processus enfant pour le processus parent. Ces relations forment une structure arborescente. Si vous frappez F5 dans htop. Vous pouvez voir la hiérarchie du processus. Vous pouvez également utiliser le commutateur f avec ps Si vous vous êtes déjà demandé pourquoi vous voyez souvent bash ou sshd en tant que parents de certains de vos processus, voici pourquoi. C'est ce qui arrive quand vous exécutez, disons, la date de votre shell bash: bash crée un nouveau processus qui est une copie de lui-même (en utilisant un appel système fork), il charge ensuite le programme à partir du fichier exécutable bindate en mémoire (using a Exec) bash que le processus parent attendra son enfant à la sortie Ainsi, le sbininit avec un ID de 1 a été démarré au démarrage, ce qui a engendré le démon SSH sshd. Lorsque vous vous connectez à l'ordinateur, sshd générera un processus pour la session qui lancera à son tour le shell bash. J'aime utiliser cette vue d'arbre dans htop quand I39m également intéressé à voir tous les fils. Chaque processus est détenu par un utilisateur. Les utilisateurs sont représentés par un numéro d'identification numérique. Vous pouvez utiliser la commande id pour connaître le nom de cet utilisateur. Il s'avère que id obtient cette information des fichiers etcpasswd et etcgroup. C'est parce que le fichier de configuration Name Service Switch (NSS) etcnsswitch. conf dit d'utiliser ces fichiers pour résoudre les noms. La valeur de compat (mode Compatibilité) est identique à celle des fichiers sauf que d'autres entrées spéciales sont autorisées. Fichiers signifie que la base de données est stockée dans un fichier (chargé par libnssfiles. so). Mais vous pouvez également stocker vos utilisateurs dans d'autres bases de données et services ou utiliser Lightweight Directory Access Protocol (LDAP), par exemple. Etcpasswd et etcgroup sont des fichiers texte simples qui mappent les ID numériques aux noms lisibles par l'homme. Passwd. Mais où sont les mots de passe Ils sont effectivement dans etcshadow. Ce qui est ce gibberish 6 est l'algorithme de hachage de mot de passe utilisé, dans ce cas, il représente sha512 suivi par le sel généré au hasard pour protéger contre les attaques de table arc-en-ciel et enfin le hash de votre mot de passe sel Lorsque vous exécutez un programme, . Même si le fichier exécutable n'est pas la propriété de vous. Si vous souhaitez exécuter un programme en tant que root ou un autre utilisateur, c'est ce que sudo est pour. Mais que faire si vous voulez vous connecter en tant qu'utilisateur pour lancer plusieurs commandes Utilisez sudo bash ou sudo - u user bash. Vous pourrez utiliser le shell en tant qu'utilisateur. Si vous n'êtes pas demandé le mot de passe root tout le temps, vous pouvez simplement le désactiver en ajoutant votre utilisateur au fichier etcsudoers. Bien, seule la racine peut le faire. Ce qui se passe ici, c'est que vous exécutez la commande echo en tant que root mais que vous ajoutez la ligne au fichier etcsudoers comme utilisateur. Il ya généralement deux façons de le faire: echo quotUSER TOUT (TOUS) NOPASSWD: ALLquot sudo tee - a etcsudoers sudo bash - c quotecho 39USER TOUT (TOUS) NOPASSWD: ALL39 gtgt etcsudoersquot Dans le premier cas, tee - a ajoute son entrée standard Au fichier et nous exécutons cette commande en tant que root. Dans le second cas, nous exécutons bash en tant que root et lui demandons d'exécuter une commande (-c) et la commande entière sera exécutée en tant que root. Notez les 39 affaires difficiles ici qui dicteront quand la variable USER sera élargie. Si vous jetez un oeil au fichier etcsudoers vous verrez qu'il commence par It39s un avertissement utile qui dit que vous devriez modifier ce fichier avec sudo visudo. Il valide le contenu du fichier avant de l'enregistrer et vous empêche de commettre des erreurs. Si vous ne utilisez pas visudo et faites une erreur, il peut vous bloquer à partir de sudo. Ce qui signifie que vous won39t être en mesure de corriger votre erreur Let39s dire que vous voulez changer votre mot de passe. Vous pouvez le faire avec la commande passwd. Il sera, comme nous l'avons vu précédemment, enregistrer le mot de passe dans le fichier etcshadow. Ce fichier est sensible et ne peut être écrit que par root: alors comment est-il possible que le programme passwd qui est exécuté par un utilisateur régulier puisse écrire dans un fichier protégé, j'ai dit plus tôt que lorsque vous lancez un processus, Le propriétaire du fichier exécutable est un autre utilisateur. Il s'avère que vous pouvez modifier ce comportement en modifiant les autorisations de fichier. Let39s jeter un oeil. Notez la lettre s. Il a été accompli avec sudo chmod nous usrbinpasswd. Cela signifie qu'un exécutable sera lancé en tant que le propriétaire du fichier qui est root dans ce cas. Vous pouvez trouver les exécutables dits setuid avec find bin - user root - perm - us. Notez que vous pouvez également faire de même avec le groupe (gs). Nous allons ensuite regarder la colonne d'état de processus dans htop qui est désignée simplement par la lettre S. Voici les valeurs possibles: Je les ai commandées par la fréquence à laquelle je les vois. Notez que lorsque vous exécutez ps. Il montrera aussi des sous-états comme Ss. R. Ss. Etc. R - exécuté ou exécuté (en file d'attente d'exécution) Dans cet état, le processus est en cours d'exécution ou sur une file d'attente en attente d'exécution. Que signifie-t-il pour exécuter Lorsque vous compilez le code source d'un programme que vous avez écrit, ce code machine est CPU instructions. Il est enregistré dans un fichier qui peut être exécuté. Lorsque vous lancez un programme, il est chargé en mémoire et la CPU exécute ces instructions. Fondamentalement, cela signifie que la CPU exécute physiquement des instructions. Ou, en d'autres termes, croquer des chiffres. S - interruptible sleep (en attente d'un événement) Cela signifie que les instructions de code de ce processus ne sont pas exécutées sur la CPU. Au lieu de cela, ce processus est en attente pour quelque chose - un événement ou une condition - se produire. Lorsqu'un événement se produit, le noyau définit l'état en cours d'exécution. Un exemple est le sommeil utily de coreutils. Il va dormir pendant un nombre de secondes (environ). C'est donc un sommeil interruptible. Comment pouvons-nous l'interrompre En envoyant un signal. Vous pouvez envoyer un signal en htop en appuyant sur F9 et en choisissant l'un des signaux dans le menu de gauche. L'envoi d'un signal est également connu sous le nom de tuer. C'est parce que kill est un appel système qui peut envoyer un signal à un processus. Il ya un programme binkill qui peut faire cet appel système de userland et le signal par défaut à utiliser est TERM qui demandera au processus de terminer ou en d'autres termes essayer de le tuer. Le signal n'est qu'un nombre. Les chiffres sont difficiles à retenir et nous leur donnons des noms. Les noms de signaux sont habituellement écrits en majuscules et peuvent être préfixés par SIG. Certains signaux couramment utilisés sont INT. TUER. ARRÊTEZ. CONT. HUP. Interrompre le processus de sommeil en envoyant le signal d'interruption du terminal INT aka SIGINT aka 2 aka. C'est aussi ce qui arrive Lorsque vous appuyez sur CTRL C sur votre clavier. Bash va envoyer le processus d'avant-plan le signal SIGINT juste comme nous l'avons fait manuellement. Soit dit en passant, en bash. Kill est une commande intégrée, même si il ya binkill sur la plupart des systèmes. Pourquoi il permet aux processus d'être tués si la limite sur les processus que vous pouvez créer est atteinte. Ces commandes font la même chose: kill - INT 10089 kill -2 10089 binkill -2 10089 Un autre signal utile à savoir est SIGKILL aka 9. Vous l'avez peut-être utilisé pour tuer un processus qui n'a pas répondu à vos touches CTRL C clavier frénétique. Lorsque vous écrivez un programme, vous pouvez configurer des gestionnaires de signaux qui sont des fonctions qui seront appelées lorsque votre processus reçoit un signal. En d'autres termes, vous pouvez attraper le signal et puis faire quelque chose, par exemple, nettoyer et fermer gracieusement. Ainsi, envoyer SIGINT (l'utilisateur veut interrompre un processus) et SIGTERM (l'utilisateur veut terminer le processus) ne signifie pas que le processus sera terminé. Vous pouvez avoir vu cette exception lors de l'exécution de scripts Python: Vous pouvez dire au noyau de terminer avec force un processus et ne pas lui donner un changement pour répondre en envoyant le signal KILL: D - sommeil ininterrompu (généralement IO) Ce processus avec un signal. C'est pourquoi beaucoup de gens craignent de voir cet état. Vous ne pouvez pas tuer ces processus parce que tuer signifie envoyer des signaux SIGKILL aux processus. Cet état est utilisé si le processus doit attendre sans interruption ou lorsque l'événement devrait se produire rapidement. Comme la lecture d'un disque. Mais cela ne devrait se faire que pendant une fraction de seconde. Des processus ininterrompus attendent généralement IO suite à une erreur de page. La tâche de processus ne peut pas être interrompue dans cet état, car elle ne peut pas traiter tous les signaux si cela se produisait, un autre défaut de page se produirait et il serait de retour là où il était. En d'autres termes, cela pourrait se produire si vous utilisez Network File System (NFS) et cela prend un certain temps pour lire et écrire à partir de celui-ci. Ou dans mon expérience, il peut également signifier que certains des processus sont swapping beaucoup ce qui signifie que vous avez trop peu de mémoire disponible. Let39s essayer d'obtenir un processus d'entrer dans un sommeil ininterrompu. 8.8.8.8 est un serveur DNS public fourni par Google. Ils n'ont pas de NFS ouvert là-bas. Mais cela ne nous arrêtera pas. Comment savoir ce qui cause cette strace Let39s strace la commande dans la sortie de ps ci-dessus. Ainsi, l'appel système de montage bloque le processus. Si vous vous demandez, vous pouvez exécuter mount avec une option intr pour exécuter comme interruptible: sudo mount 8.8.8.8ttmp tmp - o intr. Z - processus défunt (quotzombiequot), terminé mais non récolté par son parent Lorsqu'un processus se termine via exit et qu'il a encore des processus fils, les processus fils deviennent des processus zombie. Si les processus zombie existent pour une courte période, il est parfaitement normal que les processus Zombie qui existent depuis longtemps peuvent indiquer un bogue dans un programme Zombie processus Don39t consommer de la mémoire, juste un processus ID Vous ne pouvez pas tuer un processus zombie Vous pouvez demander joliment le parent Processus pour récolter les zombies (le signal SIGCHLD) Vous pouvez tuer le processus parent zombie39s pour se débarrasser du parent et ses zombies Je vais écrire un code C pour le montrer. Voici notre programme. Installez le compilateur GNU C (GCC). Compilez-le et exécutez-le Regardez l'arbre de processus Nous avons notre zombie Quand le processus parent est terminé, le zombie est parti. Si vous avez remplacé le sommeil (20) par un temps (vrai), le zombi disparaîtra immédiatement. Avec sortie. Toute la mémoire et les ressources qui lui sont associées sont désallouées pour pouvoir être utilisées par d'autres processus. Pourquoi conserver les processus zombie autour? Le processus parent a l'option de trouver son code de sortie de processus enfant (dans un gestionnaire de signal) avec l'appel du système d'attente. Si un processus est en train de dormir, alors il doit attendre qu'il se réveille. Pourquoi ne pas simplement le réveiller par force et le tuer? Pour la même raison, vous ne donnez pas votre enfant à la poubelle quand vous en êtes fatigué. De mauvaises choses pourraient arriver. T - arrêté par le signal de commande de travail J'ai ouvert deux fenêtres de terminal et je peux regarder mes processus d'utilisateur avec ps u. Je vais omettre les processus - bash et ps u à partir de la sortie ci-dessous. Maintenant, exécutez cat devurandom gt devnull dans une fenêtre de terminal. Son état est R, ce qui signifie qu'il est en cours d'exécution. Appuyez sur CTRL Z pour arrêter le processus. Son état est maintenant T. Exécutez fg dans le premier terminal pour le reprendre. Une autre façon d'arrêter un processus comme celui-ci est d'envoyer le signal STOP avec kill au processus. Pour reprendre l'exécution du processus, vous pouvez utiliser le signal CONT. T - arrêté par le débogueur au cours du traçage Tout d'abord, installez le GNU Debugger (gdb) Exécutez un programme qui écoutera les connexions réseau entrantes sur le port 1234. Il est en sommeil, ce qui signifie qu'il attend les données du réseau. Exécutez le débogueur et attachez-le au processus avec ID 3905. Vous verrez que l'état est t, ce qui signifie que ce processus est tracé dans le débogueur. Linux est un système d'exploitation multitâche qui signifie que même si vous avez une seule CPU, vous pouvez exécuter plusieurs processus en même temps. Vous pouvez vous connecter à votre serveur via SSH et regarder la sortie de htop pendant que votre serveur Web livre le contenu de votre blog à vos lecteurs sur Internet. Comment est-ce possible quand un seul CPU ne peut exécuter qu'une instruction à la fois La réponse est le partage du temps. Un processus court pendant un peu de temps, puis il est suspendu tandis que les autres processus en attente d'exécution tournent à tour de rôle pendant un certain temps. Le temps qu'un processus exécute est appelé la tranche de temps. La tranche de temps est habituellement quelques millisecondes ainsi vous don39t remarquez vraiment cela que beaucoup quand votre système n'est pas sous charge élevée. (Il devrait être très intéressant de savoir combien de temps les tranches sont généralement en Linux.) Cela devrait aider à expliquer pourquoi la moyenne de la charge est le nombre moyen de processus en cours d'exécution. Si vous avez juste un noyau et la moyenne de charge est de 1,0. La CPU a été utilisée à 100. Si la moyenne de la charge est supérieure à 1,0. Cela signifie que le nombre de processus souhaitant s'exécuter est plus élevé que le CPU peut fonctionner de sorte que vous pouvez rencontrer des ralentissements ou des retards. Si la charge est inférieure à 1,0. Cela signifie que la CPU est parfois ralenti et ne fait rien. Cela devrait également vous donner une idée pourquoi parfois le temps de fonctionnement d'un processus qui a fonctionné pendant 10 secondes est plus élevé ou inférieur à exactement 10 secondes. Bien-être et priorité du processus Lorsque vous avez plus de tâches à exécuter que le nombre de noyaux de processeurs disponibles, vous devez décider quelles tâches exécuter et quelles sont celles à maintenir en attente. C'est ce que le planificateur de tâches est responsable. Le planificateur du noyau Linux est responsable du choix du processus sur une file d'attente à exécuter et il dépend de l'algorithme du planificateur utilisé dans le noyau. Vous pouvez généralement influencer l'ordonnanceur, mais vous pouvez lui faire savoir quels processus sont plus importants pour vous et le planificateur peut en tenir compte. Niceness (NI) est la priorité de l'espace utilisateur pour les processus, allant de -20 qui est la plus haute priorité à 19 qui est la priorité la plus basse. Il peut être déroutant, mais vous pouvez penser qu'un processus agréable cède à un processus moins agréable. Donc, plus un processus est agréable, plus il cède. De ce que j'ai reconstitué en lisant StackOverflow et d'autres sites, une augmentation de niveau de gentillesse de 1 devrait donner un temps de processeur 10 plus au processus. La priorité (PRI) est la priorité de l'espace noyau que le noyau Linux utilise. Les priorités varient de 0 à 139 et la plage de 0 à 99 est en temps réel et de 100 à 139 pour les utilisateurs. Vous pouvez modifier le nicesness et le noyau prend en compte, mais vous ne pouvez pas changer la priorité. La relation entre la valeur nice et la priorité est: donc la valeur de PR 20 (-20 à 19) est 0 à 39 qui correspond à 100 à 139. Vous pouvez définir la gentillesse d'un processus avant de le lancer. Changer le nicencess quand un programme est déjà en cours d'exécution avec renice. Voici ce que signifient les couleurs d'utilisation du processeur: Bleu: Thèmes de priorité faible (nice gt 0) Vert: Thèmes prioritaires normaux Rouge: Kernel threads Utilisation de la mémoire - VIRTRESSHRMEM Un processus a l'illusion d'être le seul dans la mémoire. Cela est accompli en utilisant la mémoire virtuelle. Un processus n'a pas d'accès direct à la mémoire physique. Au lieu de cela, il a son propre espace d'adressage virtuel et le noyau traduit les adresses de mémoire virtuelle à la mémoire physique ou peut mapper une partie de celui-ci sur le disque. C'est pourquoi il peut ressembler à des processus d'utiliser plus de mémoire que vous avez installé sur votre ordinateur. Le point que je veux faire ici est qu'il n'est pas très simple de comprendre combien de mémoire un processus prend. Voulez-vous également compter les bibliothèques partagées ou la mémoire mappée par le disque? Mais le noyau fournit et htop affiche des informations qui peuvent vous aider à estimer l'utilisation de la mémoire. Voici ce que signifient les couleurs d'utilisation de la mémoire: Vert: Mémoire utilisée Bleu: Tampons Orange: Cache VIRTVSZ - Image virtuelle Quantité totale de mémoire virtuelle utilisée par la tâche. Il inclut tout le code, les données et les bibliothèques partagées plus les pages qui ont été échangées et les pages qui ont été cartographiées mais non utilisées. VIRT est l'utilisation de la mémoire virtuelle. Il inclut tout, y compris les fichiers mappés en mémoire. Si une application demande 1 Go de mémoire mais utilise seulement 1 Mo, VIRT signale 1 Go. Si il mmap s un fichier de 1 Go et ne l'utilise jamais, VIRT va également signaler 1 Go. La plupart du temps, ce n'est pas un nombre utile. RESRSS - Taille de résident La mémoire physique non échangée utilisée par une tâche. RES est l'utilisation de la mémoire résidante, c'est-à-dire ce qui se trouve actuellement dans la mémoire physique. Alors que RES peut être un meilleur indicateur de la quantité de mémoire utilisée par un processus que VIRT. Gardez à l'esprit que cela n'inclut pas la mémoire échangée une partie de la mémoire peut être partagée avec d'autres processus Si un processus utilise 1 Go de mémoire et il appelle fork (). Le résultat du bifurcation sera deux processus dont le RES est à la fois 1 Go mais seulement 1 Go sera réellement utilisé puisque Linux utilise copy-on-write. SHR - Shared Mem size La quantité de mémoire partagée utilisée par une tâche. Il reflète simplement la mémoire qui pourrait être potentiellement partagée avec d'autres processus. TODO: Je devrais terminer ceci. MEM - Utilisation de la mémoire Une tâche utilise actuellement la part de la mémoire physique disponible. Il s'agit de RES divisé par la RAM totale que vous avez. Si RES est 400M et vous avez 8 gigaoctets de RAM, MEM sera 4008192100 4.88. J'ai lancé une goutte d'océan numérique avec Ubuntu Server. Quels sont les processus qui sont démarrés à l'amorçage Avez-vous vraiment besoin d'eux Voici mes notes de recherche sur les processus qui sont exécutés au démarrage sur une nouvelle goutte d'océan numérique avec Ubuntu Server 16.04.1 LTS x64. Le programme sbininit (également appelé init) coordonne le reste du processus de démarrage et configure l'environnement pour l'utilisateur. Lorsque la commande init démarre, elle devient le parent ou le grand-parent de tous les processus qui démarrent automatiquement sur le système. Que se passe-t-il si vous le tuez? Systemd-journald est un service système qui collecte et stocke les données de journalisation. Il crée et maintient des journaux structurés et indexés basés sur des informations de journalisation reçues de diverses sources. L'un des principaux changements dans journald était de remplacer les fichiers journaux simples en texte brut par un format de fichier spécial optimisé pour les messages de journal. Ce format de fichier permet aux administrateurs système d'accéder plus efficacement aux messages pertinents. Il apporte également une partie de la puissance des implémentations de journalisation centralisées basées sur des bases de données à des systèmes individuels. Vous êtes censé utiliser la commande journalctl pour interroger les fichiers journaux. Journalctl COMMsshd logs par sshd journalctl COMMsshd - o json-jolie logs par sshd dans JSON journalctl --since quot2015-01-10 03: 00quot journalctl --since 09:00 --until quot1 hour agoquot Journalctl --since hier journalctl - b logs depuis boot journalctl - f à suivre logs journalctl --disc-usage journalctl --vacuum-size1G Il semble qu'il n'est pas possible de supprimer ou de désactiver ce service, vous ne pouvez désactiver l'enregistrement. Le démon lvmetad met en cache les métadonnées LVM, de sorte que les commandes LVM peuvent lire des métadonnées sans numériser des disques. La mise en cache des métadonnées peut constituer un avantage, car la numérisation des disques prend du temps et peut nuire au fonctionnement normal du système et des disques. Vous pouvez penser à LVM comme des partitions quotdynamiques, ce qui signifie que vous pouvez créer des listes de partitions LVM (elles s'appellent quotLogical Volumesquot en LVM-speak) à partir de la ligne de commande pendant que votre système Linux fonctionne: pas besoin de redémarrer Le système pour que le noyau soit au courant des partitions nouvellement créées ou redimensionnées. Il semble que vous devriez le garder si vous utilisez LVM. Systemd-udevd écoute les uevents du noyau. Pour chaque événement, systemd-udevd exécute les instructions correspondantes spécifiées dans les règles udev. Udev est un gestionnaire de périphériques pour le noyau Linux. En tant que successeur de devfsd et hotplug, udev gère principalement des nœuds de périphériques dans le répertoire dev. Donc, ce service gère dev. Je ne sais pas si j'en ai besoin en cours d'exécution sur un serveur virtuel. Systemd-timesyncd est un service système qui peut être utilisé pour synchroniser l'horloge système locale avec un serveur distant Network Time Protocol. Cela remplace ntpd. Si nous jetons un coup d'oeil aux ports ouverts sur ce serveur: Précédemment sur Ubuntu 14.04 c'était atd - exécutez les travaux mis en file d'attente pour une exécution ultérieure. Atd exécute les jobs mis en file d'attente par at. À partir de l'entrée standard ou d'un fichier spécifié qui doivent être exécutés ultérieurement. Contrairement à cron, qui planifie les tâches qui sont répétées périodiquement, exécute un travail à un moment spécifique une fois. Je n'ai jamais utilisé jusqu'à présent. Snappy Ubuntu Core est une nouvelle version d'Ubuntu avec des mises à jour transactionnelles - une image serveur minimale avec les mêmes bibliothèques que Ubuntu d'aujourd'hui, mais les applications sont fournies par un mécanisme plus simple. Les développeurs de plusieurs distributions Linux et entreprises ont annoncé aujourd'hui la collaboration sur le format de paquet Linux universel snap, permettant à un seul paquet binaire de fonctionner parfaitement et en toute sécurité sur n'importe quel bureau, serveur, nuage ou périphérique Linux. Apparemment, il s'agit d'un paquet deb simplifié et vous êtes supposé de regrouper toutes les dépendances d'un seul composant logiciel enfichable que vous pouvez distribuer. Je n'ai jamais utilisé Snappy pour déployer ou distribuer des applications sur des serveurs. En informatique, D-Bus ou DBus est un mécanisme de communication interprocessus (IPC) et d'appel de procédure distante (RPC) qui permet la communication entre plusieurs programmes informatiques (c'est-à-dire des processus) exécutés simultanément sur la même machine. Il pour les environnements de bureau, mais sur un serveur pour exécuter des applications web je me demande quelle heure il est et si elle est synchronisée avec NTP Oops. Devrait probablement garder cela. Systemd-logind est un service système qui gère les connexions utilisateur. Cron-daemon pour exécuter des commandes programmées (Vixie Cron) - f Rester en mode premier plan, don39t démon. Vous pouvez planifier des tâches à exécuter périodiquement avec cron. Utilisez crontab - e pour modifier la configuration de votre utilisateur ou sur Ubuntu J'ai tendance à utiliser le etccron. hourly. Etccron. daily. Etc répertoires. Vous pouvez voir les fichiers journaux avec grep cron varlogsyslog ou journalctl COMMcron ou même journalctl COMMcron --sincequotdatequot --untilquotdatequot You39ll voudra probablement garder cron. Mais si vous ne don39t, alors vous devez arrêter et désactiver le service: Parce que sinon lorsque vous essayez de le supprimer avec apt supprimer cron, il essaiera d'installer postfix Il ressemble à cron a besoin d'un agent de transport de courrier (MTA) pour envoyer des emails. Rsyslogd est un utilitaire système qui prend en charge la journalisation des messages. En d'autres termes, c'est ce qui remplit les fichiers journaux en varlog comme varlogauth. log pour les messages d'authentification comme les tentatives de connexion SSH. Les fichiers de configuration sont dans etcrsyslog. d. Vous pouvez également configurer rsyslogd pour envoyer des fichiers journaux à un serveur distant et implémenter la journalisation centralisée. Vous pouvez utiliser la commande logger pour enregistrer des messages dans varlogsyslog dans des scripts en arrière-plan tels que ceux qui sont exécutés au démarrage. Bien, mais nous avons déjà systemd-journald en cours d'exécution. Avons-nous besoin de rsyslogd ainsi Rsyslog et Journal, les deux applications d'enregistrement présents sur votre système, ont plusieurs caractéristiques distinctives qui les rendent adaptées à des cas d'utilisation spécifiques. Dans de nombreuses situations, il est utile de combiner leurs capacités, par exemple pour créer des messages structurés et les stocker dans une base de données de fichiers. Une interface de communication nécessaire pour cette coopération est fournie par des modules d'entrée et de sortie du côté de Rsyslog et par la prise de communication du Journal. Alors, peut-être que je vais le garder juste au cas où. Acpid - Le démon d'évènement de configuration avancée et d'interface de puissance est conçu pour notifier les programmes d'espace utilisateur des événements ACPI. Acpid doit être démarré pendant le démarrage du système et s'exécutera comme un processus en arrière-plan, par défaut. Dans le calcul, la spécification ACPI (Advanced Configuration and Power Interface) fournit un standard ouvert que les systèmes d'exploitation peuvent utiliser pour effectuer la découverte et la configuration des composants matériels de l'ordinateur, pour effectuer la gestion de l'alimentation en mettant, par exemple, Surveillance du statut. But I39m on a virtual server that I don39t intend to suspendresume. I am going to remove it for fun and see what happens. I was able to successfully reboot the droplet but after halt Digital Ocean thought it was still on so I had to Power Off using the web interface. So I should probably keep this. Lxcfs is a fuse filesystem mainly designed for use by lxc containers. On a Ubuntu 15.04 system, it will be used by default to provide two things: first, a virtualized view of some proc files and secondly, filtered access to the hosts cgroup filesystems. In summary, on a 15.04 host, you can now create a container the usual way, lxc-create. The resulting container will have correct results for uptime, top, etc. Its basically a userspace workaround to changes which were deemed unreasonable to do in the kernel. It makes containers feel much more like separate systems than they would without it. Not using LXC containers You can remove it with The AccountsService package provides a set of D-Bus interfaces for querying and manipulating user account information and an implementation of these interfaces based on the usermod(8), useradd(8) and userdel(8) commands. When I removed DBus it broke timedatectl. I wonder what removing this service will break. mdadm is a Linux utility used to manage and monitor software RAID devices. The name is derived from the md (multiple device) device nodes it administers or manages, and it replaced a previous utility mdctl. The original name was quotMirror Diskquot, but was changed as the functionality increased. RAID is a method of using multiple hard drives to act as one. There are two purposes of RAID: 1) Expand drive capacity: RAID 0. If you have 2 x 500 GB HDD then total space become 1 TB. 2) Prevent data loss in case of drive failure: For example RAID 1, RAID 5, RAID 6, and RAID 10. You can remove it with polkitd PolicyKit daemon polkit - Authorization Framework My understanding is that this is like fine-grained sudo. You can allow non privilegded users to do certain actions as root. For instance, reboot your computer when you39re running Linux on a desktop computer. But I39m running a server. You can remove it with Still wondering if this breaks something. sshd (OpenSSH Daemon) is the daemon program for ssh. - D When this option is specified, sshd will not detach and does not become a daemon. This allows easy monitoring of sshd. iscsid is the daemon (system service) that runs in the background, acting on iSCSI configuration, and managing the connections. From its manpage: The iscsid implements the control path of iSCSI protocol, plus some management facilities. For example, the daemon could be configured to automatically re-start discovery at startup, based on the contents of persistent iSCSI database. I had never heard of iSCSI: In computing, iSCSI (Listeniaskzi eye-skuz-ee) is an acronym for Internet Small Computer Systems Interface, an Internet Protocol (IP)-based storage networking standard for linking data storage facilities. By carrying SCSI commands over IP networks, iSCSI is used to facilitate data transfers over intranets and to manage storage over long distances. iSCSI can be used to transmit data over local area networks (LANs), wide area networks (WANs), or the Internet and can enable location-independent data storage and retrieval. The protocol allows clients (called initiators) to send SCSI commands (CDBs) to SCSI storage devices (targets) on remote servers. It is a storage area network (SAN) protocol, allowing organizations to consolidate storage into data center storage arrays while providing hosts (such as database and web servers) with the illusion of locally attached disks. You can remove it with sbinagetty --noclear tty1 linux agetty - alternative Linux getty getty, short for quotget ttyquot, is a Unix program running on a host computer that manages physical or virtual terminals (TTYs). When it detects a connection, it prompts for a username and runs the 39login39 program to authenticate the user. Originally, on traditional Unix systems, getty handled connections to serial terminals (often Teletype machines) connected to a host computer. The tty part of the name stands for Teletype, but has come to mean any type of text terminal. This allows you to log in when you are physically at the server. In Digital Ocean, you can click on Console in the droplet details and you will be able to interact with this terminal in your browser (it39s a VNC connection I think). In the old days, you39d see a bunch of ttys started a system boot (configured in etcinittab ), but nowadays they are spun up on demand by systemd. For fun, I removed this configuration file that launches and generates agetty : When I rebooted the server, I could still connect to it via SSH but I was no longer able to log in from the Digital Ocean web console. sshd: rootpts0 amp - bash amp htop sshd: rootpts0 means that there has been an SSH session established for the user root at the 0 pseudoterminal ( pts ). A pseudoterminal emulates a real text terminal. bash is the shell that I am using. Why is there a dash at the beginning Reddit user hirnbrot helpfully explained it: There39s a dash at the beginning because launching it as quot-bashquot will make it a login shell. A login shell is one whose first character of argument zero is a -, or one started with the --login option. This will then cause it to read a different set of configuration files. htop is an interactive process viewer tool that is running in the screenshot. Sometimes looking at strace is not enough. Another way to figure out what a program does is to look at its source code. First, I need to find out where to start looking. Here we find out that uptime is actually located at usrbinuptime and that on Ubuntu it is part of the procps package. You can then go to packages. ubuntu and search for the package there. If you scroll to the bottom of the page, you39ll see links to the source code repositories: Debian Package Source Repository git:git. debian. orgcollab-maintprocps. git Debian Package Source Repository (Browsable) anonscm. debian. orgcgitcollab-maintprocps. git File descriptors and redirection When you want to redirect standard error (stderr) to standard output (stdout), is it 2ampgt1 or 2gtamp1 You can memorize where the ampersand amp goes by knowing that echo something gt file will write something to the file file. It39s the same as echo something 1gt file. Now, echo something 2gt file will write the stderr output to file . If you write echo something 2gt1. it means that you redirect stderr to a file with the name 1. Add spaces to make it more clear: echo something 2gt 1. If you add amp before 1. it means that 1 is not a filename but the stream ID. So it39s echo something 2gtamp1 . Colors in PuTTY If you have missing elements in htop when you are using PuTTY, here is how to solve it. Right click on the title bar Click Change settings. Go to Window - gt Colours Select the Both radio button Click Apply Let39s write a very simple shell in C that demonstrates the use of fork exec wait system calls. Here39s the program shell. c . Compile the program. Have you ever wondered that when you launch a process in the background you only see that it has exited only after a while when you hit Enter That39s because the shell is waiting for your input. Only when you enter a command does it check for the status of the background processes and show if they39ve been terminated. Here is what I39d like to find out more about. process state substatuses ( Ss. Ss. R. etc.) kernel threads devpts more about memory ( CODE. DATA. SWAP ) figure out time slices length Linux scheduler algorithm pinning proceses to cores write about manual pages cpumemory colors in bars process ID limit amp fork bomb lsof. ionice. schedtool Here is a list of non-minor corrections and updates since the post was published. Idle time in procuptime is the sum of all cores (Dec 2, 2016) My parentchild printf in zombie. c was reversed (Dec 2, 2016) apt remove cron installs postfix because of a dependency to an MTA (Dec 3, 2016) id can load information from other sources (via etcnsswitch. conf ), not just etcpasswd (Dec 3, 2016) Describe etcshadow password hash format (Dec 3, 2016) Use visudo to edit the etcsudoers file to be safe (Dec 3, 2016) Explain MEM (Dec 3, 2016) Rewrite the section about load averages (Dec 4, 2016) Fix: kill 1234 by default sends TERM not INT (Dec 7, 2016) Explain CPU and memory color bars (Dec 7, 2016) Please let me know if there is something wrong in this post I will gladly correct it. Related posts Recent postsCity of London exam results A-Level Results We are delighted to report another successful year of A-level results, with over two-thirds of the group achieving at least one A. There were fantastic results in Modern Foreign Languages with 33 A grades, compared to a national average of approximately 8.2. In the combined Science subjects, there was an impressive average of 94 A-B grades awarded. 100 of pupils received an A or A grade in Design Technology, as has been the case for the past 6 years. Maths results were also excellent, with 87 A-A. English results were equally impressive, with over half of the pupils achieving As. Fine Art grades were awarded an outstanding 77 As. The girls continue to impress us all with their determination and the pride they take in their work. Their results show us what inspiring teaching coupled with a genuine thirst for learning can achieve. I am very grateful to staff for everything they have done for the girls. We are delighted that so many of the girls will now continue to pursue their academic interests at the universities of their choice. We know that CLSG has prepared them fantastically well to be life-long learners and to face up confidently to any challenges ahead. Mrs Ena Harrop, Headmistress Although I am extremely pleased with my three As, what I will take away from City most of all is how supported I felt at the school. I have felt valued not only academically but also personally, and without this I would not have been able to achieve these results. The teachers and pupils at City enabled me to thrive. Ellie Arnold The support of friends and staff at CLSG has pulled me through a difficult few years. Thank you so much CLSG for helping me secure three As and my dream place at Oxford University. Alannah Burns I am thrilled with my results and really happy that everyones work has paid off. It will be sad to leave City after 11 years but I am really excited about moving on to university next year and studying the subject I enjoy most. Jennifer Griggs GCSE Results Students at City of London School for Girls are celebrating another outstanding year of GCSE results. An impressive 78 of grades were awarded an A, and 95 of all grades were A-A grades. Almost half of the pupils achieved 10 As or more, highlighting the dedication and individual successes of the girls. One student was awarded a remarkable 12 As, with approximately a third of the cohort achieving As in all their subjects. Girls attained particularly pleasing results in Modern Foreign Languages, with an average of 93 of pupils achieving A grades across the six languages. Over the science subjects (Biology, Chemistry and Physics) there was a fantastic average of over 88 A-A. 87 A grades were achieved in English Literature, with similarly remarkable results in History and Music, with 82 and 85 A grades awarded respectively. City girls have once again done fantastically well in their GCSE exams this year. Their results are a testament to their commitment and hard work and to the excellent teaching and pastoral care they have received. That so many of the girls have achieved such outstanding results while also excelling in their extra-curricular pursuits is even more impressive. We look forward to welcoming them back in September, ready to embark on their Sixth Form studies. Mrs Ena Harrop, Headmistress I am so happy with my results this year, Im over the moon I would like to thank all my teachers and I am looking forward to spending the next two years at City. Caroline Hug I am really pleased with my results and I appreciate everything my teachers have done to support me, My time at City has provided me with a variety of skills to assist me with future learning. Roxy Brill Congratulations to all pupils on their hard work and determination


No comments:

Post a Comment