cloudfoundry / cloudfoundry/cf-java-client
CF V3 getProcessStatistics - The threads are not released
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Java
- Estrellas
- 334
- Forks
- 319
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
@twoseat I am tagging you directly as the issue still exists.
we have about 70 microservices running in the cloud foundry & we would like to monitor all the microservices with the following metrics,
- State
- Memory utilization
- CPU Utilization
- Disk Utilization
recently, I started to use CF v3 API & the issue is still the same. The allocated threads are not released, Due to which the application crashes multiple times a day.
The below API is called once every 5 minutes for about 70+ microservices
public void requestAllApplicationStatistics(DefaultCloudFoundryOperations cloudFoundryOperations, List<CfArtifacts> cfArtifacts) {
initializeTaskExecutor();
Flux.fromIterable(cfArtifacts)
.flatMap(application -> cloudFoundryOperations.getCloudFoundryClient().applicationsV3()
.getProcessStatistics(GetApplicationProcessStatisticsRequest.builder()
.applicationId(application.getId())
.type("web")
.build())
.map(response -> {
logger.debug("step 1 - cfStatistics fetched successfully");
CfApplicationResponse cfApplicationResponse = new CfApplicationResponse();
cfApplicationResponse.setApplicationId(application.getName());
cfApplicationResponse.setCfApplicationId(application.getId());
cfApplicationResponse.setPrefix(application.getPrefix());
List<ProcessStatisticsResource> resourceList = response.getResources();
cfApplicationResponse.setApplicationInstances(resourceList);
logger.debug("step 2 - cfStatistics before calling the callback");
return cfApplicationResponse;
})
.doOnError(e -> {
logger.error("cfStatistics Fetch Failed with error: {}", e.getMessage(), e);
})
.doFinally(signalType -> {
logger.debug("All applications processed. Shutting down the executor service.");
// shutdownTaskExecutor(); // Shutdown the executor service
})
)
.subscribeOn(Schedulers.fromExecutor(taskExecutor))// Use the shared task executor
.publishOn(Schedulers.fromExecutor(taskExecutor)) // Use the shared task executor
.doOnNext(cfResponseCallback::processCfMetrics)
.subscribe(); // Subscribe to start the execution
}
private static synchronized void initializeTaskExecutor() {
if (taskExecutor == null) {
taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(10); // Set the desired core pool size
taskExecutor.setMaxPoolSize(20); // Set the desired maximum pool size
taskExecutor.setThreadNamePrefix("cf-task-executor-"); // Set a thread name prefix
taskExecutor.initialize(); // Initialize the task executor
}
}
Look at the active threads in the below screenshot, it keeps increasing & crashes (the screenshot was captured from the Health Monitoring on the total threads measured by java Open telemetry instrumentation)
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza con el punto de entrada applicationsV3().getProcessStatistics y revisa el issue 1054 junto con el uso reportado de requestAllApplicationStatistics. Como en el issue no se identifica ningún archivo del repositorio ni ninguna prueba, localiza primero la implementación y las pruebas existentes y, después, reproduce las llamadas repetidas. La finalización debe demostrarse con una prueba de regresión que muestre que los hilos no siguen aumentando una vez completadas las solicitudes de estadísticas.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- java
- Área
- api
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Necesita aclaración
- Aptitud para principiantes
- 30/100