Heim > Java > javaLernprogramm > Hauptteil

Btrace-Methode zur Lokalisierung von Produktionsfehlern

高洛峰
Freigeben: 2017-02-27 15:35:23
Original
1457 Leute haben es durchsucht

Vorwort

Oft müssen wir mehr Details über die Ausführung des Programms wissen, aber es ist unmöglich, während der Entwicklung alle Ausführungsdetails im Programm auszudrucken . Normalerweise können Sie zu diesem Zeitpunkt den Code ändern, erneut bereitstellen und ihn dann erneut beobachten. Wenn Sie jedoch auf Code stoßen, ist dies nicht der Fall B. andere referenzierte externe Pakete usw. sind sehr problematisch. BTrace ist ein Tool, das Programmlaufdetails dynamisch anzeigen kann, ohne den Code zu ändern oder die Anwendung neu zu starten. Der folgende Artikel stellt die Methode von BTrace vor, um Produktionsfehler zu lokalisieren. Freunde in Not können darauf verweisen.

Phänomene

Einige Anfragen durchlaufen die Datenzugriffsschicht sehr langsam und führen dazu, dass der Verarbeitungsthread blockiert wird und die Ausnahme bei der Überwachung nicht erkannt werden kann.

Btrace-Skript schreiben

@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();
 }
 }
}
Nach dem Login kopieren

Beurteilen Sie die SQL- und Stack-Informationen, die länger als 10 Sekunden ausgeführt werden .

Kompilieren Sie das Skript DBProxyTrace.Java und bestätigen Sie, dass kein Problem mit dem Skript vorliegt.

./bin/btracec -cp build/ java/DBProxyTrace.java
Nach dem Login kopieren

Führen Sie das Skript DBProxyTrace.class aus

./bin/btrace -cp build/ 17342 DBProxyTrace.class
Nach dem Login kopieren

Nachricht

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)
Nach dem Login kopieren

Positionierung

ist beim Transaktions-Rollback blockiert.

Verwenden Sie jstack zur weiteren Positionierung.

JVM-Stack drucken

"$_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)
Nach dem Login kopieren

Fazit

Blockierung Bei der Rollback-Aktion des Oracle-Treibers liegt dies tatsächlich daran, dass der Oracle-Treiber auf der unteren Ebene eine Sperre hinzufügt, um die Antwort auf die serielle Anforderung sicherzustellen, und dieser Kanal durch langsame Anweisungen blockiert wird, sodass das Rollback blockiert wird.

Weitere Artikel zur Btrace-Methode zur Lokalisierung von Produktionsfehlern finden Sie auf der chinesischen PHP-Website!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!