Summary

AppDynamics has discovered an issue triggered when an instrumented application calls a method with a signature longer than 2048 characters. In this case the application will throw a non-managed exception and crash.  The crash is the result of a new Profiler logging mechanism in 4.3 attempting to write strings into the Profiler Log file where not enough buffer has been allocated.

Affected Software

The issue affects the .NET Agent versions 4.3.0.x and 4.3.1.0.

Impact

If the instrumented application calls a method with a signature longer than 2048 characters, the application will crash with an exception similar to the following, shown in the Windows Event Log:

Faulting application name: w3wp.exe, version: 8.5.7656.xxxxxxx, time stamp: 0x3xxxxxx
Faulting module name: MSVCR120.dll, version: 12.0.21005.1, time stamp: 0x524f83ff
Exception code: 0xxxxxxxxxx
Fault offset: 0x00000000000xxxxx
Faulting process id: 0xef36
Faulting application start time: 0x0xxxxxxx
Faulting application path: c:\windows\system32\inetsrv\w3wp.exe
Faulting module path: C:\Windows\system32\MSVCR120.dll

Resolution

The issue has been resolved in 4.3.1.3. Customers running 4.3.0.x or 4.3.1.0 versions of .NET agents should:

  • Upgrade to the latest version of 4.3.
    OR
  • Configure the .NET Agent to cease instrumentation of unrecognized methods and profiling logging:
    1. In the AppDynamics installation folder, edit AppDynamicsAgentLog.config and remove or comment out the following lines: 

      <target name="Profiler" xsi:type="File" archiveAboveSize="12000000" maxArchiveFiles="2" createDirs="True" fileName="C:\ProgramData\AppDynamics\DotNetAgent\Logs\Profiler" layout="${longdate} ${processid} ${appdomainid} ${threadid} ${level} ${logger:shortName=True} ${message}" />
      ..and…
      <logger name="com.appdynamics.profiler.*" minLevel="Info" writeTo="Profiler" />
    2. Edit the config.xml file in your AppDynamics configuration folder, add the following within the <app-agents> tag:

      <profiler>
      <assembly-white-list use-default="true">
      </assembly-white-list>
      </profiler>