I want to measure memory usage for each thread within process. Is it possible? I'm trying to figure out which thread leaks memory.
Edit 1. The pmap for leaking process shows ~600 allocation by [ anon ]
...
63b00000 772K rw--- [ anon ]
63bc1000 252K ----- [ anon ]
63c00000 772K rw--- [ anon ]
63cc1000 252K ----- [ anon ]
63d00000 772K rw--- [ anon ]
...
Advice on what to do next?
Edit 2. Only virtual memory is leaking e.g. physical memory usage is stable.
No this isn't possible, because memory isn't attached to a thread but to the process. There is no link between a thread and some part of the memory.
What you seem to need is a profiler, which would point to the allocation points. One of them (didn't use it in the last decade) is Rational Purify.
You generally can't identify the memory usage of a thread because memory ownership can freely move between threads. The kernel mapping tables will show you the usage of the process as a whole, i.e. the memory allocated for all threads.
Thread programming is hard. Unless you really need to freely share pointers and memory between threads - which is a fairly nasty code smell - it will probably be easier to debug if you rework your program as a flock of processes that communicate over IPC, which will also force you to consider which state needs to be shared. As a bonus, if the leaky process turns out to be a relatively short-lived one, the memory is returned to the system on exit()
without you having to locate and patch the leak.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With