トラブルシューティング
この項では、Oracle Cloud Infrastructure SDK for Javaのトラブルシューティング情報について説明します。
この項では、Oracle Cloud Infrastructure SDK for Javaのトラブルシューティング情報について説明します。
プログラムが無期限にハングする
サーバーへのリクエストが無期限にハングする場合、接続が接続プールから解放されていない可能性があります。
現在、SDK for Javaでは、リクエストの送信とサービスへの接続管理のためにApacheコネクタがサポートされています。Apacheコネクタでは接続プーリングがサポートされています。ストリームが終了していない場合、接続は接続プールから解放されないため、待機が無期限になります。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」のエアーを受け取ります。
この問題を修正するには、次のいずれかの回避策を使用します。
-
AES128など、128ビット・キーを使用します。
-
次の場所からJava Cryptography Extension (JCE) Unlimited Strength Jurisdictionをインストールします: http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
サービス・エラーのトラブルシューティング
サービス・エラーを引き起こすすべての操作は、SDKによって例外タイプcom.oracle.bmc.model.BmcExceptionがスローされる原因となります。OCIから返される一般的なサービス・エラーの詳細は、APIエラーを参照してください。