web-dev-qa-db-fra.com

Quelle est la valeur optimale pour le passager Phusion PassengerMaxRequestQueueSize

Je sais que cela dépend du matériel de la boîte, mais par exemple, s'il y a 100 processus définis, la file d'attente par défaut est également 100. Est-il logique d'augmenter PassengerMaxRequestQueueSize à 200 ou 300? Cela dépend probablement de la mémoire disponible. Pensées?

La meilleure réponse sera d'expliquer le paramètre et probablement un ou deux exemples, en supposant que le serveur traite les demandes pendant 2-3 secondes.

Merci d'avance!

31
kode

Pourquoi vous devriez limiter la file d'attente

Toutes les demandes qui ne sont pas immédiatement traitées par un processus de demande sont mises en file d'attente. La mise en file d'attente est généralement mauvaise: cela signifie souvent que votre serveur ne peut pas traiter les demandes assez rapidement.

Une file d'attente plus grande signifie que les demandes sont moins susceptibles d'être abandonnées. Mais cela présente un inconvénient: pendant les périodes de pointe, plus la file d'attente est grande, plus vos visiteurs doivent attendre avant de voir une réponse. Cela les oblige à cliquer sur recharger, allongeant ainsi la file d'attente (leur demande précédente restera dans la file d'attente; le système d'exploitation ne sait pas qu'ils se sont déconnectés jusqu'à ce qu'il essaie de renvoyer des données au visiteur), ou les oblige à quitter frustration.

Donc, avoir une limite dans la file d'attente est une bonne chose. Il limite l'impact de la situation ci-dessus.

Vous devez vous assurer que les demandes sont mises en file d'attente le moins possible. Cela pourrait signifier:

  • Rendre votre application plus rapide (si votre charge de travail est liée au processeur).
  • Mise à niveau vers un matériel plus rapide (si votre charge de travail est liée au processeur).
  • Augmenter les paramètres de concurrence de votre application (si votre charge de travail est liée aux E/S), par exemple en augmentant le nombre de processus ou de threads.

Si vous ne pouvez pas empêcher la mise en file d'attente des demandes, la meilleure chose à faire est de garder la file d'attente courte , et d'afficher un message d'erreur amical une fois atteint la limite de file d'attente. Quelque chose comme, "Nous sommes désolés, beaucoup de gens nous rendent visite en ce moment. Veuillez réessayer plus tard." La documentation de PassengerMaxRequestQueueSize vous indique comment procéder.

Valeur optimale pour la taille de la file d'attente

Il est difficile de dire quelle devrait être la taille optimale de la file d'attente. Une bonne règle de base est la suivante: définissez la taille de la file d'attente des demandes sur le nombre maximal de demandes que vous pouvez gérer en une seconde. Selon votre situation, vous devrez peut-être modifier légèrement les choses.

Cette règle de base vient de la notion de trafic en rafale attendu . Combien de demandes simultanées attendez-vous sur votre serveur?

Supposons que votre taille de file d'attente est de 100 et que, pour une raison quelconque, vous recevez 150 demandes en même temps . Supposons que votre serveur soit suffisamment rapide pour traiter 150 requêtes en une demi-seconde, vous savez donc que ce n'est pas un problème de performances. Mais si vous avez une taille de file d'attente de demande de 100, alors 50 de ces demandes seront supprimées avec une erreur "File d'attente de demande pleine".

Dans une telle situation, vous devez définir la taille de la file d'attente sur le nombre maximal de demandes simultanées que vous pensez pouvoir gérer en toute sécurité sans problèmes de performances.

44
Hongli

This SO question and the Passenger docs here Parlez-en plus sur l'utilisation de ceci. Si vous voulez plus d'informations sur la raison pour laquelle cela se produit sur votre serveur, vous pouvez essayer d'exécuter passenger-status (vous devez généralement l'exécuter en tant que root).

Si vous souhaitez définir une page d'erreur personnalisée lorsque les visiteurs voient ce problème, vous pouvez utiliser ce qui suit (dans Apache) pour définir une page d'erreur personnalisée:

PassengerErrorOverride on
ErrorDocument 503  /error503.html

Comme mentionné par Hongli, vous pouvez également modifier le paramètre PassengerMaxRequestQueueSize à un nombre plus élevé pour mettre en file d'attente plus de demandes. Vous pouvez également le mettre à 0 et le désactiver (pour la plupart des situations, ce n'est cependant pas une solution optimale).

Pour référence, le message d'erreur par défaut qu'un visiteur de votre site verra lorsqu'il se heurtera à cette limite est:

This website is under heavy load

We're sorry, too many people are accessing this website at the same time. We're working on this problem. Please try again later.
9
SnapShot