Pembangunan : Teras Osmosis : Prestasi dan Pemprofilan - drihsanmy/Osmosis-Malaysia-Translation-Team GitHub Wiki
#Pemprofilan dengan pprof
- Tanya titik akhir cpu pprof pada hos nod:
- CPU :
curl -X GET localhost:6060/debug/pprof/profile?seconds=<number> > <filename>
- Timbunan :
curl -X GET localhost:6060/debug/pprof/heap?seconds=<number> > <filename>
- Anda boleh membuat pertanyaan dari mesin tempatan anda dengan menggantikan localhost dengan IP nod, bergantung pada persediaan rangkaian anda. Dengan melakukan ini, anda boleh melangkau langkah 2.
- CPU :
- Jika bertanya pada hos nod, fail SCP diset kepada diri sendiri:
scp <filename> <user>@<host>:<path>
- Contoh
scp <filename> [email protected]:/home/roman/osmosis/pprof
- pastikan ISP atau tembok api anda tidak menyekat pemindahan fail
- Jalankan pelayan web dan buka penyemak imbas
go tool pprof -http=localhost:8080 <filename> graphviz
mesti dipasang
#Ingatan
#Punca
Perkara berikut menyebabkan masalah ingatan dalam Go: – Mencipta subrentetan dan subslices. – Penggunaan kenyataan penangguhan yang salah. – Badan tindak balas HTTP tidak tertutup (atau sumber tidak tertutup secara umum). – Rutin gantung pergi yatim piatu. – Pembolehubah global.
#Mentafsir Output
-
inuse_space
: Bermaksud pprof menunjukkan jumlah memori yang diperuntukkan dan belum dikeluarkan. -
inuse_objects
: Bermaksud pprof menunjukkan jumlah objek yang diperuntukkan dan belum dikeluarkan. -
alloc_space
: Bermaksud pprof menunjukkan jumlah memori yang diperuntukkan, tidak kira sama ada ia dikeluarkan atau tidak. -
alloc_objects
: Bermaksud pprof menunjukkan jumlah objek yang diperuntukkan, tidak kira sama ada ia dikeluarkan atau tidak. -
flat
: Mewakili memori yang diperuntukkan oleh fungsi dan masih dipegang oleh fungsi itu. -
cum
: Mewakili memori yang diperuntukkan oleh fungsi atau mana-mana fungsi lain yang dipanggil ke bawah timbunan.
#Pautan berguna
Pprof Doc
Muat turun Graphviz
Menggunakan SCP
Ceramah Pemprofilan Lanjutan Go (YouTube)
Nota daripada ceramah di atas
Senario Kebocoran Memori
Siaran blog hebat tentang timbunan profil
#Penandaarasan
#Amalan terbaik
- Menjalankan penanda aras pada mesin terbiar yang tidak berjalan menggunakan bateri
- Gunakan
-benchmem
untuk mendapatkan juga statistik pada objek dan ruang yang diperuntukkan - Gunakan
benchstat
untuk membandingkan prestasi merentas cawangan git yang berbeza* * - Menambah -run='$^' atau -run=- pada setiap arahan go test untuk mengelak menjalankan ujian juga
name old time/op new time/op delta
Decode-4 2.20s ± 0% 1.54s ± 0% ~ (p=1.000 n=1+1)
Untuk benchstat khususnya:
- Menggunakan nilai kiraan lebih tinggi jika nombor penanda aras tidak stabil
- jika anda tidak melakukannya, saiz sampel anda akan terlalu kecil dan
delta
mungkin tidak dilaporkan (seperti contoh di atas) kerana ia tidak cukup ketara. - jika anda melakukannya, mungkin mengambil masa yang lebih lama kerana anda memerlukan beberapa larian untuk mendapatkan saiz sampel yang baik
- Kami mengesyorkan 5 sebagai saiz sampel yang cukup baik
- Menambah -run='$^' atau -run=- pada setiap arahan go test untuk mengelak menjalankan ujian juga
#Contoh
Output sampel Benchstat untuk ilustrasi:
Mari kita anggap bahawa kita sedang mengusahakan cawangan osmosis/string
dan menambah beberapa peningkatan prestasi pada tree.String().
Akibatnya, kami ingin membuat ujian bangku seperti berikut dalam iavl.
Untuk mendapatkan ringkasan bangku yang bagus, kami akan mengikuti langkah berikut:
- Semak cawangan
master
dan dapatkan output penanda aras:
git checkout master
go test -benchmem -run=^$ -bench ^BenchmarkTreeString$ -benchmem -count 5 github.com/cosmos/iavl > bench_string_old.txt
- Semak cawangan kami
osmosis/string
dan dapatkan output penanda aras:
git checkout master
go test -benchmem -run=^$ -bench ^BenchmarkTreeString$ -benchmem -count 5 github.com/cosmos/iavl > bench_string_new.txt
- Bandingkan kedua-dua keluaran dengan
benchstat
:
benchstat bench_string_old.txt bench_string_new.txt
- Nilaikan output dan lampirkan pada PR anda, jika perlu #
Pautan berguna: Benchstat Doc Petua untuk Pendatang Baru