[Processus] Priorité de processus sur un serveur (résolu)

Applications, problèmes de configuration réseau
Répondre
Avatar de l’utilisateur
Feng
yeomen
Messages : 273
Inscription : mer. 07 avr. 2010, 20:19

[Processus] Priorité de processus sur un serveur (résolu)

Message par Feng »

Bonjour,

Dans le cadre d'un script de conversion de vidéos sur serveur je cherche à réduire la priorité du processus de conversion afin que le site ne soit pas ralentin durant l'opération.
Le serveur est un quad core à 2.6Ghz.

J'ai tenté d'utiliser cpulimit ( -l 50 ) et nice -n 10 sans succès aucun !! (le script est lancé en root)

Je ne trouve rien d'autre que ces deux commandes dans mes recherches ...
Dernière modification par Feng le dim. 21 oct. 2012, 21:28, modifié 2 fois.
Avatar de l’utilisateur
chipster
Maître du Kyudo
Messages : 2063
Inscription : ven. 11 août 2006, 22:25
Localisation : Saint-Étienne (42)
Contact :

Re: Priorité de processus

Message par chipster »

Bonjour
Merci de modifier le titre du sujet comme il l'a été demandé lors de l'édition de celui-ci :chinois:
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17187
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [Processus] Priorité de processus sur un serveur

Message par benjarobin »

Tout d'abord pour nice 10 est la valeur par défaut donc tu ne risques pas d'avoir une limitation...
Il faut que tu lances le programme de cette façon

Code : Tout sélectionner

nice -n 19 mon-programme
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
Feng
yeomen
Messages : 273
Inscription : mer. 07 avr. 2010, 20:19

Re: [Processus] Priorité de processus sur un serveur

Message par Feng »

Hum, c'est pas faux, ceci dit ça ne change rien en fait ^^'

Mes autres sites sur ce serveur tournant normalement, je me demande si c'est pas le fait que ce soit lancé en sous-processus apache qui créé ce ralentissement. En fait j'en suis convaincu ^^ . Est-ce que lancer la fonction de conversion via la commande system (présente dans quasiment tous les langages de programmation) pourrait éviter ce soucis ? Peut-être en nohup ?
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17187
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [Processus] Priorité de processus sur un serveur

Message par benjarobin »

Je crains de comprendre... Dis moi pas que tu passe par un cgi pour lancer la conversion et que le programme de conversion reste toujours attaché à apache
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
Feng
yeomen
Messages : 273
Inscription : mer. 07 avr. 2010, 20:19

Re: [Processus] Priorité de processus sur un serveur

Message par Feng »

Un script php qui lance un shell_exec :D (pas taper)
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17187
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [Processus] Priorité de processus sur un serveur

Message par benjarobin »

Ok dans ce cas appel ce script avec ton shell_exec

Code : Tout sélectionner

#!/bin/bash

daemonize() {
    ((
        [[ -t 0 ]] && exec </dev/null
        [[ -t 1 ]] && exec >/dev/null
        [[ -t 2 ]] && exec 2>/dev/null
        cd /
        eval exec {3..255}\>\&-
        exec setsid "$@"
    ) & ) &>/dev/null
}

daemonize nice -19 "$@"
Et tu l'appel de cette façon shell_exec("chemin-script sleep 30");
J'ai mis sleep 30 comme exemple mais tu peux mettre n'importe quelle autre commande

Mais encore mieux, via un paquet

Code : Tout sélectionner

yaourt -S daemonize
Puis

Code : Tout sélectionner

shell_exec("daemonize /usr/bin/nice -19 sleep 30");
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
Feng
yeomen
Messages : 273
Inscription : mer. 07 avr. 2010, 20:19

Re: [Processus] Priorité de processus sur un serveur

Message par Feng »

Merci !!

