Saya ingin tahu penggunaan memori aplikasi Python saya dan secara khusus ingin tahu blok kode apa / bagian atau objek yang menghabiskan sebagian besar memori. Pencarian Google menunjukkan yang komersial adalah Python Memory Validator (hanya Windows).
Dan yang open source adalah PySizer dan Heapy .
Saya belum mencoba siapa pun, jadi saya ingin tahu yang mana yang terbaik mempertimbangkan:
Memberikan sebagian besar detail.
Saya harus melakukan sedikit atau tidak ada perubahan pada kode saya.
python
performance
memory-management
profiling
Anurag Uniyal
sumber
sumber
Jawaban:
Heapy cukup mudah digunakan. Pada titik tertentu dalam kode Anda, Anda harus menulis yang berikut ini:
Ini memberi Anda beberapa output seperti ini:
Anda juga dapat mencari tahu dari mana objek direferensikan dan mendapatkan statistik tentang itu, tetapi entah bagaimana dokumen yang agak jarang.
Ada juga browser grafis, yang ditulis dalam Tk.
sumber
pip install https://guppy-pe.svn.sourceforge.net/svnroot/guppy-pe/trunk/guppy
boost::python
objek, akan menyenangkan untuk melihat beberapa contoh!Karena tidak ada yang menyebutkannya, saya akan menunjuk ke module memory_profiler saya yang mampu mencetak laporan baris demi baris penggunaan memori dan bekerja pada Unix dan Windows (perlu psutil pada yang terakhir ini). Keluaran tidak terlalu rinci tetapi tujuannya adalah untuk memberi Anda gambaran di mana kode memakan lebih banyak memori dan bukan analisis lengkap tentang objek yang dialokasikan.
Setelah mendekorasi fungsi Anda dengan
@profile
dan menjalankan kode Anda dengan-m memory_profiler
bendera itu akan mencetak laporan baris-demi-baris seperti ini:sumber
memory_profiler
buffer outputnya? Saya mungkin melakukan sesuatu yang salah, tetapi tampaknya alih-alih membuang profil untuk suatu fungsi ketika selesai, ia menunggu skrip berakhir.Saya merekomendasikan Dowser . Pengaturannya sangat mudah, dan Anda perlu nol perubahan pada kode Anda. Anda dapat melihat jumlah objek dari setiap jenis melalui waktu, melihat daftar objek hidup, melihat referensi ke objek hidup, semua dari antarmuka web sederhana.
Anda mengimpor memdebug, dan memanggil memdebug.start. Itu saja.
Saya belum mencoba PySizer atau Heapy. Saya akan menghargai ulasan orang lain.
MEMPERBARUI
Kode di atas adalah untuk
CherryPy 2.X
,CherryPy 3.X
yangserver.quickstart
metode telah dihapus danengine.start
tidak mengambilblocking
bendera. Jadi, jika Anda menggunakanCherryPy 3.X
sumber
Pertimbangkan perpustakaan objgraph (lihathttp://www.lshift.net/blog/2008/11/14/tracing-python-memory-leaks untuk contoh kasus penggunaan).
sumber
objgraph.by_type('dict')
memahami dari mana semuadict
benda tak terduga itu berasal.Muppy adalah (yang lain) Memory Usage Profiler untuk Python. Fokus dari perangkat ini diletakkan pada identifikasi kebocoran memori.
Muppy mencoba membantu pengembang untuk mengidentifikasi kebocoran memori aplikasi Python. Ini memungkinkan pelacakan penggunaan memori selama runtime dan identifikasi objek yang bocor. Selain itu, alat disediakan yang memungkinkan untuk menemukan sumber objek yang tidak dirilis.
sumber
Saya sedang mengembangkan memory profiler untuk Python yang disebut memprof:
http://jmdana.github.io/memprof/
Ini memungkinkan Anda untuk mencatat dan memplot penggunaan memori variabel Anda selama eksekusi metode yang didekorasi. Anda hanya perlu mengimpor perpustakaan menggunakan:
Dan hiasi metode Anda menggunakan:
Ini adalah contoh bagaimana plot terlihat:
Proyek ini dihosting di GitHub:
https://github.com/jmdana/memprof
sumber
a
,b
danc
adalah nama-nama variabel. Anda dapat menemukan dokumentasinya di github.com/jmdana/memprof . Jika Anda memiliki pertanyaan, jangan ragu untuk mengirimkan masalah di github atau mengirim email ke milis yang dapat ditemukan dalam dokumentasi.Saya menemukan meliae jauh lebih fungsional daripada Heapy atau PySizer. Jika Anda menjalankan websi wsgi, Dozer adalah pembungkus middleware Dowser yang bagus
sumber
Coba juga proyek pytracemalloc yang menyediakan penggunaan memori per nomor baris Python.
EDIT (2014/04): Sekarang memiliki Qt GUI untuk menganalisis foto.
sumber
tracemalloc
sekarang menjadi bagian dari pustaka standar python. Lihat docs.python.org/3/library/tracemalloc.html