Re: Performance - Java Profiler, JVM instrmentation

2014-04-16 Thread Frederik Nosi

Hi Shanti,
On 04/15/2014 09:56 PM, Shanti Suresh wrote:
[...]

I find Chris' example on writing filters to map to URL patterns for
response-time metrics relevant.  I would also like stall counts,
concurrent invocations etc.

What is a stall-count? How would you record concurrent invocations,
etc.?


So here is my understanding of these metrics:

So if a request for a servlet or JSP exceeds a given time interval, that
would be a stall.  The interval may depend upon the application.  In some
cases, 10 seconds would be considered a stall, some cases, 30 seconds would
be a stall.


This can be done enabling the access log and adding a %D on the log 
format string, here's

what i add to server.xml in tomcat 6:

!-- --
Valve className=org.apache.catalina.valves.AccessLogValve 
directory=logs

   prefix=access. suffix=.log resolveHosts=false
   pattern='%h %u %t %r %s %b %I %D'
   buffered=false /


then you get another log file, in this case access.DATE.log where the 
last entry is the time in milliseconds

it took to complete the request.

Than just do a:

cat access.DATE.log | awk '{ if ($NF  DURATION) { print $0 } }'

Hope you got the idea





Similarly, how many times a servlet is invoked in a given time period would
count as concurrent invocations.  Intervals used for the reckoning here may
be shorter - like 5 seconds - to make it more meaningful for concurrency
values.


You can use the access log for this too

[..]


Frederik

-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org



Performance - Java Profiler, JVM instrmentation

2014-04-15 Thread Shanti Suresh
Greetings,

Chris' presentation on monitoring Tomcat is really nice work.  I found that
quite useful.

Taking it one step further, could I request some recommendations on how we
might profile Java code running inside Tomcat?  Often, I am stuck with
finding out why an application is slow.  It could be a consistent,
progressive  or a sudden problem.  These applications do not expose metrics
via MBeans.  Say, for e.g., a vendor application which has been heavily
customized in-house.

Some metrics that I find useful during these times are things like
concurrent invocations, stall counts on components, call-stack,
response-rate etc.
Java Melody has a nice built-in dashboard of metrics.  Co-relating metrics
like that is powerful and helps isolate relatively easy problems.  I find
that the metrics skim the surface of more involved problems.

In Tomcat, is there a way to go deeper into the performance of the code for
root-cause analysis and isolate a section of the code or a flow in the code
for troubleshooting?  How would one go about getting to that place?  Let's
say, there is no budget for purchasing tools in that space.  I find Chris'
example on writing filters to map to URL patterns for response-time metrics
relevant.  I would also like stall counts, concurrent invocations etc.

Greatly appreciate your thoughts and opinions.

Thanks,

 -Shanti


Re: Performance - Java Profiler, JVM instrmentation

2014-04-15 Thread Christopher Schultz
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA256

Shanti,

On 4/15/14, 10:51 AM, Shanti Suresh wrote:
 Taking it one step further, could I request some recommendations on
 how we might profile Java code running inside Tomcat?  Often, I am
 stuck with finding out why an application is slow.  It could be a
 consistent, progressive  or a sudden problem.  These applications
 do not expose metrics via MBeans.  Say, for e.g., a vendor
 application which has been heavily customized in-house.

You need to use a Profiler for that. There are a number of fine
Profilers available for Java. I use YourKit because they give free
licenses to ASF committers.

 In Tomcat, is there a way to go deeper into the performance of the
 code for root-cause analysis and isolate a section of the code or a
 flow in the code for troubleshooting? How would one go about
 getting to that place?  Let's say, there is no budget for
 purchasing tools in that space.

Tomcat provides no such tools. You can use jconsole for a bit of
profiling, but I've never used it heavily.

Honestly, if there is no budget for such tools, then there is no
budget for improving the performance of your application. You'll have
to convince someone with a higher level of clearance that customer
needs are worth spending money.

 I find Chris' example on writing filters to map to URL patterns for
 response-time metrics relevant.  I would also like stall counts,
 concurrent invocations etc.

What is a stall-count? How would you record concurrent invocations,
etc.?

