Comment empêcher autant d'exemples d'apt-check en cours d'exécution?
18
J'ai un serveur Ubuntu 12.04 qui vient de planter pour une cause très évidente: plus de 30 apt-checkprocessus consommant toute la mémoire, le tueur OOM intervient, tuant des services vitaux. Je ne sais pas d'où apt-checkviennent les processus, mais je suppose que mes plugins Nagios / Icinga check_aptpourraient l'utiliser, ainsi que la byobuligne d'état pourrait vouloir afficher sa sortie. Je suppose que quelque chose s'est enfermé et que tous les processus attendaient, tout en gardant de la mémoire.
Comment puis-je empêcher d'avoir autant d'instances apt-checksur le système? Cela n'a pas de sens pour moi et il devrait juste se fermer dès qu'il ne peut pas obtenir un verrou de lecture sur la base de données dpkg.
Il semble que je ne sois pas le seul à avoir des ennuis ici. Toutes les suggestions apt-checksont assez négatives:
(navigateur propre, non connecté, pas de recherche personnalisée)
Certains plongent dans apt-checkm'a donné ces indices pour être un script très brut qui doit être corrigé. Avec tout le respect que je dois à ses auteurs, il échoue sur mes serveurs. Voici mes pensées:
La combinaison des deux derniers lui permet de s'entasser indéfiniment en spirale vers le bas. Si le système est utilisé à d'autres fins avec une priorité plus élevée, la quantité de processus augmentera simplement et il n'y a pas de fin, car il apt-checkn'aura jamais de priorité sur lui. Les problèmes ne s'aggraveront que lorsque le tueur OOM décidera de tuer les processus vitaux de votre système.
Si l'un de ces deux aspects du comportement était différent, cela ne permettrait pas au système de se retrouver dans un tel état de rupture, c'est mon hypothèse.
Bien que les chaînesapt-check aient raison sur le fait que les processus parents sont également responsables de cela, je pense que les points ci-dessous sont des défauts et doivent être signalés comme un bogue pour être traités correctement:
il devrait se fermer s'il faut un temps déraisonnable pour obtenir des informations
En fait, il semble que le tueur Linux OOM fasse une heuristique à ce sujet. Les processus agréés obtiendront un score accru et les processus de longue durée seront diminués. ( source - merci à Ulrich Dangel de l' avoir signalé )
Solution possible que je peux proposer:
cache les résultats après le traitement
cache de sortie si moins de N secondes sans charger toutes les bibliothèques Python-APT pour chaque --helpappel simple (pair ).
rendre le nicelevel configurable - Permettez-moi de changer / désactiver cela, s'il vous plaît! Je crois que le mettre à 0 aidera réellement
Je pense que vous avez raté la plus grande chose à faire: utiliser un fichier de verrouillage et ne pas autoriser l'exécution de plusieurs instances à la fois.
derobert
@derobert C'est un script que n'importe quel utilisateur peut exécuter, sans privilèges spécifiques sur Ubuntu, pas un démon. Ou puis-je utiliser /var/run/ /tmppour ce fichier de verrouillage lisible / inscriptible en toute sécurité? Gros trou là-bas: ajoutez un fichier de verrouillage et l'administrateur ne sera pas informé des mises à jour du système!
gertvdijk
Quel que soit le lancement automatique (entraînant l'exécution de plus de 30 copies), il faut effectuer le verrouillage. Ou il pourrait le faire lui-même, par utilisateur. Quoi qu'il en soit, c'est un bug qui doit être résolu.
derobert
Nagios / Icinga semble éviter l'écueil. Au moins, il avait un délai d'attente de 10 secondes et a averti s'il était dépassé. (Bien que je ne trouve pas comment configurer le délai d'attente - je préfère plus longtemps). C'est Byobu sur Debian qui a causé le problème pour moi; sur Ubuntu, il est censé être corrigé .
sourcejedi
4
Vous devez savoir quel processus génère apt-check. vous pouvez utiliser quelque chose comme ps pour obtenir l'arborescence des processus.
ps -A --forest
Si apt-check n'a pas de parents, cela pourrait être un problème avec apt-check lui-même et pas un programme en particulier. si tel est le cas, j'essaierais de déboguer apt-check.
Merci. M'a donné quelques idées à approfondir. Cependant, cela m'a amené à croire que c'est un problème de apt-checkvraiment - voir ma propre réponse .
gertvdijk
Si cela consomme de la mémoire et du temps CPU, ce n'est pas un zombie.
Gilles 'SO- arrête d'être méchant'
@Gilles bon point.
cordes
0
Base écrite sur Ubuntu 12.04
J'ai le même problème et j'ai découvert que c'est à cause de byobu, si je lance juste apt-get updatene pas utiliser byobu, il n'y aura pas de check-aptprocessus. En outre, il se rapporte à l' update-notifieremballage, quand j'ai enlevé ces paquets (mise à jour-notifer-commune, mise à jour-notificateur), en utilisant byobuet exécuter apt-get update, il a couru une autre commande , mais tout à fait la même mémoire en utilisant: apt-get -s -o Debug::NoLocking=true upgrade.
D'autres choses peuvent fonctionner apt-get update(mais ne fonctionnent probablement pas check-apt)
passer l'argument à check_aptpour mettre à jour / mettre à niveau le paquet.
Sur un bureau, il peut y avoir plus de choses impliquées.
Conclude:
byobuintercepte l'événement lorsque vous exécutez apt-get updateet déclenchez ces check-aptprocessus, reconfigurez la barre d'état de byobupour résoudre ce problème.
/var/run
//tmp
pour ce fichier de verrouillage lisible / inscriptible en toute sécurité? Gros trou là-bas: ajoutez un fichier de verrouillage et l'administrateur ne sera pas informé des mises à jour du système!Vous devez savoir quel processus génère apt-check. vous pouvez utiliser quelque chose comme ps pour obtenir l'arborescence des processus.
Si apt-check n'a pas de parents, cela pourrait être un problème avec apt-check lui-même et pas un programme en particulier. si tel est le cas, j'essaierais de déboguer apt-check.
la source
apt-check
vraiment - voir ma propre réponse .Base écrite sur Ubuntu 12.04
J'ai le même problème et j'ai découvert que c'est à cause de
byobu
, si je lance justeapt-get update
ne pas utiliserbyobu
, il n'y aura pas decheck-apt
processus. En outre, il se rapporte à l'update-notifier
emballage, quand j'ai enlevé ces paquets (mise à jour-notifer-commune, mise à jour-notificateur), en utilisantbyobu
et exécuterapt-get update
, il a couru une autre commande , mais tout à fait la même mémoire en utilisant:apt-get -s -o Debug::NoLocking=true upgrade
.D'autres choses peuvent fonctionner
apt-get update
(mais ne fonctionnent probablement pascheck-apt
)check_apt
pour mettre à jour / mettre à niveau le paquet./etc/cron.daily/apt
peut également mettre à jour la liste des packages (voir https://help.ubuntu.com/lts/serverguide/automatic-updates.html ), mais il ne s'exécute qu'une fois par jour et ne devrait pas poser de problème.Sur un bureau, il peut y avoir plus de choses impliquées.
Conclude:
byobu
intercepte l'événement lorsque vous exécutezapt-get update
et déclenchez cescheck-apt
processus, reconfigurez la barre d'état debyobu
pour résoudre ce problème.la source