From 68aebed3a5063b97e685b1c70a2eac234e55ceb7 Mon Sep 17 00:00:00 2001 From: Arndt Brenschede Date: Sun, 16 Dec 2018 13:35:17 +0100 Subject: [PATCH] stack sampling for RouteServer --- .../src/main/java/btools/server/RouteServer.java | 15 +++++++++++++++ .../src/main/java/btools/util/StackSampler.java | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/brouter-server/src/main/java/btools/server/RouteServer.java b/brouter-server/src/main/java/btools/server/RouteServer.java index fe3e249..28f8387 100644 --- a/brouter-server/src/main/java/btools/server/RouteServer.java +++ b/brouter-server/src/main/java/btools/server/RouteServer.java @@ -2,6 +2,7 @@ package btools.server; import java.io.BufferedReader; import java.io.BufferedWriter; +import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; @@ -27,6 +28,7 @@ import btools.router.RoutingEngine; import btools.server.request.ProfileUploadHandler; import btools.server.request.RequestHandler; import btools.server.request.ServerHandler; +import btools.util.StackSampler; public class RouteServer extends Thread { @@ -239,6 +241,19 @@ public class RouteServer extends Thread TreeMap threadMap = new TreeMap(); ServerSocket serverSocket = args.length > 5 ? new ServerSocket(Integer.parseInt(args[3]),50,InetAddress.getByName(args[5])) : new ServerSocket(Integer.parseInt(args[3])); + + // stacksample for performance profiling + // ( caution: start stacksampler only after successfully creating the server socket + // because that thread prevents the process from terminating, so the start-attempt + // by the watchdog cron would create zombies ) + File stackLog = new File( "stacks.txt" ); + if ( stackLog.exists() ) + { + StackSampler stackSampler = new StackSampler( stackLog, 1000 ); + stackSampler.start(); + System.out.println( "*** sampling stacks into stacks.txt *** "); + } + long last_ts = 0; for (;;) { diff --git a/brouter-util/src/main/java/btools/util/StackSampler.java b/brouter-util/src/main/java/btools/util/StackSampler.java index 1c0f0b6..86e0f2e 100644 --- a/brouter-util/src/main/java/btools/util/StackSampler.java +++ b/brouter-util/src/main/java/btools/util/StackSampler.java @@ -117,7 +117,7 @@ public class StackSampler extends Thread { positiveMatch = true; } - if ( s.indexOf( "Thread.sleep" ) >= 0 ) + if ( s.indexOf( "Thread.sleep" ) >= 0 || s.indexOf( "PlainSocketImpl.socketAccept" ) >= 0 ) { return false; }