mirror of
https://github.com/nicolargo/glances.git
synced 2024-12-25 10:12:55 +03:00
Add a trace malloc test
This commit is contained in:
parent
f7971620ee
commit
74a2e6bbe8
4
Makefile
4
Makefile
@ -75,6 +75,10 @@ show-issue: venv
|
||||
profiling: venv venv-dev
|
||||
@echo "Please complete and run: sudo ./venv/bin/py-spy record -o ./docs/_static/glances-flame.svg -d 60 -s --pid <GLANCES PID>"
|
||||
|
||||
trace-malloc: venv
|
||||
@echo "Test is running, please wait ~ 30 secondes..."
|
||||
./venv/bin/python -m glances -C ./conf/glances.conf --trace-malloc --stop-after 15 --quiet
|
||||
|
||||
release-note:
|
||||
git --no-pager log $(LASTTAG)..HEAD --first-parent --pretty=format:"* %s"
|
||||
@echo "\n"
|
||||
|
@ -42,6 +42,7 @@ except ImportError:
|
||||
|
||||
# Import Glances libs
|
||||
# Note: others Glances libs will be imported optionally
|
||||
from glances.compat import PY3
|
||||
from glances.logger import logger
|
||||
from glances.main import GlancesMain
|
||||
from glances.timer import Counter
|
||||
@ -64,6 +65,9 @@ if psutil_version_info < psutil_min_version:
|
||||
print('psutil 5.3.0 or higher is needed. Glances cannot start.')
|
||||
sys.exit(1)
|
||||
|
||||
# Trac malloc is only available on Python 3.4 or higher
|
||||
if PY3:
|
||||
import tracemalloc
|
||||
|
||||
def __signal_handler(signal, frame):
|
||||
"""Callback for CTRL-C."""
|
||||
@ -81,6 +85,8 @@ def end():
|
||||
|
||||
logger.info("Glances stopped (key pressed: CTRL-C)")
|
||||
|
||||
|
||||
|
||||
# The end...
|
||||
sys.exit(0)
|
||||
|
||||
@ -91,6 +97,9 @@ def start(config, args):
|
||||
# Load mode
|
||||
global mode
|
||||
|
||||
if args.trace_malloc:
|
||||
tracemalloc.start()
|
||||
|
||||
start_duration = Counter()
|
||||
|
||||
if core.is_standalone():
|
||||
@ -118,6 +127,14 @@ def start(config, args):
|
||||
# Serve forever
|
||||
mode.serve_forever()
|
||||
|
||||
if args.trace_malloc:
|
||||
# See more options here: https://docs.python.org/3/library/tracemalloc.html
|
||||
snapshot = tracemalloc.take_snapshot()
|
||||
top_stats = snapshot.statistics("lineno")
|
||||
print("[ Trace malloc - Top 10 ]")
|
||||
for stat in top_stats[:10]:
|
||||
print(stat)
|
||||
|
||||
# Shutdown
|
||||
mode.end()
|
||||
|
||||
|
@ -24,7 +24,7 @@ import sys
|
||||
import tempfile
|
||||
|
||||
from glances import __version__, psutil_version
|
||||
from glances.compat import input, disable, enable
|
||||
from glances.compat import input, disable, enable, PY3
|
||||
from glances.config import Config
|
||||
from glances.globals import WINDOWS
|
||||
from glances.processes import sort_processes_key_list
|
||||
@ -358,6 +358,13 @@ Examples of use:
|
||||
dest='cached_time',
|
||||
help='set the server cache time [default: {} sec]'.format(self.cached_time),
|
||||
)
|
||||
parser.add_argument(
|
||||
'--stop-after',
|
||||
default=None,
|
||||
type=int,
|
||||
dest='stop_after',
|
||||
help='stop Glances after n refresh',
|
||||
)
|
||||
parser.add_argument(
|
||||
'--open-web-browser',
|
||||
action='store_true',
|
||||
@ -415,6 +422,13 @@ Examples of use:
|
||||
dest='stdout_issue',
|
||||
help='test all plugins and exit (please copy/paste the output if you open an issue)',
|
||||
)
|
||||
parser.add_argument(
|
||||
'--trace-malloc',
|
||||
default=False,
|
||||
action='store_true',
|
||||
dest='trace_malloc',
|
||||
help='test memory leak with tracemalloc (python 3.4 or higher needed)',
|
||||
)
|
||||
parser.add_argument(
|
||||
'--api-doc', default=None, action='store_true', dest='stdout_apidoc', help='display fields descriptions'
|
||||
)
|
||||
@ -667,10 +681,15 @@ Examples of use:
|
||||
sys.exit(2)
|
||||
|
||||
# Disable HDDTemp if sensors are disabled
|
||||
if getattr(args, 'disable_sensors', False):
|
||||
disable(args, 'hddtemp')
|
||||
if getattr(self.args, 'disable_sensors', False):
|
||||
disable(self.args, 'hddtemp')
|
||||
logger.debug("Sensors and HDDTemp are disabled")
|
||||
|
||||
if getattr(self.args, 'trace_malloc', True) and not PY3:
|
||||
self.args.trace_malloc = False
|
||||
logger.critical("trace_malloc is only available with Python 3")
|
||||
sys.exit(2)
|
||||
|
||||
# Let the plugins known the Glances mode
|
||||
self.args.is_standalone = self.is_standalone()
|
||||
self.args.is_client = self.is_client()
|
||||
|
@ -165,11 +165,13 @@ class GlancesStandalone(object):
|
||||
|
||||
def serve_forever(self):
|
||||
"""Wrapper to the serve_forever function."""
|
||||
# loop = True
|
||||
# while loop:
|
||||
# loop = self.__serve_once()
|
||||
while self.__serve_once():
|
||||
pass
|
||||
if self.args.stop_after:
|
||||
for _ in range(self.args.stop_after):
|
||||
if not self.__serve_once():
|
||||
break
|
||||
else:
|
||||
while self.__serve_once():
|
||||
pass
|
||||
self.end()
|
||||
|
||||
def end(self):
|
||||
|
Loading…
Reference in New Issue
Block a user