Maison > Java > javaDidacticiel > le corps du texte

méthode btrace pour localiser les défauts de production

高洛峰
Libérer: 2017-02-27 15:35:23
original
1477 Les gens l'ont consulté

Avant-propos

Souvent, nous avons besoin de connaître plus de détails sur le fonctionnement du programme, mais il est impossible d'imprimer tous les détails de fonctionnement du programme pendant le développement Accédez au journal. Habituellement, ce que vous pouvez faire à ce stade est de modifier le code, de le redéployer, puis de l'observer à nouveau. Cependant, cette méthode n'est pas très adaptée aux applications en ligne. difficile à modifier, comme d'autres packages externes référencés, etc. sont très gênants. BTrace est un outil qui peut afficher dynamiquement les détails de l'exécution du programme sans modifier le code ni redémarrer l'application. L'article suivant présente la méthode btrace pour localiser les défauts de production. , les amis dans le besoin peuvent s'y référer.

Phénomènes

Certaines requêtes sont très lentes à travers la couche d'accès aux données et provoquent le blocage du thread de traitement, et l'exception ne peut pas être détectée à partir de la surveillance.

Écrire le script btrace

@BTrace
public class DBProxyTrace {

 @OnMethod(clazz = "xxx.xxx.QueryHandler", method = "query",
  location = @Location(Kind.RETURN))
 public static void trace2(String sql, @Duration long duration) {
 if (duration/1000000 > 10 * 1000) {
  com.sun.btrace.BTraceUtils.println(duration/1000000 + "ms");
  com.sun.btrace.BTraceUtils.println("this task executes more than 10s. the sql is : "
   + sql);
  com.sun.btrace.BTraceUtils.println("jstack is : ");
  com.sun.btrace.BTraceUtils.jstack();
 }
 }
}
Copier après la connexion

Juger le SQL et les informations de pile exécutées pendant plus de 10 secondes .

Compilez le script DBProxyTrace.Java et confirmez qu'il n'y a aucun problème avec le script.

./bin/btracec -cp build/ java/DBProxyTrace.java
Copier après la connexion

Exécuter le script DBProxyTrace.class

./bin/btrace -cp build/ 17342 DBProxyTrace.class
Copier après la connexion

Message

10468ms
this task executes more than 10s. the sql is : rollback
jstack is :
xxx.QueryHandler.query(QueryHandler.java:106)
xxx.net.AbstractConnection.onReadData(AbstractConnection.java:245)
xxx.net.NIOReactor$RW.run(NIOReactor.java:77)
java.lang.Thread.run(Thread.java:745)
Copier après la connexion

Le positionnement

est bloqué lors de l'annulation de la transaction.

Utilisez jstack pour un positionnement ultérieur.

Imprimer la pile JVM

"$_NIOREACTOR-7-RW" prio=10 tid=0x00007f069856f000 nid=0xde1 waiting for monitor entry [0x00007f0677011000]
 java.lang.Thread.State: BLOCKED (on object monitor)
 at Oracle.jdbc.driver.PhysicalConnection.rollback(PhysicalConnection.java:1167)
 - waiting to lock <0x000000068086fbc0> (a oracle.jdbc.driver.T4CConnection)
Copier après la connexion

Conclusion

Blocage Dans l'action de restauration du pilote Oracle, cela est en fait dû au fait que le pilote Oracle ajoute un verrou au niveau de la couche inférieure pour garantir la réponse à la demande série, et ce canal est bloqué par des instructions lentes, donc la restauration est bloquée.

Pour plus d'articles liés à la méthode de localisation des défauts de production de btrace, veuillez faire attention au site Web PHP chinois !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal