Go to file
agonigberg 3288cacf8d Pluggable resource leak detector
Allow users of Netty to plug in their own leak detector for the purpose
of instrumentation.

Motivation:

We are rolling out a large Netty deployment and want to be able to
track the amount of leaks we're seeing in production via custom
instrumentation. In order to achieve this today, I had to plug in a
custom `ByteBufAllocator` into the bootstrap and have it initialize a
custom `ResourceLeakDetector`. Due to these classes mostly being marked
`final` or having private or static methods, a lot of the code had to
be copy-pasted and it's quite ugly.

Modifications:

* I've added a static loader method for the `ResourceLeakDetector` in
`AbstractByteBuf` that tries to instantiate the class passed in via the
`-Dio.netty.customResourceLeakDetector`, otherwise falling back to the
default one.
* I've modified `ResourceLeakDetector` to be non-final and to have the
reporting broken out in to methods that can be overridden.

Result:

You can instrument leaks in your application by just adding something
like the following:

```java
public class InstrumentedResourceLeakDetector<T> extends
ResourceLeakDetector<T> {

    @Monitor("InstanceLeakCounter")
    private final AtomicInteger instancesLeakCounter;

    @Monitor("LeakCounter")
    private final AtomicInteger leakCounter;

    public InstrumentedResourceLeakDetector(Class<T> resource) {
        super(resource);
        this.instancesLeakCounter = new AtomicInteger();
        this.leakCounter = new AtomicInteger();
    }

    @Override
    protected void reportTracedLeak(String records) {
        super.reportTracedLeak(records);
        leakCounter.incrementAndGet();
    }

    @Override
    protected void reportUntracedLeak() {
        super.reportUntracedLeak();
        leakCounter.incrementAndGet();
    }

    @Override
    protected void reportInstancesLeak() {
        super.reportInstancesLeak();
        instancesLeakCounter.incrementAndGet();
    }
}
```
2016-06-20 11:14:44 +02:00
all [maven-release-plugin] prepare for next development iteration 2016-06-07 18:52:34 +02:00
buffer Pluggable resource leak detector 2016-06-20 11:14:44 +02:00
codec Use shaded dependency on JCTools instead of copy and paste 2016-06-10 13:19:45 +02:00
codec-dns Pluggable resource leak detector 2016-06-20 11:14:44 +02:00
codec-haproxy [maven-release-plugin] prepare for next development iteration 2016-06-07 18:52:34 +02:00
codec-http HttpContentDecompressor should change decompressed requests to chunked encoding. Fixes issue #5428 2016-06-20 07:43:06 +02:00
codec-http2 Use shaded dependency on JCTools instead of copy and paste 2016-06-10 13:19:45 +02:00
codec-memcache [maven-release-plugin] prepare for next development iteration 2016-06-07 18:52:34 +02:00
codec-mqtt Fix typo in the assert description in MqttCodecTest 2016-06-14 23:31:53 -07:00
codec-redis [maven-release-plugin] prepare for next development iteration 2016-06-07 18:52:34 +02:00
codec-smtp [maven-release-plugin] prepare for next development iteration 2016-06-07 18:52:34 +02:00
codec-socks [maven-release-plugin] prepare for next development iteration 2016-06-07 18:52:34 +02:00
codec-stomp [maven-release-plugin] prepare for next development iteration 2016-06-07 18:52:34 +02:00
codec-xml [maven-release-plugin] prepare for next development iteration 2016-06-07 18:52:34 +02:00
common Pluggable resource leak detector 2016-06-20 11:14:44 +02:00
example Ensure examples are runnable in the ide 2016-06-20 07:11:29 +02:00
handler Correctly support SSLSession.getId() when using OpenSslEngine 2016-06-20 09:34:54 +02:00
handler-proxy Use shaded dependency on JCTools instead of copy and paste 2016-06-10 13:19:45 +02:00
license added support for Protobuf codec nano runtime 2016-01-19 21:39:17 +01:00
microbench [maven-release-plugin] prepare for next development iteration 2016-06-07 18:52:34 +02:00
resolver [maven-release-plugin] prepare for next development iteration 2016-06-07 18:52:34 +02:00
resolver-dns [#5391] DnsNameResolver does not resolve property A+CNAME answer 2016-06-20 07:13:00 +02:00
tarball [maven-release-plugin] prepare for next development iteration 2016-06-07 18:52:34 +02:00
testsuite [maven-release-plugin] prepare for next development iteration 2016-06-07 18:52:34 +02:00
testsuite-osgi [maven-release-plugin] prepare for next development iteration 2016-06-07 18:52:34 +02:00
transport Fix typo in log message 2016-06-17 06:23:00 +02:00
transport-native-epoll Remove unused method from native epoll 2016-06-15 09:51:58 -07:00
transport-rxtx Use shaded dependency on JCTools instead of copy and paste 2016-06-10 13:19:45 +02:00
transport-sctp Use shaded dependency on JCTools instead of copy and paste 2016-06-10 13:19:45 +02:00
transport-udt [maven-release-plugin] prepare for next development iteration 2016-06-07 18:52:34 +02:00
.fbprefs Updated Find Bugs configuration 2009-03-04 10:33:09 +00:00
.gitignore Use shaded dependency on JCTools instead of copy and paste 2016-06-10 13:19:45 +02:00
.travis.yml Travis CI branch whitelisting 2013-03-11 09:55:43 +09:00
CONTRIBUTING.md Move the pull request guide to the developer guide 2014-03-12 13:13:58 +09:00
LICENSE.txt Relicensed to Apache License v2 2009-08-28 07:15:49 +00:00
NOTICE.txt added support for Protobuf codec nano runtime 2016-01-19 21:39:17 +01:00
pom.xml Correctly handle user home directory with spaces when construct javaagent argument 2016-06-17 06:33:10 +02:00
README.md Updating Branches to look section to match the current branching structure of the project 2016-03-10 22:08:01 +01:00
run-example.sh Add an example client for codec-redis 2016-04-23 11:18:12 -07:00

Netty Project

Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients.

How to build

For the detailed information about building and developing Netty, please visit the developer guide. This page only gives very basic information.

You require the following to build Netty:

Note that this is build-time requirement. JDK 5 (for 3.x) or 6 (for 4.0+) is enough to run your Netty-based application.

Branches to look

Development of all versions takes place in each branch whose name is identical to <majorVersion>.<minorVersion>. For example, the development of 3.9 and 4.0 resides in the branch '3.9' and the branch '4.0' respectively.