Meu aplicativo está abrindo milhares de novos pools e threads de ForkJoinPool, sem que eles sejam fechados, mas permanece em WAIT
status, até que o programa eventualmente gere um erro OOM (mas ainda não trava):
jakarta.servlet.ServletException: Handler dispatch failed: java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached
// ...stacktrace
[95433.690s][warning][os,thread] Failed to start thread "Unknown thread" - pthread_create failed (EAGAIN) for attributes: stacksize: 1024k, guardsize: 0k, detached.
[95433.691s][warning][os,thread] Failed to start the native thread for java.lang.Thread "pool-1917-thread-1"
Caused by: java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached
A única parte que usa ForkJoinPool no meu programa é da biblioteca openfga , por exemplo:
// my code that calls the library
var response = fgaClient.listRelations(body, options).get();
// listRelations() in the library
public CompletableFuture<ClientListRelationsResponse> listRelations(ClientListRelationsRequest request, ClientListRelationsOptions listRelationsOptions) throws FgaInvalidParameterException {
// implementation...
return this.batchCheck(batchCheckRequests, options.asClientBatchCheckOptions())
.thenCompose(responses -> call(() -> ClientListRelationsResponse.fromBatchCheckResponses(responses)));
}
Alguém pode me dar uma ideia do que está acontecendo? Como eu conserto isso?
Editar: este é um bug da biblioteca e foi corrigido na versão 0.7.2
Obrigado por levantar isso. Neste caso, é um bug no OpenFGA SDK subjacente.
No OpenFGA Java SDK, um novo executor é criado em cada chamada para BatchCheck, mas nunca é encerrado.
A equipe do OpenFGA está monitorando o problema aqui e tem um PR com uma correção para ele que deve ser mesclada em breve.
Como esse é um bug na biblioteca, sugiro fechar a pergunta aqui e seguir o problema vinculado para atualizações.