1 votes

Wcf ThreadPool et async

J'ai une page web asp.net qui fait 7 requêtes asynchrones à un service WCF sur un autre serveur. Les deux boîtes sont propres sans rien d'autre d'installé.

J'ai également augmenté le nombre de connexions maximales dans le fichier web.config à 20.

Je lance un appel unique à travers le système et la page est renvoyée en 800 ms. En résumé, je pense que le pool de threads est submergé car, une fois placé en sous-charge, je ne peux pas obtenir plus de 8 requêtes par seconde, même si les deux boîtiers quad core fonctionnent à une charge CPU de 20% et que le serveur SQL auquel il est connecté renvoie les requêtes en moins de 10 ms par appel.

J'ai changé le comportement du service en concurrency.multiple mais cela ne semble pas aider.

Des idées, quelqu'un ?

3voto

Zach Bonham Points 4460

De nombreux facteurs différents peuvent entrer en ligne de compte. Si l'on admet que la modification du modèle d'instanciation du service n'a eu aucun effet (c'est une grande hypothèse), il est possible que le goulot d'étranglement se trouve en amont du service. Soit au niveau du serveur web, soit au niveau du générateur de charge du client.

Vous avez plusieurs domaines à examiner pour les réglages : le client, le serveur web, le serveur de service wcf - en supposant qu'il n'y ait pas de périphériques réseau au milieu. Choisissez une extrémité et travaillez vers l'autre extrémité. Puisque je suppose déjà que ce n'est pas le service, je commencerais par le client et j'irais vers le service wcf.

Client
Quelle est la machine qui supporte la charge du serveur web ? Un ordinateur portable ? Un ordinateur de bureau ? Un agent de test dédié ou partagé ? Le client qui joue le rôle de générateur de charge dans le cadre de ce test est également susceptible de maxConnections car il s'agit d'un environnement client.

Quelle est l'utilisation de l'unité centrale du client qui génère la charge ? Se pourrait-il que le pilote de test soit tout simplement incapable de générer une charge suffisante pour pousser ces boîtes ? Pouvez-vous ajouter des clients supplémentaires à votre test ?

Serveur Web
Qu'est-ce que la system.net/processModel dans le fichier machine.config du serveur web ASP.NET ? Essayez de définir autoConfig = true. Cela permettra à la configuration de se dimensionner automatiquement en fonction de la "taille" de la machine sur laquelle elle est exécutée.

Service WCF
Examiner le service WCF pour vérifier s'il existe des paramètres par défaut d'étranglement et les modifier en conséquence. Voir ServiceThrottlingBehavior sur MSDN.

Faites-nous part de tout changement de comportement que vous pourriez observer (le cas échéant) si vous procédez à des changements !

1voto

JustLoren Points 2682

La vraie réponse que tout le monde a oubliée est que vous utilisez une page web ASP.NET. Cela signifie que votre client est une sorte de navigateur web. Les navigateurs modernes ont une limite de 2 requêtes asynchrones simultanées à tout moment. Cela signifie que 5 de vos requêtes étaient en file d'attente et attendaient que les deux premières se terminent. Une fois les deux premières terminées, les deux suivantes ont été servies, puis les deux suivantes, puis la dernière.

Tous ces allers-retours et ces poignées de main prennent du temps. Je suppose que votre temps d'aller-retour est d'environ 200 ms, malheureusement vous devez le faire 4 fois.

Je n'aime pas non plus la limitation à 2 navigateurs maximum pour les appels aux webservices.

0voto

Raphael Points 2579

Ce service est-il hébergé dans IIS, WAS ou un service Windows ?

Vous devriez essayer de configurer Windows pour qu'il exécute les services avec une priorité plus élevée. Votre service WCF crée probablement les threads dont il a besoin, mais ceux-ci devraient être exécutés avec une faible priorité.

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X