- -chris
-BEGIN PGP SIGNATURE-
Version: GnuPG v1
Comment: GPGTools - http://gpgtools.org
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQIcBAEBCAAGBQJTTXM7AAoJEBzwKT+lPKRY/g8P/3hdbqYf5I2s0LaxiHexJ27I
tTouN/Gk0+kmOapdoPUxXECC8q/LF51I7aCF5L2D/XY5Jgu5Vx5grwvoZWVdAS5N
OB54gLvOq1toVSGTI7C7POqg8S7gqdj1Ec5BCrxiI0HGmSWNYcDQoFNWXL+srE6L
xes6o1Kfhlvs/cjmhWagooaGvaNY1Wu7DyhJowaTmWzDecvEmIS+A3ysuSoB+g4B
Myc61ZR4Imul6+0iRm59dWjE5ID9cqK9jr5NzFUIcy2zJaCIkNV1SKnliWkZBgp/
b/B7pUWfTnjUiX4lEDjH9WYL6cXO/fkwL70yue1iki/u+MqOJn7c+Qyo2VzRtn1W
iYHpm5BKngNER8r/4AhzV7ZvqGlmqOoLHqmh88Seiq8AAcloLdDkXWhR/GQzHkuk
+ESCRv5qUmmDwOdk1wcuMjGOk10+tN5zc2ZfrJlchYxVKvPaxHFcFVSczlcb+Bok
heetKDK2PZlYlzQ0iACwBHLzmaU/Jycmv3+zVOucBmyeZZBUX6GpAjG2lsh0QPlG
DhIPj1PHuC6OYsIGbVeLFirFRo/hS+XwACaY/qBVyyGd9k6NRjtpQ9RMQvb2dUGu
CPh52SBzgyOGGu9dZ1EaYSC7Vl21DySDmWr8eUMxIjEYinr0rc5Mv1VqOQEWaWy9
rixRAxhweuazzCqGnat7
=0i+1
-END PGP SIGNATURE-

-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org



Re: Performance - Java Profiler, JVM instrmentation

2014-04-15 Thread Leon Rosenberg
On Tue, Apr 15, 2014 at 4:51 PM, Shanti Suresh sha...@umich.edu wrote:

 Greetings,


Hello Shanti,



 Chris' presentation on monitoring Tomcat is really nice work.  I found that
 quite useful.

 Taking it one step further, could I request some recommendations on how we
 might profile Java code running inside Tomcat?  Often, I am stuck with
 finding out why an application is slow.  It could be a consistent,
 progressive  or a sudden problem.  These applications do not expose metrics
 via MBeans.  Say, for e.g., a vendor application which has been heavily
 customized in-house.

 Some metrics that I find useful during these times are things like
 concurrent invocations, stall counts on components, call-stack,
 response-rate etc.
 Java Melody has a nice built-in dashboard of metrics.  Co-relating metrics
 like that is powerful and helps isolate relatively easy problems.  I find
 that the metrics skim the surface of more involved problems.

 In Tomcat, is there a way to go deeper into the performance of the code for
 root-cause analysis and isolate a section of the code or a flow in the code
 for troubleshooting?  How would one go about getting to that place?  Let's
 say, there is no budget for purchasing tools in that space.  I find Chris'
 example on writing filters to map to URL patterns for response-time metrics
 relevant.  I would also like stall counts, concurrent invocations etc.


There are tools that are doing exactly that for about 7 years out now.
You can go to http://newrelic.com and get it for as much as 150 USD per
server.
Or you can get all the same for free from http://www.moskito.org. And more.

regards
Leon




 Greatly appreciate your thoughts and opinions.

 Thanks,

  -Shanti



Re: Performance - Java Profiler, JVM instrmentation

2014-04-15 Thread Leon Rosenberg
On Tue, Apr 15, 2014 at 7:58 PM, Christopher Schultz 
ch...@christopherschultz.net wrote:

 -BEGIN PGP SIGNED MESSAGE-
 Hash: SHA256

 Shanti,

 On 4/15/14, 10:51 AM, Shanti Suresh wrote:
  Taking it one step further, could I request some recommendations on
  how we might profile Java code running inside Tomcat?  Often, I am
  stuck with finding out why an application is slow.  It could be a
  consistent, progressive  or a sudden problem.  These applications
  do not expose metrics via MBeans.  Say, for e.g., a vendor
  application which has been heavily customized in-house.

 You need to use a Profiler for that. There are a number of fine
 Profilers available for Java. I use YourKit because they give free
 licenses to ASF committers.

 Hello Chris, et al,

last time I tried to use a profile on a production site it killed it within
a second. Usually the performance overhead of a profiler is so huge, that
you have no chance to run it in production.
And real problems do not occur in test labs ;-)

Leon


Re: Performance - Java Profiler, JVM instrmentation

2014-04-15 Thread Shanti Suresh
Hi Chris,


On Tue, Apr 15, 2014 at 1:58 PM, Christopher Schultz 
ch...@christopherschultz.net wrote:

 -BEGIN PGP SIGNED MESSAGE-
 Hash: SHA256

 You need to use a Profiler for that. There are a number of fine
 Profilers available for Java. I use YourKit because they give free
 licenses to ASF committers.


