0

我们实现了 RESTHEART 从 MongoDB 获取聚合数据。对于单个请求,数据正常并符合要求。当我们通过在 MongoDB 上添加负载开始在 JMeter 请求下检查这一点时,我们在后端遇到了异常。我们与 MongoDB 工程师分享了这些异常,他们表示这可能是由于 restheart api 问题。以前有人遇到过这些问题吗?

@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','year':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!
4

1 回答 1

0

RESTHeart 是一个普通的 Java 应用程序,您看到的是一个java.lang.OutOfMemoryError异常。这意味着您的测试正在使用所有可用的 JVM 堆空间,因此 JVM 内存不足。

默认:

Java 8 为您的(最小 HeapSize)占用您物理内存的 1/6 中的较大者,为您的(最大 HeapSize)-Xms<size>占用您物理内存的 1/4 中的较小者。-Xmx<size>

在 Linux 或 Mac OS 系统中,您可以使用以下命令检查默认堆大小:

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

如果您的服务器有足够的可用物理内存,您可以尝试使用更大的堆运行 RESTHeart,将-Xmn<size>参数添加到命令行。

例如:java -Xmx3072m将JVM的最大堆大小设置为3GB。

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

于 2017-08-13T18:42:42.530 回答