Comment obtenir un processus de ligne de commande pour utiliser moins de puissance de traitement

StackOverflow https://stackoverflow.com/questions/257659

  •  06-07-2019
  •  | 
  •  

Question

Je me demande comment faire en sorte qu'un processus s'exécute en ligne de commande pour utiliser moins de puissance de traitement. Le problème que je rencontre est que le processus consiste essentiellement à reprendre le processeur et à emporter MySQL et le reste du serveur. Tout devient très lent.

J'ai déjà utilisé nice mais je n'ai pas eu beaucoup de chance avec cela. Si c'est la solution, comment l'utiliseriez-vous?

J'ai également envisagé de mettre en place des commandes sleep , mais la mémoire sera toujours utilisée, de sorte que ce n'est pas la meilleure option.

Y a-t-il une autre solution?

Peu importe pour combien de temps cela dure, dans des limites raisonnables.

Si cela fait une différence, le script est un script PHP, mais je l'exécute en ligne de commande, car il faut déjà plus de 30 minutes pour l'exécuter.

Modifier: le processus est un script de migration. Par conséquent, je ne souhaite vraiment pas perdre trop de temps à l'optimiser, car il ne doit être exécuté qu'à des fins de test et une seule fois pour être opérationnel. Juste pour tester, cela arrête le serveur à peu près ... et c'est un serveur partagé.

Était-ce utile?

La solution

Vous devez utiliser nice avec 19 " gentillesse " il est donc très peu probable que le processus s’exécute s’il existe d’autres processus en attente du processeur.

 nice -n 19 <command>

Assurez-vous que le programme n'a pas d'attentes occupées et vérifiez également le temps d'attente des E / S.

Autres conseils

Le mieux que vous puissiez vraiment faire sans modifier le programme est de changer la valeur de nice en valeur maximale en utilisant nice ou renice . Votre meilleur choix est probablement de profiler le programme pour savoir où il passe le plus clair de son temps / en utilisant la plus grande partie de sa mémoire et d'essayer de trouver un algorithme plus efficace pour ce que vous essayez de faire. Par exemple, si vous travaillez avec un jeu de résultats volumineux depuis MySQL, vous pouvez traiter les enregistrements un par un au lieu de charger tout le jeu de résultats en mémoire ou optimiser vos requêtes ou le traitement en cours sur les résultats.

Quel processus prend réellement le processeur? PHP ou MySQL? Si c'est MySQL, "gentil" n'aidera pas du tout (puisque le serveur n'est pas "gentil en place).

S'il s'agit de MySQL en général, vous devez examiner vos requêtes et le réglage de MySQL pour savoir pourquoi ces requêtes claquent le serveur.

En claquant le processus de votre serveur MySQL, vous pouvez afficher le message "tout le système est lent". si votre vue principale du système via MySQL.

Vous devez également déterminer si le processus de ligne de commande cmd est intensif en entrées-sorties. Cela peut être ajusté sur certaines distributions Linux en utilisant la commande 'ionice', bien que son utilisation ne soit pas aussi simpliste que la commande 'nice' du processeur.

Utilisation de base:

ionice -n7 cmd

lancera 'cmd' en utilisant le planificateur 'best effort' avec la priorité la plus basse. Consultez la page de manuel pour plus de détails sur l’utilisation.

L’utilisation des cycles de la CPU ne devrait pas prendre le contrôle du reste du système. Vous pouvez le montrer en faisant:

while true; do done

Ceci est une boucle infinie et utilisera autant de cycles de processeur qu’elle peut obtenir (arrêtez-le avec ^ C). Vous pouvez utiliser top pour vérifier qu'il fait son travail. Je suis certain que cela n’affectera pas de manière significative les performances globales de votre système au point de faire mourir MySQL.

Cependant, si votre script PHP alloue beaucoup de mémoire, cela peut certainement faire une différence. Linux a tendance à tuer les processus lorsque le système commence à manquer de mémoire.

Je voudrais préciser le problème et être sûr de la cause du problème avant de chercher une solution.

Vous pouvez monter le répertoire / système de fichiers / quel que soit votre serveur sur une autre machine via NFS et y exécuter le script (je sais, cela signifie qu’il faut éviter le problème et que cela n’est pas vraiment pratique: |).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top