I'll look into a Java Profiler.




 Tomcat provides no such tools. You can use jconsole for a bit of
 profiling, but I've never used it heavily.


I see.



 Honestly, if there is no budget for such tools, then there is no
 budget for improving the performance of your application. You'll have
 to convince someone with a higher level of clearance that customer
 needs are worth spending money.


I am trying.



  I find Chris' example on writing filters to map to URL patterns for
  response-time metrics relevant.  I would also like stall counts,
  concurrent invocations etc.

 What is a stall-count? How would you record concurrent invocations,
 etc.?


So here is my understanding of these metrics:

So if a request for a servlet or JSP exceeds a given time interval, that
would be a stall.  The interval may depend upon the application.  In some
cases, 10 seconds would be considered a stall, some cases, 30 seconds would
be a stall.

Similarly, how many times a servlet is invoked in a given time period would
count as concurrent invocations.  Intervals used for the reckoning here may
be shorter - like 5 seconds - to make it more meaningful for concurrency
values.

Hi Leon,


On Tue, Apr 15, 2014 at 3:45 PM, Leon Rosenberg rosenberg.l...@gmail.comwrote:



 last time I tried to use a profile on a production site it killed it within
 a second. Usually the performance overhead of a profiler is so huge, that
 you have no chance to run it in production.
 And real problems do not occur in test labs ;-)

 Leon


I need to revisit New Relic.  Many setups use these tools against QA and
don't pass new code until load tests exercising the new code do not trip
any thresholds.  Which is a good workflow, although testing is controlled.
I've only used them against production.

Thanks,

 -Shanti


Re: Performance - Java Profiler, JVM instrmentation

2014-04-15 Thread Christopher Schultz
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA256

Leon,

On 4/15/14, 3:45 PM, Leon Rosenberg wrote:
 On Tue, Apr 15, 2014 at 7:58 PM, Christopher Schultz  
 ch...@christopherschultz.net wrote:
 
 -BEGIN PGP SIGNED MESSAGE- Hash: SHA256
 
 Shanti,
 
 On 4/15/14, 10:51 AM, Shanti Suresh wrote:
 Taking it one step further, could I request some
 recommendations on how we might profile Java code running
 inside Tomcat?  Often, I am stuck with finding out why an
 application is slow.  It could be a consistent, progressive  or
 a sudden problem.  These applications do not expose metrics via
 MBeans.  Say, for e.g., a vendor application which has been
 heavily customized in-house.
 
 You need to use a Profiler for that. There are a number of fine 
 Profilers available for Java. I use YourKit because they give
 free licenses to ASF committers.
 
 Hello Chris, et al,
 
 last time I tried to use a profile on a production site it killed
 it within a second.

+1

Profiling in production is a terrible idea.

 Usually the performance overhead of a profiler is so huge, that you
  have no chance to run it in production. And real problems do not 
 occur in test labs ;-)

Performance problems can usually be reproduced in labs.

- -chris
-BEGIN PGP SIGNATURE-
Version: GnuPG v1
Comment: GPGTools - http://gpgtools.org
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQIcBAEBCAAGBQJTTY8pAAoJEBzwKT+lPKRYezUQALIQ8Vy124z/ZZZum3IqpEhy
F5nk5rdDZLBtQF7wT8WH68fo254MNSvCPqfOLKfwDKGuMEl+RTxFg58k96Ii7e+S
xC6wQwInJefdEtB1jz2E4hic8artLpAfjDPlXCT8DRHdLEWUF3qQ43H994/I3Ybs
go41WFtP2+8aZaZnGQI664TGaERlrOJRu3AfMjU2VErG3kCJeeR/BFXhj7tZu/1Y
8cXt2CouFmKFYl5KNisI/3gfJ8X3hEGowZkGyswzSh+DkWIgxQMM7grnntHoxFtP
iHlzQPdOB+gXmt2e2SISDc7HZNITRiBRvas8Q/+/xMiNJTbrRuKdRST6YKp3+AIt
KuobyjJixJ0GuwjqW7P5/v+rP/PgF+eAT79FKtvKELUuRophh6e1ifO7osNkAkyp
qCi+HoiThS9DfjJHdQnK9+uGMxRCirTvVIoNqHrJP4WJkxFeVRJQN1OKWaw+n/Xn
SPAehFUZiUgS07NaR79lPvkHl8kXOAvrEEREwW6copv5c4BTQ/WlNYPG+2oRWmeZ
YqTBS4bbZclV69Pg6cSSbfZGF/kmYq5zBKDOGIUHPF2zX4IoPmraU8IOLElIiS7o
0a5P64SLAsvOs4KnRJ4nFZSN80MwV6rODI2376+LlcdLjlQCmxoRiyNJMTOEqMUy
dDn0cVrr7PzF0fpWoQN9
=F8p+
-END PGP SIGNATURE-

