mirror of
https://github.com/ntop/ntopng.git
synced 2026-04-29 07:29:32 +00:00
76 lines
2.4 KiB
Markdown
76 lines
2.4 KiB
Markdown
## Introduction and Prerequisites
|
|
|
|
ntopng can be built with the support for the LLVM leaks sanitizer (https://clang.llvm.org/docs/LeakSanitizer.html).
|
|
On Ubuntu you can install it with
|
|
|
|
```
|
|
sudo apt-get install -y clang-10 clang-tools-10
|
|
```
|
|
|
|
## Compilation
|
|
|
|
Then you need to compile ntopng as follows
|
|
|
|
```
|
|
cd ~/ntopng
|
|
./autogen.sh && ./configure --with-sanitizer
|
|
make
|
|
```
|
|
|
|
If you want to use nDPI with leak detection support you need to do
|
|
|
|
```
|
|
cd ~/nDPI
|
|
./configure --with-sanitizer
|
|
make
|
|
```
|
|
|
|
## Running
|
|
|
|
In order to enable the leaks sanitizer, it is necessary to set the `ASAN_OPTIONS=detect_leaks=1`
|
|
environment variable, for example with:
|
|
|
|
```
|
|
sudo ASAN_OPTIONS=detect_leaks=1 LSAN_OPTIONS=verbosity=1 ./ntopng -i enp6s0f1 --dont-change-user
|
|
```
|
|
|
|
it is important to use --dont-change-user as otherwise the leak detection will fail with the following error
|
|
|
|
```
|
|
==32547==LeakSanitizer has encountered a fatal error.
|
|
==32547==HINT: For debugging, try setting environment variable LSAN_OPTIONS=verbosity=1:log_threads=1
|
|
==32547==HINT: LeakSanitizer does not work under ptrace (strace, gdb, etc)
|
|
```
|
|
|
|
## Leak Analysis
|
|
|
|
In case there are some leaks detected, when killing (nicely) ntopng, a memore leak log (note tht no leaks no log is generated) is produced. The log contains lines as the one below specifying where the memory leak has been encountered:
|
|
|
|
```
|
|
Direct leak of 8 byte(s) in 1 object(s) allocated from:
|
|
#0 0x4a175d in malloc (/home/ntop/ntopng/ntopng+0x4a175d)
|
|
#1 0x7f0b3ef0438b in pcap_create_interface /home/ntop/PF_RING/userland/libpcap/./pcap-linux.c:493
|
|
#2 0x6220000041e3 (<unknown module>)
|
|
```
|
|
|
|
If the `llvm-symbolizer` is not available in the `PATH`, the the output will only show addresses rather than the actual line numbers useful to track leaks:
|
|
|
|
```
|
|
Direct leak of 820 byte(s) in 1 object(s) allocated from:
|
|
#0 0x478ec0 (/home/simone/ntopng/ntopng+0x478ec0)
|
|
#1 0x8601fb (/home/simone/ntopng/ntopng+0x8601fb)
|
|
#2 0xcbe58e (/home/simone/ntopng/ntopng+0xcbe58e)
|
|
#3 0xbd2e1d (/home/simone/ntopng/ntopng+0xbd2e1d)
|
|
```
|
|
|
|
In this case, it suffices to add `llvm-symbolizer` to the `PATH`, e.g.,
|
|
|
|
```
|
|
simone@devel:/usr/bin$ sudo ln -s ../lib/llvm-3.8/bin/llvm-symbolizer llvm-symbolizer
|
|
```
|
|
|
|
## Notes
|
|
|
|
The leak detector also identifies invalid memory accesses. The performance impact of running the address sanitizer is about
|
|
a 2x slowdown (https://clang.llvm.org/docs/AddressSanitizer.html).
|
|
|