В приложении Predix Cloud Foundry возникла проблема с нехваткой памяти
У меня есть приложение 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 ответ
После просмотра кода и опробования различных вещей кажется, что код для ввода данных во временные ряды теряет память. Я инициализировал клиента на каждой итерации, и по какой-то причине он не собирал мусор. Итак, я попробовал синглтонный подход для этого, и теперь память, кажется, находится под контролем и разрешена. С прошлой недели он не превысил 1,3 ГБ.