【问题标题】:Predix Cloud Foundry App Heap out of memory issuePredix Cloud Foundry App Heap 内存不足问题
【发布时间】:2018-10-29 12:17:13
【问题描述】:

我有一个 Spring Boot 应用程序,它每两分钟执行一次计划任务,以从时间序列中获取数据并通过 HTTP 请求对其执行一些计算,然后将结果存储回时间序列中。

问题在于每次迭代的内存消耗都在增加。我为此尝试了 2 GB 和 4 GB 内存,但一段时间后它的内存耗尽,导致堆内存错误。下面是一个示例代码,可让您大致了解我在做什么。

@Scheduled(cron = "0 0/2 * * * ?")
public void run() {

    try {
        log.info(new Timestamp(System.currentTimeMillis()).toString() + " -- Starting analytics execution.");
        AnalyticResponseModel timeseriesResponse = null;

        //Get input for Analytics Execution
        timeseriesResponse = retrieveDataPointsCurrent(TagsDataBuffer.TAGS);

        //Prepare payload for model execution request
        String payload = mapper.writeValueAsString(timeseriesResponse);
        RequestBody requestBody = RequestBody.create(JSON, payload);
        Request request = new Request.Builder().url(analyticModelURL).header("Content-Type", "application/json")
                .header("Accept", "application/json").post(requestBody).build();
        if( timeseriesResponse.getData().getTime_series().get("time_stamp").isEmpty()) {
            log.error("No Recent Data");
            return;
        }
        dataTimestamp = (long) timeseriesResponse.getData().getTime_series().get("time_stamp").get(0);

        log.info(new Timestamp(System.currentTimeMillis()).toString() + " -- Fetching Input data.");

        //Execute request
        Response response = client.newCall(request).execute();
        parseAndSaveOutput( response);
    } catch (Exception e) {
        log.error(e.getMessage());
    }
}

1- 如何检查内存泄漏的位置以及如何在 Cloud Foundry 中进行泄漏 2-任何替代/更好的方法

【问题讨论】:

  • 如何在 parseAndSaveOutput() 中存储数据?
  • AnalyticResponseModel arm = mapper.readValue(response.toString(), AnalyticResponseModel.class);我使用他们的 api 解析它并保存到时间序列。
  • 你也要我分享那个方法吗?
  • 在查看了代码并尝试了不同的东西之后,用于将数据摄取到时间序列的代码似乎存在内存泄漏。我在每次迭代时都初始化了 tenant 并且由于某种原因它没有被垃圾收集。因此,我为此尝试了 singleton 方法,现在内存似乎已 在控制之下 & resolved 。自上周以来,它从未超过 1.3 GB。

标签: java spring heap-memory cloud-foundry predix


【解决方案1】:

在查看了代码并尝试了不同的方法后,用于将数据提取到时间序列的代码似乎存在内存泄漏。我在每次迭代时都在初始化租户,由于某种原因它没有被垃圾收集。所以,我为此尝试了单例方法,现在内存似乎受到控制和解决。自上周以来从未超过 1.3 GB

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    相关资源
    最近更新 更多