diff options
author | Tim Laszlo <tim.laszlo@gmail.com> | 2010-10-27 10:58:56 -0500 |
---|---|---|
committer | Tim Laszlo <tim.laszlo@gmail.com> | 2010-10-27 11:00:10 -0500 |
commit | d1527d8991bff83a3d6ba18e3de258993722f459 (patch) | |
tree | a2cb7f543a6a7d00df08144fa426fae65579c05c /src/lib | |
parent | 93f8ad89b0f74322348976efef9f74ffc31ee9d0 (diff) | |
download | bcfg2-d1527d8991bff83a3d6ba18e3de258993722f459.tar.gz bcfg2-d1527d8991bff83a3d6ba18e3de258993722f459.tar.bz2 bcfg2-d1527d8991bff83a3d6ba18e3de258993722f459.zip |
Guppy.py: New plugin to help trace memory leaks
(cherry picked from commit 4be21b7fbb93c3552713ab9914114fbe0068b93d)
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/Server/Plugins/Guppy.py | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/lib/Server/Plugins/Guppy.py b/src/lib/Server/Plugins/Guppy.py new file mode 100644 index 000000000..b217378d6 --- /dev/null +++ b/src/lib/Server/Plugins/Guppy.py @@ -0,0 +1,63 @@ +""" +This plugin is used to trace memory leaks within the bcfg2-server +process using Guppy. By default the remote debugger is started +when this plugin is enabled. The debugger can be shutoff in a running +process using "bcfg2-admin xcmd Guppy.Disable" and reenabled using +"bcfg2-admin xcmd Guppy.Enable". + +To attach the console run: + +python -c "from guppy import hpy;hpy().monitor()" + +For example: + +# python -c "from guppy import hpy;hpy().monitor()" +<Monitor> +*** Connection 1 opened *** +<Monitor> lc +CID PID ARGV + 1 25063 ['/usr/sbin/bcfg2-server', '-D', '/var/run/bcfg2-server.pid'] +<Monitor> sc 1 +Remote connection 1. To return to Monitor, type <Ctrl-C> or .<RETURN> +<Annex> int +Remote interactive console. To return to Annex, type '-'. +>>> hp.heap() +... + + +""" +import re +import Bcfg2.Server.Plugin + +class Guppy(Bcfg2.Server.Plugin.Plugin): + """Guppy is a debugging plugin to help trace memory leaks""" + name = 'Guppy' + __version__ = '$Id$' + __author__ = 'bcfg-dev@mcs.anl.gov' + + experimental = True + __rmi__ = Bcfg2.Server.Plugin.Plugin.__rmi__ + ['Enable','Disable'] + + def __init__(self, core, datastore): + Bcfg2.Server.Plugin.Plugin.__init__(self, core, datastore) + + self.Enable() + + def Enable(self): + """Enable remote debugging""" + try: + from guppy.heapy import Remote + Remote.on() + except: + self.logger.error("Failed to create Heapy context") + raise Bcfg2.Server.Plugin.PluginInitError + + def Disable(self): + """Disable remote debugging""" + try: + from guppy.heapy import Remote + Remote.off() + except: + self.logger.error("Failed to disable Heapy") + raise Bcfg2.Server.Plugin.PluginInitError + |