トラブルシューティング

この項では、Oracle Cloud Infrastructure SDK for Javaのトラブルシューティング情報について説明します。

この項では、Oracle Cloud Infrastructure SDK for Javaのトラブルシューティング情報について説明します。

プログラムが無期限にハングする

サーバーへのリクエストが無期限にハングする場合、接続が接続プールから解放されていない可能性があります。

現在、SDK for Javaでは、リクエストの送信とサービスへの接続管理のためにApacheコネクタがサポートされています。Apacheコネクタでは接続プーリングがサポートされています。ストリームが終了していない場合、接続は接続プールから解放されないため、待機が無期限になります。
SDKでは、ストリームを自動的に終了し、接続プールから接続を解放しますが、これはストリームが完全に読み取られた場合のみです。
プログラムのハングを回避するには、レスポンスから返されたすべてのストリームを終了し、待機が無期限にならないよう接続プールから接続を解放してください。例:
GetObjectResponse getObjectResponse = client.getObject(getObjectRequest);
getObjectResponse.getInputStream().close(); // Close the stream OR use try-with-resources
try (final InputStream fileStream = getResponse.getInputStream()) {
} // try-with-resources automatically closes fileStream

Jerseyのデフォルト・コネクタHttpUrlConnectorに切り替えることも可能です。詳細は、「JerseyのデフォルトであるHttpUrlConnectorProviderの使用」を参照してください。

サーバーが応答しないまま、Apacheクライアント・ライブラリ接続が切断される

通常、負荷が高い場合、サーバーではリクエストを受信はしますが処理はしません。これが原因で、サーバーが応答しないまま、クライアントへの接続が切断される場合があります。そのような状況になると、Apache HttpClientにより、NoHttpResponseExceptionがスローされます。このような場合、基礎となるApache HttpClientによりサーバーへのリクエストが再試行され、サーバーへの再試行に関するINFOレベルのログが生成されます。再試行が失敗し、リクエストが完了しない場合は、Jerseyのデフォルト・コネクタHttpUrlConnectorに切り替える必要があります。詳細は、「JerseyのデフォルトであるHttpUrlConnectorProviderの使用」を参照してください。

クライアントがクローズしても、ObjectStorageクライアントが接続をクローズしません。

開いているファイル・ディスクリプタが多すぎ、既存のファイル・ディスクリプタを閉じるのに時間がかかりすぎています。例外は次のようになります:

Caused by: java.io.FileNotFoundException: classes/caspertest.pem (Too many open files)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)

この問題を修正するには、次のいずれかの回避策を使用します。

  • クライアントを作成する前に次のコールを行います: System.setProperty("http.keepAlive", "false");
  • Javaを実行するときに次のコマンドライン引数を使用します: -Dhttp.keepAlive=false

リクエスト作成時またはレスポンス処理時のシリアライズ・エラー

レスポンスを処理する際のUnrecognizedPropertyException エラーは、アプリケーションのクラス・パスの別の依存関係から実行時にインジェクトされた機能が、Jacksonライブラリのバージョンでサポートされないことを意味します。これは、構成されたObjectMapperについてFAIL_ON_UNKNOWN_PROPERTIESデシリアライズ・プロパティがfalseに設定されている場合でも発生します。

解決方法:

アプリケーションのクラス・パスで参照されるJacksonライブラリのバージョンを確認し、必要に応じてバージョン2.9.5にアップグレードしますSDK for Javaが依存するJacksonライブラリの完全な一覧は、GitHubでホストされているpom.xmlファイルを参照してください。

ノート

アプリケーションでインスタンス化されたときにクライアントをカスタマイズする場合、RestClientFactory#getObjectMapper()メソッドを使用してRestClientFactoryの事前構成済のObjectMapperを参照します。

もう1つの解決方法は、バンドル・バージョンのJacksonライブラリが含まれるシェーディング・バージョンのSDK for Java jarファイルを使用することです。

暗号化キーのサイズ・エラー

デフォルトでは、SDK for Javaではキー長が128ビット以内のキーしか処理できません。AES256などサイズが大きいキーを使用すると、「Invalid Key Exception」や「Illegal key size」のエアーを受け取ります。

この問題を修正するには、次のいずれかの回避策を使用します。

サービス・エラーのトラブルシューティング

サービス・エラーを引き起こすすべての操作は、SDKによって例外タイプcom.oracle.bmc.model.BmcExceptionがスローされる原因となります。OCIから返される一般的なサービス・エラーの詳細は、APIエラーを参照してください。