Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I analyze a file created with pstats.dump_stats(filename) off line?

Tags:

I have essentially done the following:

import cProfile, pstats, StringIO pr = cProfile.Profile() pr.enable() # ... my code did something ... pr.disable() s = StringIO.StringIO() sortby = 'cumulative' ps = pstats.Stats(pr, stream=s).sort_stats(sortby)  ps.dump_stats('stats.dmp')  # dump the stats to a file named stats.dmp 

So now i have the file named 'stats.dmp' stored offline.

How can i use pstats to analyze this file for human consumption?

Thanks in advance.

like image 323
Love and peace - Joe Codeswell Avatar asked Apr 14 '15 14:04

Love and peace - Joe Codeswell


People also ask

Which tool will analyze the data collected by the Python profiler?

Python Profilers, like cProfile helps to find which part of the program or code takes more time to run. This article will walk you through the process of using cProfile module for extracting profiling data, using the pstats module to report it and snakeviz for visualization.


2 Answers

Here's what i found out and the Python program I generated. I tested this with a .dmp file made on linux & analyzed on windows xp. It worked FINE. The Python file is named, "analyze_dmp.py".

#!/usr/local/bin/python2.7 # -*- coding: UTF-8 -*- """analyze_dmp.py takes the file INFILEPATH [a pstats dump file] Producing OUTFILEPATH [a human readable python profile] Usage:   analyze_dmp.py INFILEPATH  OUTFILEPATH Example: analyze_dmp.py stats.dmp   stats.log """ # -------------------------------------------------------------------------- # Copyright (c) 2019 Joe Dorocak  (joeCodeswell at gmail dot com) # Distributed under the MIT/X11 software license, see the accompanying # file license.txt or http://www.opensource.org/licenses/mit-license.php. # -------------------------------------------------------------------------- # I added the above License by request here are my research links #    https://meta.stackexchange.com/q/18883/311363 #    https://meta.stackexchange.com/q/128840/311363 #    https://codereview.stackexchange.com/q/10746  import sys, os import cProfile, pstats, StringIO  def analyze_dmp(myinfilepath='stats.dmp', myoutfilepath='stats.log'):     out_stream = open(myoutfilepath, 'w')     ps = pstats.Stats(myinfilepath, stream=out_stream)     sortby = 'cumulative'      ps.strip_dirs().sort_stats(sortby).print_stats(.3)  # plink around with this to get the results you need  NUM_ARGS = 2 def main():     args = sys.argv[1:]     if len(args) != NUM_ARGS or "-h" in args or "--help" in args:         print __doc__         s = raw_input('hit return to quit')         sys.exit(2)     analyze_dmp(myinfilepath=args[0], myoutfilepath=args[1])  if __name__ == '__main__':     main() 
like image 192
Love and peace - Joe Codeswell Avatar answered Sep 30 '22 19:09

Love and peace - Joe Codeswell


You can try snakeviz https://jiffyclub.github.io/snakeviz

It is a browser based graphical viewer for the output of Python’s cProfile module and an alternative to using the standard library pstats module.

# to install it with pip pip install snakeviz  # once installed, you can use snakeviz to view the file snakeviz /path/to/your/dump/pstat/file 

Here is a sample image for a visualized pstat file you can dump like above.

enter image description here

like image 44
nybon Avatar answered Sep 30 '22 20:09

nybon