Par contre du coup je dois changer de stratégie, puisqu'en procédant ainsi, le script php n'attend pas la fin de la commande démonisée, je dois rajouter un curl pour informer le site que la conversion est terminée :)
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17187
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [Processus] Priorité de processus sur un serveur (RESOLU

Message par benjarobin »

daemonize possède une option pour écrire le PID de l’action en court, avec un peu d'Ajax cela se fait bien :-)
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
Feng
yeomen
Messages : 273
Inscription : mer. 07 avr. 2010, 20:19

Re: [Processus] Priorité de processus sur un serveur (RESOLU

Message par Feng »

La conversion est asynchrone : lorsqu'une nouvelle vidéo est envoyée, elle est mise en attente, puis sera convertie quand ce sera son tour. Je n'ai donc pas besoin de suivi pour le client via de l'Ajax :p
Néanmoins je peux mettre un while & sleep qui vérifiera si le processus est toujours en cours ou pas, dès qu'il ne l'est plus, on sort de la boucle. C'est pas super clean mais bon ...
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17187
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [Processus] Priorité de processus sur un serveur (RESOLU

Message par benjarobin »

En gros tu as besoin d'une FIFO, personnellement j'aurais implémenter ceci différemment.

Un petit script en python qui écoute sur un port UDP en local, et qui empile les messages et les dépile depuis un thread...
Le PHP ne ferait qu'envoyer l’événement via un message UDP au script python qui s'occupe de dépiler la FIFO

Je cite python mais cela peut très bien être Qt comme tout autre langage :-)
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
Feng
yeomen
Messages : 273
Inscription : mer. 07 avr. 2010, 20:19

Re: [Processus] Priorité de processus sur un serveur (RESOLU

Message par Feng »

Malheuresement je ne connais ni python ni Qt, je ne connais que le bash dans lequel j'arrive à me débrouiller.
Si je comprends bien tu parles d'un service indépendant qui recevrais l'instruction "converti la vidéo 1337" , qui irais la chercher et la convertirais, puis renverrais un signal à apache pour l'informer que la vidéo a été convertie ?
Avatar de l’utilisateur
Feng
yeomen
Messages : 273
Inscription : mer. 07 avr. 2010, 20:19

Re: [Processus] Priorité de processus sur un serveur (résolu

Message par Feng »

Visiblement daemonize a un bug... je teste avec :

Code : Tout sélectionner

daemonize -p test /bin/echo "plop"
Et quand je fais un cat test, il est vide !

Tu pourrais m'expliquer ta fonction daemonize à toi stp ? Je veux bien l'utiliser mais je comprends tout juste sa structure :/
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17187
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [Processus] Priorité de processus sur un serveur (résolu

Message par benjarobin »

Hum c'est normal, pour le PID

Code : Tout sélectionner

daemonize -c /chemin/ -p foo /usr/bin/sleep 0
soit

Code : Tout sélectionner

daemonize -p /chemin/foo /usr/bin/sleep 0
On va dire que c'est un petit bug de daemonize
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
Feng
yeomen
Messages : 273
Inscription : mer. 07 avr. 2010, 20:19

Re: [Processus] Priorité de processus sur un serveur (résolu

Message par Feng »

Autant pour moi ... fallait comprendre que le working dir pour le démon c'était en fait pour daemonize et pas pour l'application démonisée !

Code : Tout sélectionner

[feng@firemoon-desktop ~]$ daemonize --help
daemonize: illegal option -- -
Bad option: --
daemonize, version 1.7.3
Usage: daemonize [OPTIONS] path [arg] ...

OPTIONS

-a             Append to, instead of overwriting, output files. Ignored 
               unless -e and/or -o are specified.
-c <dir>       Set daemon's working directory to <dir>.
-e <stderr>    Send daemon's stderr to file <stderr>, instead of /dev/null.
-E var=value   Pass environment setting to daemon. May appear multiple times.
-o <stdout>    Send daemon's stdout to file <stdout>, instead of /dev/null.
-p <pidfile>   Save PID to <pidfile>.
-u <user>      Run daemon as user <user>. Requires invocation as root.
-l <lockfile>  Single-instance checking using lockfile <lockfile>.
-v             Issue verbose messages to stdout while daemonizing.
Avoue que ça porte à confusion !!
Merci en tout cas :)
Répondre