В приложении Predix Cloud Foundry возникла проблема с памятью - PullRequest
0 голосов
/ 29 октября 2018

У меня есть приложение Spring Boot, у которого есть запланированное задание каждые две минуты, чтобы извлекать данные из временных рядов и выполнять некоторые вычисления с помощью HTTP-запроса, а затем сохранять результат во временных рядах.

Проблема в том, что с каждой итерацией потребление памяти увеличивается. Я попытался 2 ГБ и 4 ГБ памяти для этого, но он исчерпывает память через некоторое время, давая ошибку памяти кучи. Ниже приведен пример кода, чтобы дать вам общее представление о том, что я делаю.

@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- Как я могу проверить, где у меня течет память и как это сделать в облачном литейном производстве? 2- Любой альтернативный / лучший подход

1 Ответ

0 голосов
/ 07 ноября 2018

После просмотра кода и опробования различных вещей кажется, что код для загрузки данных во временные ряды теряет память. Я инициализировал клиента на каждой итерации, и по какой-то причине он не собирал мусор. Итак, я попробовал синглтонный подход для этого, и теперь память, кажется, находится под контролем и разрешена. С прошлой недели он не превысил 1,3 ГБ

...