私たちは、接続プール(サイズ100)を使用してOracle VM上のJcoアダプタ3.0経由でフロントエンドのスプリングブートクライアントを接続するエンタープライズ規模のSAPアプリケーションを実行しています。 SAPアプリケーションサーバーのログに表示されない、システム側の長時間実行されないリクエストが10件以上発生しています。つまり、SAP側にボトルネックがないようです。Jcoアダプタのプーリングパフォーマンスのデッドロック?
サンプルリクエストのトレースファイル(レベル4)を見ると、アダプタスレッドがクライアントをプールから取得しようとすると時間が失われていることがわかります(他のスレッドは実行を継続し、 :
[20:05:50:259]: [JCoAPI] JCoContext.isStateful(P-foo-CPIC0) in session ID Client-53-1 returns false
[20:05:50:259]: [JCoAPI] JCoContext.begin(P-foo-CPIC0) in session ID Client-53-1
[20:05:50:259]: [JCoAPI] Started context for session Client-53-1
[20:05:50:259]: [JCoAPI] JCoContext.begin() for destination PFOO_200 (P-foo-CPIC0) on context with id Client-53-1; current state counter is 1
[20:05:50:259]: [JCoAPI] destination PFOO_200 destinationID=P-foo-CPIC0 executes Z_foo sessionID=Client-53-1, threadID=0x35
[20:05:50:259]: [JCoAPI] Context.getConnection on destination PFOO_200 (state: destination = STATEFUL, default = STATELESS)
[20:05:50:259]: [JCoAPI] PoolingFactory.getClient() on pool P-foo-CPIC0
--> time lost here
[20:06:20:840]: [JCoAPI] PoolingFactory.getClient() returns handle [3/84977415]
[20:06:20:840]: [JCoAPI] Context.getConnection on destination PFOO_200 nothing found in the context - got client from ConnectionManager [3/84977415]
[20:06:20:840]: [JCoAPI] JCoClient before execute(Z_foo) on handle [3/84977415]
[20:06:20:840]: [JCoRFC] Executing function Z_foo on handle [3/84977415]
[20:06:20:866]: [JCoAPI] JCoClient after execute(Z_foo) on handle [3/84977415] returns after 26 ms
[20:06:20:866]: [JCoAPI] Context.releaseConnection on destination PFOO_200 [3/84977415]
[20:06:20:867]: [JCoAPI] JCoContext.end(P-foo-CPIC0) in session ID Client-53-1
[20:06:20:867]: [JCoAPI] PoolingFactory.releaseClient() handle [3/84977415] into pool P-foo-CPIC0 [pool size: 3, peak limit: 100, waiting threads: 0, currently used: 1]
[20:06:20:879]: [JCoAPI] Finished context for session Client-53-1
[20:06:20:879]: [JCoAPI] JCoContext.end() for destination PFOO_200 (P-foo-CPIC0) on context with id Client-53-1; current state counter is 0
ステップは、ミリ秒単位で処理されます。
アダプタまたはSAP側のJcoアダプタのプール処理に関する既知の制限または設定はありますか。
更新私たちはJcoアダプター3.0.16
を使用しており、現在3.0.17
を再確認します。我々は/nslookup
を監視しており、遅れずにDNSを実行しているので、DNSはそう思わないでしょう。