web-dev-qa-db-fra.com

Comment effectuer une opération gourmande en ressources CPU / disque sans affecter de manière drastique les autres processus?

J'utilise un serveur sur Ubuntu 12.04. L'opération que j'essaie d'exécuter est un git clone, dans le cadre d'un nouveau système de sauvegarde que je suis en train de mettre en place. La source et la destination sont toutes deux locales, il n'y a donc aucune activité de réseau impliquée dans le clone.

Ce serveur héberge Minecraft et j'aimerais pouvoir faire ce genre de choses en arrière-plan pendant l'exécution du serveur. Cependant, chaque fois que j'essaye, le serveur est verrouillé et tout le monde est lancé malgré tous les efforts que je déploie pour limiter l'impact sur l'utilisation des ressources.

Voici la commande qui, j'en étais sûre, fonctionnerait:

Nice -n 19 ionice -c 3 git clone bukkit backup

D'après ce que j'ai lu, cela devrait donner au processus la priorité la plus basse du processeur et la priorité du disque "en veille uniquement". Cependant, il a toujours le même effet de verrouiller et d’annuler toutes les personnes connectées au serveur Minecraft. Pour être clair, le référentiel git ne se trouve pas dans le dossier du serveur actif, il n'y a donc aucun type de conflit d'accès aux fichiers.

Je peux donner des détails sur les spécifications matérielles si nécessaire. Merci.

5
Parker Kemp

Généralement, nous n'essayons pas d'exécuter les processus en parallèle, mais nous voyons à quel moment l'utilisation du système est la plus petite possible
Donc, au début, vous devrez trouver le moment où aucun (ou peut-être seulement quelques-uns) sur votre serveur, par exemple le lundi à 14 heures.

Pour exécuter la commande une seule fois à l'avenir, utilisez le atd (at-daemon):

$ at 0200 monday
     /home/your_home/name_of_the_script.sh
<Ctrl-D>

pour plus d'informations, lisez man at et man atd, veillez à quitter l'entrée à l'aide de Ctrl+D

  • Assurez-vous que votre script est valide + exécutable!
2
LittleByBlue

Si vous exécutez une instance Amazon EC2 où vous ne pouvez utiliser 100% du processeur que pour de courtes instances de temps (rafales) avec une utilisation moyenne imposée (par exemple, 20% du processeur virtuel), vous devez également limiter l'utilisation totale du processeur de votre ordinateur. processus avec cpulimit . Sinon, vous utiliserez tous les crédits CPU et votre instance sera limitée. Un tutoriel peut être trouvé ici .

EDIT: Il semble qu'il n'y ait pas de réseau impliqué. S'il y en avait, vous pouvez aussi essayer un transformateur de trafic par processus:

Quelques bonnes suggestions peuvent être trouvées ici , la méthode la plus simple semble être:

  • Utilisation de trickle . Here et here sont deux bons articles sur son utilisation. Aucune racine nécessaire.
  • Utilisation de iptables avec l'indicateur --pid-owner
0
jmiserez