Notre application a ~ 10 threads faisant des tâches distinctes (pas de piscines de fil). Nous ne vivons pas d'une impasse, mais essaie toujours de réduire la latence pour répondre à une demande afin que nous souhaitions déterminer les verrouillages les plus soutenus. JConsole montre à quelle fréquence les threads sont bloqués et ce n'est pas très souvent, mais nous voulons toujours savoir quelles serrures sont les plus soutenues. P>
Nous courons à l'aide de Sun JVM, JLA de IBM n'est donc pas utile, et nous ne courrons pas sur Solaris, nous ne pouvons donc pas utiliser Dtrace. p>
Edit: Je veux faire cette observation en production, où un profileur ralentirait l'application inacceptablement. Ceci est un système de négociation, si nous sommes lents, nous perdons de l'argent, nous ne gérons donc pas de profilers en production. Il est également assez difficile de simuler les nombreux échanges que nous parlons dans un test de performance. p>
3 Réponses :
Obtenez un bon profileur comme Yourkit . Il peut vous dire combien de temps est passé à attendre et à bloquer des méthodes particulières et des moniteurs d'objets qui y sont contenus. Par exemple: p>
En ce qui concerne votre commentaire sur les métriques de production, vous êtes assez limité dans ce que vous pouvez rassembler. Le plus d'informations que vous allez obtenir est depuis le Threadmxbean qui peut vous donner des métadonnées à propos de tous les threads de course. Cela ne vous donnera pas d'informations sur la contention d'un moniteur d'objet spécifique. P>
Je ne veux pas monter sur ma tour d'ivoire ici, mais je pense vraiment que votre meilleur pari est d'essayer de reproduire votre environnement de production aussi près que possible. Passer du temps à obtenir cette installation maintenant paiera des dividendes à plusieurs reprises à l'avenir. P>
Même en cours d'exécution d'un profileur avec dans un environnement simulé mais pas assez bon-assez bon, vous donnera probablement de bonnes informations. P>
JProfiler a une fonctionnalité similaire. Mais je veux faire cette observation dans la production, où un profileur ralentit l'application inacceptablement. Ceci est un système de négociation, si nous sommes lents, nous perdons de l'argent, nous ne gérons donc pas de profilers en production. Il est également assez difficile de simuler les nombreux échanges que nous parlons dans un environnement de test de performance.
@Ted, je modifierais votre question pour ajouter ces informations car elle modifie considérablement ce que vous pouvez et ne pouvez pas faire.
Merci Kevin, édité. Nous avons un environnement de test de performance qui a été très utile dans le passé, mais je pense que la plupart des magasins de financement de haute fréquence ont décidé que de dépenser trop de temps à simuler le monde réel n'est pas productif. Je chercherai un commerce où nous pouvons courir un profileur en production sans trop de dégâts.
J'ai vu votre recommandation à simuler après avoir posté mes propres conseils le long des mêmes lignes, mais sans votre pointeur à votrekit.
Pour un problème similaire dans la base de données, nous vous connectons une ligne juste avant de demander et immédiatement après avoir acquis une serrure. Nous sommes également connectés après la libération. Nous post-traiter ensuite ces données pour générer le type de statistiques que vous recherchez. P>
Edit: Au sommet d'un système développé, Aspectj pourrait être une bonne option pour générer les journaux. p>
Ted, je sympathise avec votre situation, mais lorsque la performance est criante, je vous recommanderais de mordre la balle et de simuler. p>
Cela ne devrait pas être aussi difficile que vous craignez: au lieu d'essayer de générer un flux de messages de vos échanges, pourquoi ne pas enregistrer le flux entrant et le replayez-le sur la simulation? P>
Sans quelque chose comme ça, vous allez toujours courir dans le problème Heisenberg: affectant le système que vous mesurez. P>
DTrace est le seul système que je suis conscient personnellement de ce que vous voulez sans outils de profilage.
En pensant plus à ce sujet, je pense que l'instrumentation est la meilleure approche. Vous pouvez loger des demandes de verrouillage individuelles ou garder des compteurs mondiaux.