This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: thread heap leak?


On Mon, 01 Apr 2019 10:19:53 +0200
Andreas Schwab <schwab@suse.de> wrote:

> On Mär 31 2019, David Muse <david.muse@firstworks.com> wrote:
> 
> > Yeah, that is what it looks like, but where did the 3rd thread stack come from?  As far as I can tell, no thread created it.
> 
> Try using `strace -k -e mmap' to see where the mapping is created.
> 
> Andreas.
> 
> -- 
> Andreas Schwab, SUSE Labs, schwab@suse.de
> GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
> "And now for something completely different."
> 

Thanks for the strace tip Andreas.  I built strace-5.0 with --enable-stacktrace=yes --with-libunwind, and I get the following mmap calls when I use it:

(numbered by me)

1  - mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2ac55d978000
2  - mmap(0x2ac55e050000, 13472, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2ac55e050000
3  - mmap(0x2ac55e25e000, 184832, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2ac55e25e000
4  - mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2ac55d97a000
5  - mmap(0x2ac55eadc000, 12320, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2ac55eadc000
6  - mmap(0x2ac55f426000, 14336, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2ac55f426000
7  - mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2ac55d97c000
8  - mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2ac55d97e000
9  - mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2ac55d980000
10 - mmap(NULL, 2101248, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x2ac55f42a000
11 - mmap(NULL, 2101248, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x2ac55f62b000
12 - mmap(NULL, 2101248, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x2ac55f82c000
13 - mmap(NULL, 2101248, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x2ac55fa2d000
14 - mmap(NULL, 2101248, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x2ac55fc2e000
15 - mmap(NULL, 2101248, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x2ac574000000
16 - mmap(NULL, 2101248, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x2ac574201000
17 - mmap(NULL, 2101248, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x2ac574402000
18 - mmap(NULL, 2101248, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x2ac574603000
19 - mmap(NULL, 2101248, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x2ac574804000
20 - mmap(NULL, 2101248, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x2ac574a05000
21 - mmap(NULL, 2101248, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x2ac574c06000
22 - mmap(NULL, 2101248, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x2ac574e07000
23 - mmap(NULL, 2101248, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x2ac575008000
24 - mmap(NULL, 2101248, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x2ac575209000
25 - mmap(NULL, 2101248, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x2ac57540a000
26 - mmap(NULL, 2101248, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x2ac57560b000
27 - mmap(NULL, 2101248, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x2ac57580c000

I can correlate call number 6 and calls numbered 10-27 with the process map.  Presumedly, 1-5 and 7-9 were unmapped.  10-27 appear to be thread stacks, considering their size, and that they were called with the MAP_STACK option :)

2ac55f426000-2ac55f42a000 rw-p 00000000 00:00 0 -  6
2ac55f42a000-2ac55f42b000 ---p 00000000 00:00 0  - 10
2ac55f42b000-2ac55f62b000 rw-p 00000000 00:00 0 
2ac55f62b000-2ac55f62c000 ---p 00000000 00:00 0  - 11
2ac55f62c000-2ac55f82c000 rw-p 00000000 00:00 0 
2ac55f82c000-2ac55f82d000 ---p 00000000 00:00 0  - 12
2ac55f82d000-2ac55fa2d000 rw-p 00000000 00:00 0
2ac55fa2d000-2ac55fa2e000 ---p 00000000 00:00 0  - 13
2ac55fa2e000-2ac55fc2e000 rw-p 00000000 00:00 0
2ac55fc2e000-2ac55fc2f000 ---p 00000000 00:00 0  - 14
2ac55fc2f000-2ac55fe2f000 rw-p 00000000 00:00 0 
2ac560000000-2ac56002b000 rw-p 00000000 00:00 0 
2ac56002b000-2ac564000000 ---p 00000000 00:00 0 
2ac564000000-2ac564021000 rw-p 00000000 00:00 0 
2ac564021000-2ac568000000 ---p 00000000 00:00 0 
2ac568000000-2ac56807f000 rw-p 00000000 00:00 0 
2ac56807f000-2ac56c000000 ---p 00000000 00:00 0 
2ac56c000000-2ac56c021000 rw-p 00000000 00:00 0 
2ac56c021000-2ac570000000 ---p 00000000 00:00 0 
2ac570000000-2ac570021000 rw-p 00000000 00:00 0 
2ac570021000-2ac574000000 ---p 00000000 00:00 0
2ac574000000-2ac574001000 ---p 00000000 00:00 0 - 15
2ac574001000-2ac574201000 rw-p 00000000 00:00 0
2ac574201000-2ac574202000 ---p 00000000 00:00 0 - 16
2ac574202000-2ac574402000 rw-p 00000000 00:00 0
2ac574402000-2ac574403000 ---p 00000000 00:00 0 - 17
2ac574403000-2ac574603000 rw-p 00000000 00:00 0
2ac574603000-2ac574604000 ---p 00000000 00:00 0 - 18
2ac574604000-2ac574804000 rw-p 00000000 00:00 0
2ac574804000-2ac574805000 ---p 00000000 00:00 0 - 19
2ac574805000-2ac574a05000 rw-p 00000000 00:00 0
2ac574a05000-2ac574a06000 ---p 00000000 00:00 0 - 20
2ac574a06000-2ac574c06000 rw-p 00000000 00:00 0
2ac574c06000-2ac574c07000 ---p 00000000 00:00 0 - 21
2ac574c07000-2ac574e07000 rw-p 00000000 00:00 0
2ac574e07000-2ac574e08000 ---p 00000000 00:00 0 - 22
2ac574e08000-2ac575008000 rw-p 00000000 00:00 0
2ac575008000-2ac575009000 ---p 00000000 00:00 0 - 23
2ac575009000-2ac575209000 rw-p 00000000 00:00 0
2ac575209000-2ac57520a000 ---p 00000000 00:00 0 - 24
2ac57520a000-2ac57540a000 rw-p 00000000 00:00 0
2ac57540a000-2ac57540b000 ---p 00000000 00:00 0 - 25
2ac57540b000-2ac57560b000 rw-p 00000000 00:00 0
2ac57560b000-2ac57560c000 ---p 00000000 00:00 0 - 26
2ac57560c000-2ac57580c000 rw-p 00000000 00:00 0
2ac57580c000-2ac57580d000 ---p 00000000 00:00 0 - 27
2ac57580d000-2ac575a0d000 rw-p 00000000 00:00 0 
2ac578000000-2ac5780a6000 rw-p 00000000 00:00 0 
2ac5780a6000-2ac57c000000 ---p 00000000 00:00 0 
2ac57c000000-2ac57c098000 rw-p 00000000 00:00 0 
2ac57c098000-2ac580000000 ---p 00000000 00:00 0 
2ac580000000-2ac5800a6000 rw-p 00000000 00:00 0 
2ac5800a6000-2ac584000000 ---p 00000000 00:00 0 
2ac584000000-2ac584037000 rw-p 00000000 00:00 0 
2ac584037000-2ac588000000 ---p 00000000 00:00 0 
2ac588000000-2ac58802a000 rw-p 00000000 00:00 0 
2ac58802a000-2ac58c000000 ---p 00000000 00:00 0 
2ac58c000000-2ac58c098000 rw-p 00000000 00:00 0 
2ac58c098000-2ac590000000 ---p 00000000 00:00 0 
2ac590000000-2ac5900e9000 rw-p 00000000 00:00 0 
2ac5900e9000-2ac594000000 ---p 00000000 00:00 0 
2ac594000000-2ac594084000 rw-p 00000000 00:00 0 
2ac594084000-2ac598000000 ---p 00000000 00:00 0 
2ac598000000-2ac598098000 rw-p 00000000 00:00 0 
2ac598098000-2ac59c000000 ---p 00000000 00:00 0 
2ac59c000000-2ac59c0a5000 rw-p 00000000 00:00 0 
2ac59c0a5000-2ac5a0000000 ---p 00000000 00:00 0 
2ac5a0000000-2ac5a0021000 rw-p 00000000 00:00 0 
2ac5a0021000-2ac5a4000000 ---p 00000000 00:00 0 
2ac5a4000000-2ac5a40a2000 rw-p 00000000 00:00 0 
2ac5a40a2000-2ac5a8000000 ---p 00000000 00:00 0 
2ac5a8000000-2ac5a8021000 rw-p 00000000 00:00 0 
2ac5a8021000-2ac5ac000000 ---p 00000000 00:00 0 

However, there are still quite a few anonymous segments in there, that don't correspond to an mmap call.  Is there something else that could have created them?

Thanks,

David
david.muse@firstworks.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]