2017-08-09 22 views
0

我々はRESTHEARTを実装して、MongoDBから集約されたデータを取得しました。シングルリクエストの場合、データは正常に受信され、要件を満たしています。 MongoDBへの負荷を追加してJMeterリクエストでこれをチェックし始めたとき、バックエンドで例外が発生しました。 これらの例外をMongoDBエンジニアと共有しました。彼らは、心配しているAPIの問題が原因である可能性があることを示しています。 誰も以前にこれらの問題に直面しましたか?RESTHEART例外をスローする

@Andrea Di Cesare、これに関するお手伝いをさせていただきます。

以下は、詳細 "Out of memory"でエラーになる例です。 REST APIは http://ftc-lbeapoc202:8080/statdata/InsStatData/_aggrs/getStatDataByIssuerIdSectionName?avars= { 'issuerId':66915 'セクション名': 'SCDPT1'} CALLS http://ftc-lbeapoc202:8080/statdata/InsStatData/_aggrs/getStatDataByIssuerIdSectionName?avars= { 'issuerId':66915 'セクション名': 'SCDPT1'、 '年':2014}

エラーにサーバーログ:

[[1;31mERROR^[[0;39m org.restheart.handlers.ErrorHandler - Error handling 
the request 
java.lang.OutOfMemoryError: Java heap space 
    at java.util.Arrays.copyOf(Arrays.java:3554) 
    at java.util.Arrays.copyOf(Arrays.java:3525) 
    at java.util.ArrayList.grow(ArrayList.java:272) 
    at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:246) 
    at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:238) 
    at java.util.ArrayList.add(ArrayList.java:469) 
    at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:84) 
    at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:41) 
    at com.mongodb.operation.CommandResultArrayCodec.decode(CommandResultArrayCodec.java:52) 
    at com.mongodb.operation.CommandResultDocumentCodec.readValue(CommandResultDocumentCodec.java:53) 
    at org.bson.codecs 


Error in response: 
{ 
·   _exceptions: 
[ 
o { 
§ exception: "java.lang.OutOfMemoryError", 
§ exception message: "Java heap space" 
} 
], 
·   http status code: 500, 
    ·   http status description: "Internal Server Error", 
    ·   message: "Error handling the request, see log for more 
    information" 
} 

Thanks! 
+0

あなたはここでそれについて何をすると思いますか?この問題は、「APIの内部動作」で示唆されているように見えます。したがって、論理的な行動は、保守担当者に直接問題を提起することです。これが「単一通話」のエラーではなく、むしろ「時間の経過」に起こった場合、https://github.com/softinstigate/restheart/issuesがより良い場所になるでしょう。 –

+0

取得しているデータの量はどれくらいですか?あなたはあなたのJavaアプリケーションの仮想メモリの上限を増やす必要があります。 – Serge

+0

@ Serge私たちが得ているデータはそれほど大きくありません。ときに仮想メモリの増加を増やしています。あなたはJMeterについて話していますか?なぜなら私はJMeterからこれらの呼び出しを直接トリガーしているからです(間にカスタムAPIはありません) – Abhinav1singhal

答えて

0

RESTHeartはJavaアプリケーションであり、表示される内容はjava.lang.OutOfMemoryError例外です。これは、使用可能なすべてのJVMのヒープスペースをテストが使用しているため、JVMがメモリ不足になっていることを意味します。デフォルトでは

のJava 8は、あなたの-Xms<size>(最小HEAPSIZE)のために、あなたの物理メモリの1 /第六の大型取り、あなたの-Xmx<size>(最大HEAPSIZE)のためのあなたの物理メモリの小さい方の1/4。追加して、サーバーに十分な使用可能な物理メモリを持っている場合は、より大きなヒープでRESTHeartを実行してみることができます

java -XX:+PrintFlagsFinal -version | grep -iE HeapSize

:あなたとあなたのデフォルトのヒープサイズを確認することができますLinuxやMac OSのシステムでは

コマンドラインへのパラメータは-Xmn<size>です。

たとえば、java -Xmx3072mは、JVMの最大ヒープサイズを3GBに設定します。

Rif:https://docs.oracle.com/cd/E15523_01/web.1111/e13814/jvm_tuning.htm#PERFM164

+0

あなたの指示に従いましたが依然としてリクエストを処理できません。今、問題を単一のREST API呼び出しに絞りましたが、予想される応答は約14 MBです。この場合、heapsizeをチェックして監視します。ありがとう。 – Abhinav1singhal