Memory leaks and deadlocks and CPU hogs! Java application developers often face these runtime problems. They can be particularly daunting in a complex application with multiple threads running through hundreds of thousands of lines of code -- an application you can't ship because it grows in memory, becomes inactive, or gobbles up more CPU cycles than it should. Here are some tools that can help you finding out your application performance. You can monitor thread usages, memory leaks, instance count etc; also in case of web application you can find out the number of sessions, number of request per second, average response time, database connection time, error count etc. 1 JProfiler: JProfiler is an award-winning all-in-one Java profiler. JProfiler's intuitive GUI helps you find performance bottlenecks, pin down memory leaks and resolve threading issues. You can use it to monitor a standalone java application or a web application. http://www.ej-technologies.com/products/jprofiler/overview.html Features: · Live profiling of a local session · Live profiling of a remote session · Offline profiling · Snapshot comparisons · Memory profiling · Heap walker · CPU profiling · Thread profiling
2. ManageEngine® Applications Manager 8 http://manageengine.adventnet.com/products/applications_manager/applications-monitoring-features.html Applications Manager provides in depth monitoring of web applications, be it a CRM application, banking / finance application or any business critical application. Applications Manager can also help monitor the underlying infrastructure which may consist of application servers, databases, systems, mail servers and other Java/J2EE Applications. Through the application monitoring feature you can ensure the health and availability of your application servers through Microsoft .NET Monitoring, Oracle Application Server Monitoring, JBoss Monitoring, Tomcat Monitoring, WebLogic Monitoring, and WebSphere Monitoring. Out-of-the-box support for databases through Oracle Monitoring, SQL Server Monitoring, MySQL Monitoring, DB2 Monitoring is also present. Applications Manager helps ensure higher uptime by detecting and diagnosing problems of application servers and their services faster 3. JMeter http://jakarta.apache.org/jmeter/ Apache JMeter is a 100% pure Java desktop application designed to load test functional behavior and measure performance. It was originally designed for testing Web Applications but has since expanded to other test functions. Apache JMeter may be used to test performance both on static and dynamic resources (files, Servlets, Perl scripts, Java Objects, Data Bases and Queries, FTP Servers and more). It can be used to simulate a heavy load on a server, network or object to test its strength or to analyze overall performance under different load types. You can use it to make a graphical analysis of performance or to test your server/script/object behavior under heavy concurrent load Apache JMeter features include: · Can load and performance test HTTP and FTP servers as well as arbitrary database queries (via JDBC) · Complete portability and 100% Java purity . · Full Swing and lightweight component support (precompiled JAR uses packages javax.swing.* ). · Full multithreading framework allows concurrent sampling by many threads and simultaneous sampling of different functions by seperate thread groups. · Careful GUI design allows faster operation and more precise timings. · Caching and offline analysis/replaying of test results. · Highly Extensible: o Pluggable Samplers allow unlimited testing capabilities. o Several load statistics may be choosen with pluggable timers . o Data analysis and visualization plugins allow great extendibility as well as personalization. o Functions can be used to provide dynamic input to a test or provide data manipulation. o Scriptable Samplers (BeanShell is fully supported; and there is a sampler which supports BSF-compatible languages) 4 Lambda Probe (formerly known as Tomcat Probe) http://www.lambdaprobe.org/d/index.htm Lambda Probe (formerly Tomcat Probe) is a self sufficient web application, which helps to visualize various parameters of Apache Tomcat instance in real time. Lambda Probe is designed to work specifically with Tomcat so it is able to access far more information that is normally available to JMX agents. JVM memory usage monitor JBoss compatibility Display of deployed applications, their status, session count, session object count, context object count, datasource usage etc Ability to view deployed JSP files Display of list of sessions for a particular application Graphical display of datasource details including maximum number of connections, number of busy connections and configuration details Display of system information including System.properties, memory usage bar and OS details Ability to show information about log files and download selected files Ability to tail log files in real time from a browser. Ability to interrupt execution of "hang" requests without server restart Support for DBCP, C3P0 and Oracle datasources Support for Tomcat 5.0.x and 5.5.x Support for Java 1.4 and Java 1.5 And here are some more that you can explore Tools for tracking down memory leaks. XPCOM Memory Leak tools (this document also has information on Mozilla's other memory leak tools). See also a tutorial on using these tools and the refcount balancer. Rational Purify®. (Commercial) GlowCode. (Commercial) ElectricFence. "Electric Fence ... uses the virtual memory hardware of your system to detect when software overruns the boundaries of a malloc() buffer. It will also detect any accesses of memory that has been released by free(). Because it uses the VM hardware for detection, Electric Fence stops your program on the first instruction that causes a bounds violation." Specifically, it works by placing each heap allocation on its own VM page. Since the dynamic footprint of the browser is pretty large, this may make it tough to use "in real life". Leaky. This is a home-grown tool that Kipp put together: "Its a tool called leaky. What it does it help you track down memory leaks and some kinds of memory corruption. It also has entry pointers for logging addref/release calls. The key thing that leaky does is this: it logs all calls to malloc/free/realloc/new/delete into a log file. The logging data includes information about size and address, as well as the *call stack of the operation*. The leaky program then can translate the call stack data from addresses into symbols and then dump the data out." * refcount balancer. This is another home-grown tool that does finer-grained instrumentation and allows you to focus on specific objects rather than entire runs. Insure++®. (Commercial) Evaluation copy is free. Linux version. LeakTracer. ccmalloc. debauch Dead? memwatch. Geodesic Systems' GreatCircle Dead? Scott Furman has done some preliminary work to get this product working with Mozilla. Julian Seward writes of Valgrind, an open-source memory debugger and profiler for Linux/x86: `Snapshots 20020511 and later of the tool are able to run Mozilla correctly on both Red Hat 6.2 and 7.2. It will also do detailed low-level I1/D1/L2 cache profiling, so you can see which bits of Mozilla create cache misses. You'll need the patch from bug 124335 if working with versions prior to 1.0RC2. Profiling The following tools are used to measure product performance. Rational PurifyPlus. (Commercial) Used to be called Rational Quantify. qfy2html.pl. A Perl script for munging Quantify 6.0 output into hyperlinked HTML to share with your friends. Run Quantify, save your results as text, and then let this thing rip. Quantifying Mozilla on Solaris. Instructions on how to make Quantify play nicely with Mozilla on Solaris. For performance work on Mac, you can use either the Metrowerks Profiler (on subsets of the codebase), or Apple's Instrumentation SDK. For details, see the page on Mac performance. hiprof. A hierarchical instruction profiler for Digital Unix. There is an online tutorial, courtesy Jim Nance ([EMAIL PROTECTED]): "I like it because it does not require you to recompile the program, because it give accurate times for callers, and because it comes with DU so that everyone developing there should already have it." * jprof. Sampling profiling tool by Jim Nance that runs on RedHat 6.1, 6.2. MOZ_TIMELINE Timing instrumentation. Extremely useful for app startup measurements. eazel profilers. Two profiling tools from Eazel/gnome.org, runs on Linux. JS Runtime Profiler. Profile JavaScript usage, dumps output to a file. Sysinternals utilities. Win9x/Me/NT/2K utilites for monitoring system usage. CPU/Mon, Diskmon, Filemon, Regmon, etc. gprof. Part of the GNU Binutils. Back in May 1999 there were rumors that gprof had trouble with dynamically linked and loaded objects (like Mozilla). Currently (March 2006) gprof is still being developed, so hopefully that's no longer true (assuming it ever was). The link to the gprof manual above is years out of date but, at the time of writing, it's the latest version of the manual on gnu.org. To get an up to date version of the manual, get the gprof source and run |. configure; make html| in the gprof source directory. ----- Original Message ---- From: David Cassidy <[EMAIL PROTECTED]> To: Tomcat Users List <users@tomcat.apache.org> Sent: Friday, March 14, 2008 7:13:17 PM Subject: Re: Database connections grow after redeploy try netbeans its free and the profiler will watch all your objects being created. it will also work with snapshots... On Thu, 2008-03-13 at 20:56 +0200, Juha Laiho wrote: > Scott McClanahan wrote: > > > On Thu, 2008-03-13 at 12:02 -0400, Christopher Schultz wrote: > > > Caldarale, Charles R wrote: > > |> From: Scott McClanahan [mailto:[EMAIL PROTECTED] > > |> Subject: Re: Database connections grow after redeploy > > > | As far as the continuing data base connections, I can only speculate > > | that the prior instances of the webapp are still active, thereby > > | preventing cleanup of their resources. > > > > I agree.. Scott: are you able to run your application through a tool that > > > allows you to observe the heap and object graphs? > > > > More likely is that one or more application-level objects has retained a > > > reference to a specific Connection object, which, of course, retains > > > references back to the connection pool that created it. I would check > > > any ServletContextListener classes you have, and then a generic search > > > for putting things into the ServletContext, since that is one of the > > > only places that applications typically store long-lived objects. > > > Do you have any suggestions for a profiling tool like you described? > > Preferably open source. Thanks. > > Don't know about open source products, but I can vouch for YourKit Java > Profiler. As far as I know, the main difference between YourKit and other > profilers is that YourKit allows you to work through snapshots, whereas > other profilers inject their probes into Java object creation methods. > This means that more or less the only moment when YourKit has an effect > on the performance of your application is when you take a memory snapshot. > The other profilers I've seen attempt to trace each object allocation and > deallocation in real time, which can be rather CPU consuming (especially > if you're tracing a problem you cannot replicate in test environments). > With YourKit, you take snapshots of the Java VM memory of your application, > and compare them "off-line" (i.e. without needing any connection to the > live application). --------------------------------------------------------------------- To start a new topic, e-mail: users@tomcat.apache.org To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] ____________________________________________________________________________________ Never miss a thing. Make Yahoo your home page. http://www.yahoo.com/r/hs