Java agent to detect blocking calls from non-blocking threads.
APACHE-2.0 License
Bot releases are visible (Hide)
Thread
methods for JDK 19 and greater (#395) @BadbondPublished by pderop over 1 year ago
Published by github-actions[bot] over 1 year ago
thanks to all people who contributed to this version, and to all issue reporters !
Published by github-actions[bot] over 3 years ago
Published by github-actions[bot] over 3 years ago
blockhound-junit-platform
's pom.xml
declares a dependency to blockhound
with runtime scope instead of compile
blockhound
(using same version number) if it isn't already the casePublished by github-actions[bot] over 4 years ago
System.out
/System.err
) (#125) @bsideupThread
's state (#124) @bsideupPublished by release-drafter[bot] over 4 years ago
This release adds Java 14 compatibility.
A smoke test is added to ensure that Java 13+ environment is properly configured (see #33).
Published by release-drafter[bot] over 4 years ago
Error
(#62) @bsideupBlockingOperationError
instead of Error
(#65) @bhchandraBlockingOperationError
in assertions (#67) @bsideupgetInternalName()
instead of getName()
(#78) @bsideupPublished by release-drafter[bot] almost 5 years ago
Published by release-drafter[bot] about 5 years ago
This is a first release of BlockHound ๐
BlockHoundRuntime
from public API (#53) @bsideupBlockHoundRuntime
class directly), but it was never intended to be used directly, only by instrumentation.BlockHound
's constructor (#55) @bsideupnew BlockHound()
, which does not make a lot of sense :)Published by release-drafter[bot] about 5 years ago
This this is the first release candidate and it focuses on the performance.
Previous versions were using a native agent (in C++).
But it was problematic due to the complexity of the build plus the performance overhead of the native switch.
This release includes a major rewrite that removes the native code and now only uses the bytecode instrumentation to achieve the same result.
Not only it helped us to reduce the complexity of the project (both build-wise and code-wise, making it easier for potential contributors to submit their changes), but the performance was improved significantly!
Before:
Benchmark Mode Cnt Score Error Units
BlockHoundBenchmark.baselineBlockingCallInBlockingThread avgt 9 0,520 ยฑ 0,028 us/op
BlockHoundBenchmark.measureBlockingCallInBlockingThread avgt 9 0,853 ยฑ 0,040 us/op
BlockHoundBenchmark.measureAllowedBlockingCall avgt 9 3,039 ยฑ 0,145 us/op
After:
Benchmark Mode Cnt Score Error Units
BlockHoundBenchmark.measureBlockingCallInBlockingThread avgt 9 0,528 ยฑ 0,025 us/op
BlockHoundBenchmark.measureAllowedBlockingCall avgt 9 0,538 ยฑ 0,037 us/op
If a blocking call in non-non-blocking thread was previously having an overhead of ~0,320us/op, it is now close to 0,010us/op, which is already a great improvement!
But, there was a case where the implementation detail of BlockHound was adding even more overhead - allowed blocked calls (logging, class loading, etc etc).
And, if before it was ~2,500us/op, it went down to ~0,020us/op ๐
ThreadLocal
-based API (#46) @bsideupThreadLocal
instead of the tags to store the non-blocking marker (#45) @bsideupPublished by release-drafter[bot] about 5 years ago
Published by release-drafter[bot] over 5 years ago
ConcurrentHashMap#initTable
(#34) @bsideupPublished by release-drafter[bot] over 5 years ago
reactor.blockhound
. (#28) @bsideupReactorIntegration
on Reactor 3.3.x since it got a built-in one (#29) @bsideupPublished by release-drafter[bot] over 5 years ago
โ ๏ธ Gradle users are advised to add
testCompile 'org.junit.platform:junit-platform-launcher'
due to a bug in Gradle
Published by bsideup over 5 years ago