Couple of ideas are obviously to use tcmalloc or something like this:
http://man7.org/linux/man-pages/man3/malloc_hook.3.html
However these are live game instances running on a server somewhere in Germany (for example), and it's not easy to restart and preload DSOs. People playing on that server tend to frown upon this behavior also. :)
Came up with the idea to try using gdb to connect, set a breakpoint and log the next X hundred of the callstacks to a logfile. Script is down below. I've tried it on glxspheres and it seems like it'll work. I'm sure others have done this - if so and you have any comments / suggestions, please let me know.
# # Use via something like this: # gdb -x ~/bin/spewmallocscript.gdb --pid=$(pidof glxspheres64) # # Make sure we never get asked y/n set pagination off # Overwrite logfile set logging overwrite on set logging file /tmp/gdb_malloc_calls.txt set logging on printf "\n\nSetting malloc breakpoint\n" break malloc set $i=0 set $count=100 printf "Logging %d callstacks...\n\n", $count # add command for malloc breakpoint commands silent bt 16 if $i < $count printf "\ncall #%d:\n", $i set $i=$i+1 else set logging redirect off quit end c end # send output to log file only set logging redirect on c
No comments:
Post a Comment