All Topics

Learn Splunk

All Topics

Question Has anyone successfully instrumented a JBoss Fuse environment? Answer Review this blog for the steps someone used for instrumenting JBoss Fuse 6.0.0:  http://peter-on-java.blogs... See more...
Question Has anyone successfully instrumented a JBoss Fuse environment? Answer Review this blog for the steps someone used for instrumenting JBoss Fuse 6.0.0:  http://peter-on-java.blogspot. com/2013/06/setup-appdynamics- for-fuse-esb-in-5.html
This topic provides a firewall-based method to block external access to the Controller MySQL Database by dropping all traffic trying to connect to port 3388. Environment and components Linux suc... See more...
This topic provides a firewall-based method to block external access to the Controller MySQL Database by dropping all traffic trying to connect to port 3388. Environment and components Linux such as RHEL, Centos, systems using iptables if your system uses iptables, you can do this. If not, contact your sysadmin for an alternative. Solution As root, these commands: iptables -A INPUT -s 127.0.0.1 -p tcp --dport 3388 -j ACCEPT iptables -A INPUT -p tcp --dport 3388 -j DROP service iptables save These commands do the following: 1. Create a firewall rule allowing port 3388 to be accessed from localhost (127.0.0.1). 2. Create a firewall rule blocking all access to port 3388. 3. Save the firewall rules so they are automatically applied at boot time.
Updated on 7/30/18 Question We see CLR crashes happening a few times a day. How can I use AppDynamics to determine the root cause of the crashes? Answer One issue usually causes multiple ... See more...
Updated on 7/30/18 Question We see CLR crashes happening a few times a day. How can I use AppDynamics to determine the root cause of the crashes? Answer One issue usually causes multiple CLR crashes. Here are some places to look to help you find the root cause: 1. When a CLR crashes, the .NET Machine Agent raises an event in the Controller. Start by looking at the details captured in the CLR crash event by clicking on the Server Crashes link in the Application Dashboard. You will see information about the crash event, like the process ID and windows event log id. Double-click on the CLR Crash Type to view additional information that can help you troubleshoot the root cause of the crash. For additional instructions on reviewing the crash event, see: Analyze and Respond to CLR Crashes   2. Look at any errors/exceptions happening around the same time as the crash that could be related to it. Transaction Analysis is a great place to get a combined view (see below). If the crash occurred before we could report the captured exception, you may not see anything there. 3. Look at Machine snapshots from that time on the machine where the crash occurred. This will rule out any physical resource pressures.   Related Resources List of crash events the .NET machine agent monitors Monitor CLRs
This topic describes how transaction correlation works in the Java environment. In principle, it works largely the same for .NET and the other language agents. Transaction correlation enables AppD... See more...
This topic describes how transaction correlation works in the Java environment. In principle, it works largely the same for .NET and the other language agents. Transaction correlation enables AppDynamics to do distributed transaction tracing in modern web applications. Transaction correlation provides the ability to draw the application flow map and depict the flow of business transactions across multiple tiers and to external services. Transaction correlation maintains the business transaction context across all tiers and threads as the requests are processed. Whatever the transaction does across all these tiers is counted as an activity for that business transaction. Table of Contents Transaction Correlation terminology AppD Maintains the Transaction Context Typical Cross-JVM calls and Correlation Medium Correlation for HTTP Correlation for JMS Correlation Header Custom Correlation Cross Application and Federated Cross-Application Flow Transaction Correlation terminology Business Transaction (BT) is fundamentally distributed Originating tier/segment Tier 1 in the diagram is where the first significant entry point is discovered, named, and instrumented. This is called the originating tier. Continuing tier/segment (or downstream tier) Every other thread spawned either in the same JVM or externally is considered a continuing segment or continuing tier.  In the diagram, tiers 2, 3, and 4, and the JMS /Messaging Bus are continuing/downstream segments. Metrics are reported to the Controller for each segment. AppD Maintains the Transaction Context For Remote Calls (JVM->JVM and CLR->CLR) AppDynamics agents decorate the protocol headers to add transaction contextual information. For Async threads (intra-JVM and intra-CLR) AppDynamics agents save transaction context against thread hand-offs to be picked up when the async segment starts.   When done the right way, this does not change application behavior. AppDynamics agents only add where there is extensibility, such as found in HTTP headers and JMS properties. Every "transaction segment" reports its own metrics.  Typical Cross-JVM Calls and Correlation Medium This diagram shows how the context is maintained across tiers for various mediums. Typical cross-JVM calls Correlation for HTTP We add a header for HTTP calls because, by definition, the headers are extensible. The name of AppDynamics' header for propagating correlation information is " singularityheader ". Adding custom headers to carry transaction information is safe when: you don't use any well-understood header names like "Accept-Language" the contents of the header value is "HTTP-safe" This diagram illustrates the generic structure of an HTTP request. When a client tier makes an HTTP call, the AppDynamics byte code interceptor adds a safe header that uniquely identifies this transaction. The AppDynamics byte code interceptor on the receiving Servlet (for example), reads the header and carries forward the transaction context. The Controller reconstructs the flow based on the information received from each node in the flow. HTTP Request Correlation for JMS We add a message property for JMS calls because by definition, the message properties are extensible. Adding custom message properties to carry transaction information is safe when: you don't overwrite any existing properties you choose a unique property name the value of the property is valid content This diagram illustrates the generic structure of a JMS call. JMS call Correlation Header  The following diagram shows the contents of the AppDynamics correlation header. Correlation header contents appId=5*ctrlguid=1520068834*acctguid=1f125f4c-d69d-4bbb-a66b- bb896f3515d0*nodeid=849*ts=1524772123010*btid=2218*snapenable=true*guid=6ba9c1f8-ab55-4c00-9193- 95fbcd1b6ddd*exitguid=9|1*unresolvedexitid=144*tcop=1:611*cidfrom=57*etypeorder=HTTP*esubtype=HTTP*cidto=66 Custom Correlation If the underlying framework/API is not supported by out-of-the-box correlation by AppDynamics, then there is a provision to come up with the custom configurations by analyzing the flow of the transaction. For more details, refer to: Custom Correlation for Java Applications Custom Correlation for .NET Applications Cross Application and Federated Cross Application Flow Cross application flows show the performance impact between business applications within a Controller account. For environments that require a larger picture of business performance, federated cross application flows allow AppDynamics to correlate business transactions across business applications in different accounts that may be on different Controllers. For details, refer to: Cross Application Flow Federated Cross Application Flow Published on <u+200e>05-06-2015. Content revised 7/30/18
Question A number of business transactions are showing up, but they have 0 calls (using data for last one year). Why they would at all show up. If a business transaction was discovered by an agent,... See more...
Question A number of business transactions are showing up, but they have 0 calls (using data for last one year). Why they would at all show up. If a business transaction was discovered by an agent, that means there was a call for that business transaction and so it should show the number of calls as non-zero. Answer - The first call for a business transaction (BT) is used to register the BT with the Controller and then subsequent calls are reported as metrics. If a BT is hit only once (or only a few times all in a closely clustered group), it will get registered with the Controller but there may not be subsequent calls or very few. Over time the average is diluted as described below. -  The Calls per minute metric is an average, so it will get diluted with time. As rollups happen 1 min --> 10 min --> 1 hr, it will get averaged and can result into < 1 calls/min in 1 hr granularity.   You can read about metric rollups here: Metric Data Display.
Question What if you see a case using EUM where you are not seeing all the expected Pages/Ajax requests?  For example, you observe that the Pages/Ajax grid only shows a few requests, even though... See more...
Question What if you see a case using EUM where you are not seeing all the expected Pages/Ajax requests?  For example, you observe that the Pages/Ajax grid only shows a few requests, even though in the Browser snapshots view you can see many more types. Answer Check that your search filters are not restricting what you see.
This may indicate that the agents are not correctly configured. Begin troubleshooting by looking at the server.log file. All log files for Controller are located in the <Controller_Installation_Direc... See more...
This may indicate that the agents are not correctly configured. Begin troubleshooting by looking at the server.log file. All log files for Controller are located in the <Controller_Installation_Directory>/logs folder. Error Message Solution Error receiving metrics (node not properly modeled yet: Could not find component for node: This error means the app agent tried to upload metric data for a specific node, but the node does not belong to any tier. Nodes must belong to tiers and these tiers must belong to a business application in order to receive metric data for that node. See AppDynamics Concepts. Received Metric Registration request for a machine that is NOT registered to any nodes. Sending back null! This error indicates that the Controller received a registration request for metrics for a Machine Agent that listed a machine ID not yet associated with any node. Configure the Machine Agent to associate with the correct application, tier, and node. See Install the Standalone Machine Agent. Agent upload blocked, as its reporting a time well into the future.  The App Agents attempt to report metric data using Controller time. The agents retrieve the time from the Controller every five minutes and report times using a skew of the local machine time, if different. If for some reason the App Agent reports metrics that are time-stamped ahead of the Controller time, the Controller rejects the metrics. To avoid this event, ensure that the system times for the machine on which the Controller is running and the machines for the app agents are in synchronization.
This article describes how policies and health rules behave depending on which entities/objects are used in the configuration. You can specify affected entities, such as nodes and tiers, in both H... See more...
This article describes how policies and health rules behave depending on which entities/objects are used in the configuration. You can specify affected entities, such as nodes and tiers, in both Health rules and policies. It is important to understand how various combinations of "affected entity" selections affect the overall policy behavior. Here are some examples to illustrate the interactions. Table of Contents Health Rule Examples  Policy Examples  Policy Matching Combination Examples  Health Rule Examples Health- Rule-1 (HR1) specifies a health rule violation (HRV) on Tier-1 when metric-1 > 0. Health-Rule-2 (HR2) specifies a HRV on all nodes in Tier-1 when metric-1 > 0. Health-Rule-3 (HR3) specifes a HRV on any node in Tier-1 when metric-1 > 0. When the policy/health rule engine detects that metric-1 is greater than 0 for one of these health rules, the resulting events are different for each combination as shown in this table: Health Rule Example Affected Entity Resulting Events when metric-1 > 0 Health Rule Node and Tier Results when engine detects metric-1 > 0 HR1 Tier-1 1 HRV event for the tier only. HR2 all nodes in Tier-1  1 HRV for each violating node in the tier. No HRV event for the tier. HR3 any node in Tier-1 A single HRV event for the tier and all violating nodes in the tier Policy Examples When you configure your alerting policies  based on the above health rules, the corresponding policies will fire alerts as follows: Policy Example Affected Object Result Policy-1 Tier policy fires the alert for HR1 Policy-2 node policy fires the alert for HR2 or HR3 This behavior is by design and provides flexibility for deciding when alerts are needed. For, example what does it mean for a tier to be unhealthy? Depending on the specific metric that is used, you can decide the tier is unhealthy even if all the nodes are healthy. Here are some examples of using different metrics with each type of health rule: HR1 Metric-1= active database connections > X (some number) You would use this configuration because you are concerned with the total number of connections for the tier not the # of connections for each node. HR2 Metric-1 = memory utilization % > 80% Here you want to know if the HRV occurs on any node because it may indicate a problem on that specific node, although the others are healthy. HR3 Metric-1 = calls per minute > X Say you are using a load balancer in round-robin fashion. If the load on one node is higher than the others, you might have a problem with the load balancer, so you would want to alert if any node has a HRV. Policy Matching Combination Examples This table specifies the result of using different combinations of event type, health rules, and objects in the Policy configuration.  Health Rule Violation Started - Critical Slow transaction 1 *any *any Policy fires when any health rule violates at the critical level or any transaction is slow for the application. In other words, any slow transaction on any tier or any health rule violation at the critical threshold causes this policy to fire. 2 Health Rule-1 Health Rule-2 *any Policy fires for a slow transaction or for a violation of Health Rule-1 or Health Rule-2 for any object across the application. This policy example fires even if the object specified in the health rule configuration is a specific tier or node or set of nodes. The "Any Object" configuration in the policy causes the policy engine to ignore the objects specified in Health Rule-1 and Health Rule-2. 3 *any Tier 1 This policy fires for any slow transaction on Tier 1 or for any Health Rule Violation Started - Critical event on tier 1 for any health rule. 4 Health Rule-1 Health Rule-2 Tier 1  This policy fires for a slow transaction or any Health Rule Violation Started - Critical event on tier 1 for Health Rule-1 or Health Rule-2. Note, if you were to configure Health Rule-1 or Health Rule-2 for any node in Tier 1 this policy would never fire.
Question How can I use AppD4DB to alert if a database instance goes down? This is not for when an OS goes down. We want to know if SQL Server crashes, for example. Answer Set up a Custom SQL A... See more...
Question How can I use AppD4DB to alert if a database instance goes down? This is not for when an OS goes down. We want to know if SQL Server crashes, for example. Answer Set up a Custom SQL Alert like this: If the SQL Connection is successful and it can run a query then it will return a 1. If it fails then you will get an email containing the exception. For example, here is the alert history: This is the contents of the default alert:
Symptoms You encounter an issue with the POST to /eumcollector/beacons. JS error is "Request header field X-TS-AJAX-Request is not allowed by Access-Control-Allow-Headers". Diagnosis Re... See more...
Symptoms You encounter an issue with the POST to /eumcollector/beacons. JS error is "Request header field X-TS-AJAX-Request is not allowed by Access-Control-Allow-Headers". Diagnosis Research revealed that Access-Control-Allow-Headers is a CORS property.   For this scenario, there were two app environments: APP1 and APP2. EUM data was being seen in APP1 but not in APP2. Verified that the adrum.js and adrum-ext.[ver].js match except for app key. Both apps were hitting the same load balancer, F5. Only APP2 has SSO enabled via WebSphere + Active Directory. Solution Turns out that this was an F5 configuration error, even though "everything's the same for both environments" with regard to F5.   Customer was running the Application Security Manager module on F5. It's supposed to be transparent, not do anything. The F5 team disabled the ASM view on APP2 because it was disabled on APP1. This fixed the CORS problem affecting the call to /eumcollector/beacons.
You can assign multiple MIDCs to the same class and method or multiple information points to the same class and method. However, you cannot assign more than one type of interceptor to the same class ... See more...
You can assign multiple MIDCs to the same class and method or multiple information points to the same class and method. However, you cannot assign more than one type of interceptor to the same class and method in a .NET application. For example, defining an information point or a method invocation data collector (MIDC) on the same class and method that is already instrumented as an entry or exit point .
JDBC connection pool metrics are not configured out-of-the-box for GlassFish. To configure them, uncomment the JDBC connection pool section and provide the relevant information in the following f... See more...
JDBC connection pool metrics are not configured out-of-the-box for GlassFish. To configure them, uncomment the JDBC connection pool section and provide the relevant information in the following file: <agent_home>/ver<version_number>/conf/jmx/servers/glassfish-v2-jmx-config.xml Uncomment the following section and follow the instructions provided in the file. <!-- The following config can be uncommented to monitor glassfish JDBC connection pool. Please set the name of the connection pool (not the datasource name) and enable monitoring for the JDBC Pools on glassfish admin console. --> <!-- <metric mbean-name-pattern="com.sun.appserv:type=jdbc-connection-pool,category=monitor,name=<set the name of pool>,*" category="JDBC Connection Pools"> <attribute-counter-mappings> <attribute-counter-mapping> <attribute-name>numconnused-current</attribute-name> <counter-name>Connections In Use</counter-name> <counter-type>average</counter-type> <time-rollup-type>average</time-rollup-type> <cluster-rollup-type>individual</cluster-rollup-type> </attribute-counter-mapping> <attribute-counter-mapping> <attribute-name>numconnused-highwatermark</attribute-name> <counter-name>Max Connections Used</counter-name> <counter-type>observation</counter-type> <time-rollup-type>average</time-rollup-type> <cluster-rollup-type>individual</cluster-rollup-type> </attribute-counter-mapping> <attribute-counter-mapping> <attribute-name>numpotentialconnleak-count</attribute-name> <counter-name>Potential Leaks</counter-name> <counter-type>observation</counter-type> <time-rollup-type>average</time-rollup-type> <cluster-rollup-type>individual</cluster-rollup-type> </attribute-counter-mapping> <attribute-counter-mapping> <attribute-name>averageconnwaittime-count</attribute-name> <counter-name>Avg Wait Time Millis</counter-name> <counter-type>observation</counter-type> <time-rollup-type>average</time-rollup-type> <cluster-rollup-type>individual</cluster-rollup-type> </attribute-counter-mapping> <attribute-counter-mapping> <attribute-name>waitqueuelength-count</attribute-name> <counter-name>Current Wait Queue Length</counter-name> <counter-type>observation</counter-type> <time-rollup-type>average</time-rollup-type> <cluster-rollup-type>individual</cluster-rollup-type> </attribute-counter-mapping> </attribute-counter-mappings> </metric>
In some situations, JMX metrics from GlassFish are not reported. Also, some metrics may not be enabled by default. Try this solution: Confirm that JMX monitoring is enabled in the GlassFish serv... See more...
In some situations, JMX metrics from GlassFish are not reported. Also, some metrics may not be enabled by default. Try this solution: Confirm that JMX monitoring is enabled in the GlassFish server.  Navigate to the  <agent_home>/ver<version_number>/conf/jmx/ directory.  Copy the attached XML into an mbean-servers.xml file in that directory.  You should see a new JMX node in the metrics tree.
In certain situations, you may encounter the following exception in the agent.log file for the Java Agent deployed on the WebSphere Application Server (WAS). [AD Thread-Transient Event Channel Pol... See more...
In certain situations, you may encounter the following exception in the agent.log file for the Java Agent deployed on the WebSphere Application Server (WAS). [AD Thread-Transient Event Channel Poller0] 17 Aug 2011 08:14:08,031 ERROR JMXTransientOperationsHandler - Error trying to lookup clz - java.lang.ClassNotFoundException: com.ibm.ws.security.core.SecurityContext   To resolve this issue: From the WAS administration console, navigate to the JVM settings for the server of interest: Application servers -> <server> -> Process Definition -> Java Virtual Machine. Remove the following setting from the generic JVM settings: -Djavax.management.builder.initial = -Dcom.sun.management.jmxremote
Java Web Start software allows you to download and run Java applications from the web and is included in the Java Runtime Environment (JRE) since release of Java 5.0. Java Web Start applications are ... See more...
Java Web Start software allows you to download and run Java applications from the web and is included in the Java Runtime Environment (JRE) since release of Java 5.0. Java Web Start applications are launched by using the Java Network Launch Protocol (JNLP). Environment  Java client application launched via JNLP JVM: Oracle 1.7.0_71 Java(TM) SE Runtime Environment (build 1.7.0_71-b14) OS: Windows 7 64-bit    Solution To attach the Java Agent, use one of the following approaches: Approach 1   javaws -J-javaagent:<agent-install- dir>\javaagent.jar <jnlp file>   Approach 2 set JAVA_HOME=C:\Program Files\Java\jre7 set JAVA_TOOL_OPTIONS=-javaagent:< agent-install-dir>\javaagent. jar<JAVA_HOME>\bin\javaws.exe <jnlp file> Security Settings If the agent is not behaving as expected due to security related issues, then you might need to tweak Java security settings as follows: Find the <JAVA_HOME>\lib\security\ javaws.policy file . Edit the file with these settings:  grant codeBase "file:${jnlpx.home}/javaws.jar" { permission java.security.AllPermission; }; grant { permission java.security.AllPermission; };
Updated 7/23/18 Issue I am receiving the following notification on the Controller. CONTROLLER_METRIC_DATA_BUFFER_OVERFLOW   Explanation This message indicates that the data buffe... See more...
Updated 7/23/18 Issue I am receiving the following notification on the Controller. CONTROLLER_METRIC_DATA_BUFFER_OVERFLOW   Explanation This message indicates that the data buffer used to store the metrics is full before these can be flushed to the underlying data store. The buffer is an in-memory cache used to store metrics temporarily in the Controller Appserver and is emptied periodically after the metric data is written to the persistence store. If the buffer becomes full before it is emptied, then the metric data buffer overflow error is generated. When this occurs, the new metrics are dropped by the Controller until space is available in the buffer. The buffer can be intermittently or consistently full. The main determining factors that affect this metric flow are the metric ingestion rate and I/O throughput (and latency) of the underlying storage system. The buffers are sized according to the Controller profile but can vary depending upon the environment. If the buffers are consistently full, then it mostly means the incoming metrics rate is high and buffers are not sized accordingly. If the buffers are intermittently full, it means there is a sudden spike in the metrics rate and/or the I/O throughput of storage is not sufficient enough to flush the metrics in a timely manner. It’s usually the latter and is often seen in SAN-based storages. Example: Let's say the metrics data buffer is sized as 300MB and it can hold approximately 1 million metric data points.   1) If each minute metrics rate is <= 1 million/min and the throughput to write metrics to storage is 1+ million/min, then the buffers will not overflow. [Ideal situation] 2) If the incoming metrics rate is 2 million/min, then the buffer will be full every minute because buffers can only hold 1 million at any given time and extra metrics will potentially be dropped. [Buffer not sized correctly] 3) If the incoming metrics rate is ~1 million/min and the disk write throughput is not fast enough, then buffers would still be required to hold data worth more than 1 minute and potentially will get full since they’re not getting flushed to keep up with the incoming rate. [Slow disk write] Solution 1) If it’s determined that the metrics buffer is not sized properly, increasing the buffer size will fix the problem. The approximate calculation we use for metrics buffer size is a 300-400 MB per one million metrics/min metrics rate. This size considers extra space to hold metrics data for 1+ minute(s) worth of data. The buffer uses the Controller's heap memory; therefore, it’s important that the Controller's host has enough RAM (reserved) available that can be allocated to the Controller’s heap if required. If you have an on-prem Controller, log in to the admin.jsp page of the Controller by logging out of the existing account and going to url <host>/controller/admin.jsp . Set the value for the Controller setting = "metrics.buffer.size" to a higher value and restart the Controller server. The buffers are sized at the Controller startup, so any change in buffer requires a Controller Appserver restart. If you have a SaaS Controller, the buffer sizes are usually set appropriately but a sudden spike can lead to buffer overflow. If you notice overflow notifications, contact the AppDynamics Support team. 2) If the metrics buffer size is correctly set, then most likely the underlying cause of buffer overflow is slow disk I/O throughput. Check the Controller profile, sizing and disk I/O requirements outlined here: Controller System Requirements If you need further assistance, contact AppDynamics Support team.
Question A count of HTTP error codes appears on the main dashboard. Is there a way to get a list of the specific error codes, such as 301, 401, 404, 500 and so on? Answer In the Controller UI,... See more...
Question A count of HTTP error codes appears on the main dashboard. Is there a way to get a list of the specific error codes, such as 301, 401, 404, 500 and so on? Answer In the Controller UI, go to Troubleshoot -> Errors, select the Exceptions tab, and type HTTP error into the search box to filter by "HTTP error".
Question How can I debug my controller install? Answer The Controller installer actually keeps a verbose log of what it is doing on every platform. The filename is of the general format i4j_lo... See more...
Question How can I debug my controller install? Answer The Controller installer actually keeps a verbose log of what it is doing on every platform. The filename is of the general format i4j_log_Controller_nnnnnnnnnnnnnnnnnnn.log. On Linux, you can find it in the /tmp directory. On Windows it is in the user's temp folder. (Type %TEMP% into the windows explorer location bar). On Mac, once you start the installer, open up a terminal window and type: lsof | grep Controller You will see a result like this: 86112 /private/var/folders/np/ctwhy04n6mxdbvhlw_yjkq_cpslbk3/T/i4j_log_Controller_3263273107085015708.log You can "tail -f" that filename to track the installer's detailed progress.
Question How can I check the expiration date of the SSL certificate being used by my Controller? Answer 1. Use the following command and change localhost:8181 to match the controller you are q... See more...
Question How can I check the expiration date of the SSL certificate being used by my Controller? Answer 1. Use the following command and change localhost:8181 to match the controller you are querying. echo ^D |openssl s_client -connect localhost:8181 | openssl x509 -noout -enddate 2. You can also use: http://exchange.nagios.org/directory/Plugins/Network-Protocols/HTTP/check_ssl_certificate/details.
I need to instrument an Adobe ColdFusion app — how do I do it? Table of Contents How do I install the Java Agent on Cold Fusion? Tips: ColdFusion with Java Agent Resource Summary H... See more...
I need to instrument an Adobe ColdFusion app — how do I do it? Table of Contents How do I install the Java Agent on Cold Fusion? Tips: ColdFusion with Java Agent Resource Summary How do I install the Java Agent on Cold Fusion? Install the AppDynamics Java Agent on ColdFusion using either the ColdFusion Administrator Console method, or the ColdFusion .jvm config file method, found below: Install the Java Agent using the ColdFusion Administrator Console Start ColdFusion and access the Administrator Console.  Expand SERVER SETTINGS in the left side tree, then click Java and JVM. In the JVM Arguments text box, add the AD agent entry to the -javaagent argument. Click Submit Changes. Install the Java Agent using the ColdFusion jvm.config file  You can also add the -javaagent argument to jvm.args property in jvm.config file located at  <ColdFusion_Install_Dir>\cfusion\bin\jvm.config and restart the ColdFusion.  For example: shell>>cd C:\ColdFusion10\cfusion\bin shell> coldfusion.exe restart Ex: C:\ColdFusion10\cfusion\bin\jvm.config Note: Additional configuration is required for transaction discovery. Refer to AppDynamics Servlet Entry Points documentation Tips: ColdFusion with Java Agent The Java Agent can handle ColdFusion applications that target the JVM. A ColdFusion application, once compiled to Java class files, is not that different from the typical Java app. The agent can identify business transactions, exit points, and so on. CfmServlet is detected as entry point on the JRun Server, out of the box. The Agent also has support for mapping ColdfFusion UDF's (User defined Functions) in callgraphs. Resource Summary AppDynamics  Servlet Entry Points documentation