Skip to content

Java agent to detect blocking calls from non-blocking threads.

License

Notifications You must be signed in to change notification settings

spring-operator/BlockHound

 
 

Repository files navigation

BlockHound (experimental)

Travis CI

Java agent to detect blocking calls from non-blocking threads.

How it works

BlockHound will transparently instrument the JVM classes and intercept blocking calls (e.g. IO) if they are performed from threads marked as "non-blocking operations only" (ie. threads implementing Reactor's NonBlocking marker interface, like those started by Schedulers.parallel()). If and when this happens (but remember, this should never happen!:stuck_out_tongue_winking_eye:), an error will be thrown. Here is an example:

// Example.java
BlockHound.install();

Mono.delay(Duration.ofSeconds(1))
    .doOnNext(it -> {
        try {
            Thread.sleep(10);
        }
        catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    })
    .block();

Will result in:

java.lang.Error: Blocking call! java.lang.Thread.sleep
	at java.base/java.lang.Thread.sleep(Native Method)
	at com.example.Example.lambda$exampleTest$0(Example.java:16)

Note that it points to the exact place where the blocking call got triggered. In this example it was Example.java:16.

Getting it

Download it from Maven Central repositories (stable releases only) or repo.spring.io:

repositories {
  maven { url 'http://repo.spring.io/milestone' }
  // maven { url 'http://repo.spring.io/snapshot' }
}

dependencies {
  testCompile 'io.projectreactor.tools:blockhound:$LATEST_RELEASE'
  // testCompile 'io.projectreactor.tools:blockhound:$LATEST_SNAPSHOT'
}

Where:
$LATEST_RELEASE is:
$LATEST_SNAPSHOT is:

Quick Start

See the docs.


Licensed under Apache Software License 2.0

Sponsored by Pivotal

About

Java agent to detect blocking calls from non-blocking threads.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C 39.4%
  • C++ 37.2%
  • Java 23.0%
  • Other 0.4%