Pembangunan : Teras Osmosis : Prestasi dan Pemprofilan - drihsanmy/Osmosis-Malaysia-Translation-Team GitHub Wiki

#Pemprofilan dengan pprof

  1. 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.
  2. 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
  1. 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:

  1. 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
  1. 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
  1. Bandingkan kedua-dua keluaran dengan benchstat:
benchstat bench_string_old.txt bench_string_new.txt
  1. Nilaikan output dan lampirkan pada PR anda, jika perlu #

Pautan berguna: Benchstat Doc Petua untuk Pendatang Baru

⚠️ **GitHub.com Fallback** ⚠️