2017-08-09 77 views
0

我们实现了RESTHEART以从MongoDB获取聚合数据。对于单个请求,数据会很好地满足要求。当我们通过在MongoDB上添加负载来开始在JMeter请求下检查这个时,我们在后端得到了异常。 我们与MongoDB工程师分享了这些例外情况,他们表示可能是因为restheart api问题。 有没有人遇到过这些问题?RESTHEART抛出异常

@Andrea Di Cesare,对此的任何帮助将不胜感激。

以下是详细信息 下面是一些错误与“内存不足”的示例URI。 REST API调用 http://ftc-lbeapoc202:8080/statdata/InsStatData/_aggrs/getStatDataByIssuerIdSectionName?avars= { 'issuerId':66915, 'sectionName': 'SCDPT1'} http://ftc-lbeapoc202:8080/statdata/InsStatData/_aggrs/getStatDataByIssuerIdSectionName?avars= { 'issuerId':66915, 'sectionName': '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需要你的物理内存的1/6的较大的为您-Xms<size>(最小堆大小),并为您的-Xmx<size>(最大堆大小)较小的1 /你的物理内存的第四位。

在Linux或Mac OS系统,您可以检查您的默认堆大小:

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

如果你的服务器有足够的可用物理内存,你可以尝试用一个更大的堆运行RESTHeart,加命令行的-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。如果是这种情况,我们将检查堆积并监控它。谢谢。 – Abhinav1singhal