-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org



Re: Performance - Java Profiler, JVM instrmentation

2014-04-15 Thread Christopher Schultz
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA256

Shanti,

On 4/15/14, 3:56 PM, Shanti Suresh wrote:
 So here is my understanding of these metrics:
 
 So if a request for a servlet or JSP exceeds a given time interval,
 that would be a stall.  The interval may depend upon the
 application.  In some cases, 10 seconds would be considered a
 stall, some cases, 30 seconds would be a stall.

Can you afford to wait for the request to complete (late), or do you
need to know immediately when a request is taking too long?

In either case, this type of thing can be done easily with a filter.
Whether you use JMX or not to report the condition is up to you.

 Similarly, how many times a servlet is invoked in a given time
 period would count as concurrent invocations.  Intervals used for
 the reckoning here may be shorter - like 5 seconds - to make it
 more meaningful for concurrency values.

Again, Filters are your friends. Feel free to publish the information
via JMX as well. My presentation contains all the information you need
for the JMX stuff. Everything else is pure Java.

- -chris
-BEGIN PGP SIGNATURE-
Version: GnuPG v1
Comment: GPGTools - http://gpgtools.org
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQIcBAEBCAAGBQJTTY+rAAoJEBzwKT+lPKRYApcP/ROvCHanDW2RgYEneUPoG2u9
g/u2IKq8Noe8RmeQpVuU+k5i3tUo4hEigYsnmBiYHVq+CxY31hkMiPtuwMgHIrPd
rHGfCy3Mgpsc3yLI2yuvYqCSs3pqR3+PYO1CiaxmgT52W8JWGoQjOOOdlk0BmseZ
kF/vVtkT3qsM+c5YvghsqCnq9dyZK8YQXfzEigFdmLDzA42jAJ9gPhmoU4ZtfIXZ
MKsn2xKgsz4XWaLsgLL2U/JX9Q77Sn/vXCcWktvP6wPZJDGFwf2jKKTuOF182NcT
fevPjIysxi/R+zDUh+Dw7NkKty6HMx0x8DZHhKsy61YeK5fU+PgY8eyinGz5uTa2
+p2IgX2fUG5MiGe5oSO4g2oqLwNCqFsRbsvY5N3N4SnxuXaeQIsaIQKqYzgxBQyE
d6BkPCGsObnpS59pqiQ2rF1cYNyu4z6pILGfS6ctZn43SSJ60HmhBZvE/qRtsezQ
ycC2Wu8YzF8kJwCJyJJyPpg59m+hhlWYQ/Uk1BgTEhYpAYoAeOgrog+gdFXYt1RZ
buI/t5vX6i38RjSe/L1zgDpx/x1x5kn4H/zhUfKM//4HaInfN2KG4cVejAhGtr5X
kunZCIwh6rVlDIV167aIL6qDXinCpIIWJN2FhKO7khtCQrrbIIp7NYwWG0XfHYTn
X4Fq69OJZRfKf7lDcSHv
=uclh
-END PGP SIGNATURE-

-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org



Re: Performance - Java Profiler, JVM instrmentation

2014-04-15 Thread Shanti Suresh
On Tue, Apr 15, 2014 at 3:59 PM, Christopher Schultz 
ch...@christopherschultz.net wrote:



 Can you afford to wait for the request to complete (late), or do you
 need to know immediately when a request is taking too long?


My reasoning for measuring the long-running requests at a given period of
time is so that you can co-relate it to other metrics at that given time.
In my homegrown dashboard, I would graph the values returned alongside CPU,
thread-use, Heap-size, connection-pool size etc.  And then try to locate a
signature of the problem.  So just requests that have been inflight for the
last n seconds at a given period of time would help.  Or again, late
requests, like you mention might work too.  So at a given time, which
requests completed late.

Some of the tools out there have this troubleshooting down to a science and
it makes life so easy for all parties!


 In either case, this type of thing can be done easily with a filter.
 Whether you use JMX or not to report the condition is up to you.

  Similarly, how many times a servlet is invoked in a given time
  period would count as concurrent invocations.  Intervals used for
  the reckoning here may be shorter - like 5 seconds - to make it
  more meaningful for concurrency values.

 Again, Filters are your friends. Feel free to publish the information
 via JMX as well. My presentation contains all the information you need
 for the JMX stuff. Everything else is pure Java.


 Yes, I plan to explore that more.

Thanks again,

  -Shanti