サポートアドバイザリ 49138:非同期メソッドをインストルメントすると System.Runtime.InteropServices.SEHException が発生する

このドキュメントでは、AppDynamics 製品のサポートアドバイザリについて説明します。

概要

AppDynamics では、.NET エージェントが一般的なクラスまたはメソッドでカプセル化された非同期メソッドをインストルメント化しようとしたときにトリガーされる問題を検出しました。ほとんどの場合、これにより System.Runtime.InteropServices.SEHException が発生します。まれに、アプリケーションがハングする場合があります。

影響を受けるソフトウェア

製品:、コンポーネントVersion
AppDynamics .NET APM.NETエージェント4.1.3 より前の 4.1 バージョン

影響

アプリケーション例外:概要で説明されているメソッドのインストルメンテーションは SEHException を発生させます。

// An async method called inside of a generic class will trigger the exception.
class GenericClass<T>
{
   async Task AsyncMethod()
   {
   //Do work...  

   }
}

// An async method called inside of a generic method will also trigger the exception.
class MyClass
{
   public async void MyMethod<T>(T input)
   {
      await AsyncMethod();
   }
}

回避策

  • エージェントのバージョン 4.1.0 ~ 4.1.2 を実行しているお客様には、4.1.3 以降にアップグレードすることをお勧めします。
  • .NET エージェント構成ファイルを編集して、AsyncStateMachineInstrumentor を無効化します(次の手順を参照)。
AsyncStateMachineInstrumentor を無効化するには、次の手順を実行します。
  1. Windows のバージョンに応じて、次のファイルを開きます。
    • Windowsサーバー2008以降:%ProgramData%\AppDynamics\DotNetAgent\Config\config.xml
    • Windows Server 2003:%AllUsersProfile%\Application Data\AppDynamics\DotNetAgent\Config\config.xml
  2. <machine-agent> ノードを置き換えるか更新して、次を含めるようにします。

    <machine-agent>
       <instrumentation>
          <instrumentor name="AsyncStateMachineInstrumentor" enabled="false" />
       </instrumentation>
    </machine-agent>
  3. AppDynamics.Agent.Coordinator サービス、およびインストルメント化対象となっているすべてのプロセスを再起動します。