2010-03-08 16 views
9

J'ai une fonction dans mon CMS qui permet à un utilisateur de télécharger un fichier zip plein d'images et le serveur va les extraire et les insérer dans une galerie d'images. J'ai remarqué que cela broyait le processeur assez sévèrement et ralentissait les autres requêtes. Je pense à utiliser le plugin delayed_job pour déléguer chaque ajout d'image en arrière-plan, mais je veux aussi donner à ce processus une priorité CPU plus faible afin qu'il n'embarrasse pas le serveur. Je suis assez confiant dans la partie de retard de l'exercice, mais la partie d'étranglement est où je suis coincé. Existe-t-il une façon rubis d'abaisser la priorité d'un appel de méthode?Exécution de tâches en arrière-plan avec une priorité CPU inférieure

C'est le redimensionnement de l'image qui provoque la mastication du processeur.

Toutes les idées bienvenues :)

Répondre

6

Si votre CMS est en cours d'exécution sur le système Linux, vous pouvez le faire en utilisant la commande « agréable ». "gentil" commencera un processus à une priorité inférieure. La façon la plus simple de l'utiliser est de mettre juste devant votre commande. Donc, si vous exécutez la commande comme

unzip uploaded-images.zip

au lieu de fonctionner

nice unzip uploaded-images.zip

Cela entraînera le processus de décompression pour obtenir la priorité du CPU, laissant d'autres processus sont exécutés en premier. Voir le man page pour plus d'options, comme comment ajuster le niveau de priorité.

+0

Merci pour cela, je suis également tombé sur ceci avec google: http://stackoverflow.com/questions/1340142/preventing-delayed-job-background-jobs-from-consuming-too-much-cpu-on-a -Single-se –