This review is for AppDynamics Lite.
I had an interesting beginning discussion with AppDynamics. They are a competitor to Dynatrace, Quest Foglight and CA Introscope in the area of J2EE application visibility. They have a product called AppDynamics in both a freeware Lite Version and Enterprise Professional Edition that dig into the JVM and provide analysis and measurements of run-time performance.
The product is agent based. It’s a simple configuration in which you can modify the Tanuki Wrapper (wrapper.conf) to add a small set of parameters for start-up. It includes a web-based console interface which you can evaluate how much time is being spent where in the byte code. It’s pretty standard fair in terms of showing call trees and SQL statements. What I like is that it provides a quick and narrow window to HotSpots in the code so you don’t have to muck around with the interface. It also provides you the control to do deeper profiling (sampling) like Foglight does so that you can get a complete profile (with overhead of course). You can define User Experience thresholds (which they all provide as well), but it’s right there in plain site.
Beware that the freeware version is limited to 30 “Business Transactions” which are identical to starting points of a PurePath. It’s not just Servlet requests. I saw JSP and JS references as well. You can prune them down to account for your 30. You can also rename them. For example, the request (/webapps/blackboard/execute/courseMain) could be renamed Course Home Page. This way you could target your 30 most important pages and limit your profiling to just these 30. Of course this is only a per JVM basis. The enterprise version connects all of the JVMs together so that all tiers and and Continuous monitoring can take place.
There are other features in the Enterprise version which I haven’t been able to evaluate just yet. I will get an Enterprise license shortly. This includes the following features:
Distributed/SOA related bottlenecks
Deadlocks
Payload/Input Data related errors
Memory / GC Behavior Monitoring
Memory Leak Detection
Memory Content Analysis & Accessor Tracking
Object Instance Tracking & Thrash Detection
24/7 Monitoring of Custom Caches
Correlated Event Data (Payload, User Data, Hardware)
Alerts & Notifications
Incident Queue
Incident Workbench
Other workflow related features
How to Set-It Up
First thing you need to do is download the freeware version. Send the zip file to your server that you plan to instrument. Unzip the packages (both the viewer and the agent are in one package). Then you will need to unzip both packages. I took the simple route and set up the agent under (/usr/local/appdynamics) and the viewer under the (/usr/local/appdynamics/viewer) directories.
Modify the Wrapper.Conf
It’s easiest to modify the Tanuki wrapper by adding the following parameters. Make sure to add the host IP for the viewer. In my case, I used the same server which I instrumented, but you do not have to.
wrapper.java.additional.25=-javaagent:/usr/local/appdynamics/javaagent.jar
wrapper.java.additional.26=-Dappdynamics.viewer.host=10.103.66.148
wrapper.java.additional.27=-Dappdynamics.agent.logs.dir=/usr/local/appdynamics/logs
Modify the Catalina.Policy
You will get a Security exception if you don’t add the following into the Catalina.Policy. It took me a solid 20 minutes to figure this one out. Luckily I’ve seen this with Foglight and Dynatrace in the past, so it was easy to overcome.
// AppDynamics Grant
grant codeBase "file:/usr/local/appdynamics/-" {
permission java.awt.AWTPermission "accessClipboard";
permission java.awt.AWTPermission "accessEventQueue";
permission java.awt.AWTPermission "showWindowWithoutWarningBanner";
permission java.lang.RuntimePermission "exitVM";
permission java.lang.RuntimePermission "loadLibrary";
permission java.lang.RuntimePermission "queuePrintJob";
permission java.net.SocketPermission "*", "connect";
permission java.net.SocketPermission "localhost:1024-", "accept,listen";
permission java.security.AllPermission;
permission java.io.FilePermission "*", "read,write,execute";
permission java.util.PropertyPermission "*", "read";
permission java.lang.RuntimePermission "getenv.*";
};
What I remember is this free license can be used only for "one instance" for storing few minutes of recent data and not for deploying across your environment. Each user gets only "one license", which is not practical. Once you get to enterprise version, its the same cost as Dynatrace, Introscope and Foglight. Did they recently change the policy?