es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La excepción de Blockhound ocurre incluso con programadores explícitos.

Tengo un fragmento de código similar para programar una entrada/salida en un pool de hilos separado, pero desafortunadamente necesitamos su respuesta para decidir si proceder o no.

private Response getItemsNonBlockingMethod(String id, final String path) {
        WebTarget webTarget = sampleServWebTarget
                .path(path).queryParam("id", id);
        Mono<response> responseMono = Mono.fromCallable(() -> {
            // La E/S bloqueante se programa en un pool de hilos separado
            return webTarget.request().get();
        }).subscribeOn(Schedulers.boundedElastic());
        return responseMono.block()
    }

He habilitado BlockHound en local, parece estar funcionando bien para la mayoría de los casos. Pero cuando hago pruebas de carga y rendimiento, veo ~10 ocurrencias de excepciones de BlockHound, ¿me estoy perdiendo algo? ¿Hay alguna mejor manera de bloquear en la versión 3.4 de Spring Reactor?

Actualización:

Traza de pila:

reactor.blockhound.BlockingOperationError: ¡Llamada de bloqueo! sun.misc.Unsafe#park
en sun.misc.Unsafe.park(Unsafe.java)
Suprimido: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Trazado de ensamblaje del productor [reactor.core.publisher.MonoError]:
reactor.core.publisher.Mono.error
reactor.netty.http.client.HttpClientConnect$HttpClientHandler.requestWithBody(HttpClientConnect.java:559)
El error se ha observado en los siguientes sitios:
|_ Mono.error ⇢ en reactor.netty.http.client.HttpClientConnect$HttpClientHandler.requestWithBody(HttpClientConnect.java:559)
|_ Mono.fromDirect ⇢ en reactor.netty.http.client.HttpClientConnect$HttpIOHandlerObserver.lambda$onStateChange$0(HttpClientConnect.java:398)
|_ Mono.defer ⇢ en reactor.netty.http.client.HttpClientConnect$HttpIOHandlerObserver.onStateChange(HttpClientConnect.java:398)

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás encontrando un BlockingOperationError al ejecutar pruebas de carga y rendimiento. Esto se debe probablemente a que la llamada de E/S bloqueante se ha programado en un hilo de grupo separado. Para evitarlo, puedes intentar usar una llamada de E/S no bloqueante en su lugar. Además, puedes intentar habilitar BlockHound para detectar y reportar cualquier llamada bloqueante.

Comments are closed.