Apakah ada cara untuk program Python untuk menentukan berapa banyak memori yang sedang digunakan? Saya telah melihat diskusi tentang penggunaan memori untuk satu objek, tetapi yang saya butuhkan adalah penggunaan memori total untuk proses tersebut, sehingga saya dapat menentukan kapan perlu untuk mulai membuang data yang di-cache.
python
memory-management
rwallace
sumber
sumber
psutil
adalah lintas platform dan dapat mengembalikan nilai yang sama denganps
alat baris perintah: pythonhosted.org/psutil/#psutil.Process.memory_infopsutil
) saat ini mendukung Linux, Windows, OSX, FreeBSD dan Sun Solaris, keduanya arsitektur 32-bit dan 64-bit, dengan versi Python dari 2,6 hingga 3,4" dari Dokumentasipsutil
,psutil.Process()
setara denganpsutil.Process(os.getpid())
. Itu satu hal lagi yang perlu Anda ingat untuk mengetik.Untuk sistem berbasis Unix (Linux, Mac OS X, Solaris), Anda dapat menggunakan
getrusage()
fungsi dari modul perpustakaan standarresource
. Objek yang dihasilkan memiliki atributru_maxrss
, yang memberikan penggunaan memori puncak untuk proses panggilan:Dokumen Python tidak mencatat unit. Lihat
man getrusage.2
halaman sistem spesifik Anda untuk memeriksa unit untuk nilainya. Pada Ubuntu 18.04, unit dicatat sebagai kilobyte. Di Mac OS X, ini byte.The
getrusage()
fungsi juga dapat diberikanresource.RUSAGE_CHILDREN
untuk mendapatkan penggunaan untuk proses anak, dan (pada beberapa sistem)resource.RUSAGE_BOTH
total (diri dan anak) penggunaan proses.Jika Anda hanya peduli dengan Linux, Anda dapat membaca file
/proc/self/status
atau/proc/self/statm
sebagai alternatif yang dijelaskan dalam jawaban lain untuk pertanyaan ini dan yang ini juga.sumber
Di Windows, Anda dapat menggunakan WMI ( beranda , cheeseshop ):
Di Linux (dari python cookbook http://code.activestate.com/recipes/286222/ :
sumber
return int(result[0].WorkingSet)
Pada unix, Anda dapat menggunakan
ps
alat untuk memonitornya:di mana 1347 adalah beberapa id proses. Juga, hasilnya adalah dalam MB.
sumber
Penggunaan memori saat ini dari proses saat ini di Linux , untuk Python 2 , Python 3 , dan pypy , tanpa impor apa pun:
Itu membaca file status dari proses saat ini, mengambil semuanya setelah itu
VmRSS:
, kemudian mengambil segalanya sebelum baris baru pertama (mengisolasi nilai VmRSS), dan akhirnya memotong 3 byte terakhir yang merupakan ruang dan unit (kB).Untuk kembali, ia menghapus spasi dan mengembalikannya sebagai angka.
Diuji pada Linux 4.4 dan 4.9, tetapi bahkan versi Linux awal harus berfungsi: mencari
man proc
dan mencari info pada/proc/$PID/status
file, ia menyebutkan versi minimum untuk beberapa bidang (seperti Linux 2.6.10 untuk "VmPTE"), tetapi "VmRSS "bidang (yang saya gunakan di sini) tidak disebutkan. Karena itu saya menganggap sudah ada di sana sejak versi awal.sumber
Saya suka itu , terima kasih untuk @bayer. Saya mendapatkan alat hitung proses tertentu, sekarang.
Lampirkan daftar proses saya.
Referensi
sumber
ps aux | awk '/python/{sum+=$6}; END {print sum/1024 " MB"}'
Untuk Python 3.6 dan psutil 5.4.5 lebih mudah untuk menggunakan
memory_percent()
fungsi yang tercantum di sini .sumber
Bahkan lebih mudah digunakan daripada
/proc/self/status
:/proc/self/statm
. Ini hanya daftar terbatas beberapa ruang statistik . Saya belum bisa memastikan apakah kedua file selalu ada.Berikut ini contoh sederhana:
Itu menghasilkan daftar yang terlihat seperti ini:
Anda dapat melihat bahwa itu melonjak sekitar 300.000 byte setelah sekitar 3 alokasi 100.000 byte.
sumber
Di bawah ini adalah dekorator fungsi saya yang memungkinkan untuk melacak berapa banyak memori yang digunakan proses ini sebelum panggilan fungsi, berapa banyak memori yang digunakan setelah panggilan fungsi, dan berapa lama fungsi ini dijalankan.
Jadi, ketika Anda memiliki beberapa fungsi yang dihiasi dengannya
Anda akan dapat melihat output ini:
sumber
sumber
Untuk perintah sistem Unix
time
(/ usr / bin / time) memberi Anda info itu jika Anda lulus -v. Lihat diMaximum resident set size
bawah ini, yang merupakan memori maksimum (puncak) nyata (bukan virtual) yang digunakan selama eksekusi program :sumber
time
bukan/usr/bin/time
. Lihat: askubuntu.com/questions/434289/...Menggunakan sh dan os untuk masuk ke jawaban python bayer.
Jawabannya dalam megabita.
sumber