2017-11-30 11 views
1

私たちは、接続プール(サイズ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はそう思わないでしょう。

答えて

2

どのJCoパッチレ​​ベルを使用しますか? 最初に最新のJCoパッチレ​​ベル3.0.17にアップデートしようとしましたか?

時間差があると、RFC接続が開き、その時点でプールが空の場合はRFCログオンが完了します。トレースレベルを上げてみたか、RFCトレースを調べましたか?

これは、ABAP側で自由なダイアログワークプロセスを持たないこと、SAPシステムデータベースの問題(RFCログオン認証チェックに必要)、SAPメッセージサーバーからの応答時間が遅いこと(負荷分散ログオンを使用する場合) 、SNCハンドシェイクの問題(SNCを使用している場合)、またはDNSに関する一般的なネットワークの問題(ホスト名の代わりにIPアドレスを使用してみてください)。

0

チェックする価値があります:接続プールのサイズが100であるとします。プログラムに100スレッド以上のスレッドがある可能性はありますか?その後、時折、すべての接続が他のスレッドでビジー状態になり、現在のスレッドは、別のスレッドの関数呼び出しが完了して接続がプールに返されるまで待機する必要があります。 (スレッドが空のプールで待機する時間は、「プール待機時間」パラメータを使用してカスタマイズできます)