Rumah >pembangunan bahagian belakang >Golang >Memprofilkan Memori Dalam Go

Memprofilkan Memori Dalam Go

Barbara Streisand
Barbara Streisandasal
2024-12-25 21:20:10236semak imbas

Pengurusan memori yang cekap adalah penting dalam aplikasi Golang, terutamanya dalam persekitaran konkurensi tinggi, perkhidmatan yang berjalan lama atau tugasan intensif data. Penggunaan memori pemprofilan membantu mendiagnosis isu, mengoptimumkan prestasi dan mencegah ralat kehabisan memori (OOM). Panduan ini menyediakan pendekatan komprehensif untuk memprofilkan penggunaan memori dari titik akhir Go.

Mengapa Pemprofilan Memori Penting

Pemprofilan memori mengenal pasti penggunaan memori yang tidak cekap, kebocoran memori dan peruntukan yang berlebihan dalam aplikasi anda. Tanpa pemprofilan yang betul, isu ingatan boleh menyebabkan kemerosotan prestasi, kos yang lebih tinggi dan masa berhenti perkhidmatan.

Punca Biasa Penggunaan Memori Tinggi

  1. Memori bocor: Pengekalan memori yang tidak diingini disebabkan oleh struktur data tidak dibersihkan.
  2. Peruntukan yang berlebihan: Potongan besar, peta atau struktur data lain yang memakan memori yang ketara.

Menyediakan Pemprofilan Memori dalam Go

Untuk memprofilkan penggunaan memori dalam aplikasi Go, anda boleh menggunakan alatan seperti pprof untuk pemprofilan masa jalan dan parca untuk pemprofilan berterusan. Inilah cara untuk menyediakan dan menggunakan alatan ini dengan berkesan.

Alat Pemprofilan

  1. prof

    Alat Go terbina dalam yang menyediakan pemprofilan untuk memori, CPU, goroutin dan banyak lagi.

    • Dokumentasi
  2. Parca

    Alat pemprofilan berterusan yang menyediakan cerapan masa nyata dengan mengumpul data daripada pprof.

    • Dokumentasi
  3. Ujian Tekanan

    Hasilkan beban untuk mensimulasikan penggunaan dunia sebenar dan perhatikan tingkah laku ingatan di bawah tekanan. Untuk kes kami, kami menggunakan SoapUI.

Menggunakan pprof

Memandangkan pprof ialah alat terbina dalam, pemasangan tidak diperlukan, sertakan coretan berikut untuk mendayakan pprof dalam aplikasi anda:

import (
    _ "net/http/pprof"
)

func main() {
    go func () {
    log.Print(http.ListenAndServe(":1234", nil))
    }()
}

Ini mendedahkan pprof pada port 1234. Akses data pemprofilan dengan melawati http://localhost:1234/debug/pprof/ atau menggunakan alatan seperti go tool pprof.

Menggunakan parca untuk Pemprofilan Berterusan

Untuk memasang parca lihat https://github.com/parca-dev/parca, selepas berjaya memasang parca, konfigurasikan parca.yaml job_name.static_configs.targets tetapkan nombor port yang sama seperti pprof (dalam contoh ini 1234)

kemudian anda boleh menjalankan arahan

parca --config-path="parca.yaml"

jika berjaya anda akan melihat mesej yang serupa dengan

level=info name=parca ts=2024-10-30T06:19:44.5149184Z caller=factory.go:53 msg="loading bucket configuration"
level=info name=parca ts=2024-10-30T06:19:44.5159183Z caller=badger.go:54 msg="Set nextTxnTs to 0"
level=info name=parca ts=2024-10-30T06:19:44.517917Z caller=server.go:90 msg="starting server" addr=:7070

addr=:7070 ialah tempat anda boleh mengakses antara muka web parca, nombor port mungkin berbeza bergantung pada konfigurasi

jika semua persediaan berjaya, anda boleh mengakses parca pada penyemak imbas web

Profiling Memory In Go

Terdapat pelbagai jenis pemprofilan, untuk penggunaan Memori anda boleh gunakan

Profiling Memory In Go

jika anda menghadapi sebarang isu, anda harus merujuk dokumentasi kerana persekitaran yang berbeza mungkin memerlukan penyelesaian yang berbeza

  • pprof https://pkg.go.dev/net/http/pprof
  • parca https://github.com/parca-dev/parca

Mengenalpasti Penggunaan Memori

Ujian Tekanan

Sebelum membuat profil, simulasi trafik tinggi menggunakan alat ujian tekanan dalam kes kami, kami menggunakan SoapUI. Ujian tekanan membantu mereplikasi keadaan yang membawa kepada masalah ingatan.

Menganalisis Penggunaan Memori

Profiling Memory In Go
Selepas menyelesaikan ujian tekanan, pantau penggunaan memori dari semasa ke semasa menggunakan papan pemuka parca.

Profiling Memory In Go
Klik pada graf untuk mengakses profil terperinci.

Profiling Memory In Go
Menggunakan graf ais, periksa timbunan dan penggunaan memori yang sepadan. Garisan yang lebih lebar menunjukkan penggunaan memori yang lebih tinggi. Visualisasi ini membantu menentukan proses yang memakan memori yang ketara.

Dalam aplikasi kami, satu proses dengan penggunaan memori yang besar telah dikenal pasti:

Profiling Memory In Go

Pengoptimuman Memori

Pengoptimuman memori ialah topik kompleks yang berbeza-beza bergantung pada aplikasi dan persekitarannya. Berikut adalah beberapa teknik praktikal:

  • Pemuatan Data Terpilih: Muatkan hanya data yang diperlukan untuk mengurangkan peruntukan memori dengan ketara.
  • Mengelakkan Penunjuk: Gunakan jenis nilai dan bukannya penunjuk untuk meminimumkan peruntukan timbunan.
  • Pratakrif Panjang Data: Tentukan panjang untuk struktur data bersaiz diketahui untuk meningkatkan kecekapan memori.

Setelah siasatan lanjut, kami mendapati bahawa data yang diambil daripada cache adalah terlalu besar. Kami perlu mengesahkan sama ada set data yang besar itu benar-benar diperlukan untuk aliran logik kami.

Dalam kes kami, ternyata set data yang besar ini tidak diperlukan. Oleh itu, kami mengoptimumkan proses dengan secara selektif mengalih keluar data yang tidak diperlukan. Selepas menjalankan semula ujian, penggunaan memori telah dikurangkan sebanyak kira-kira 50%.

Pelaksanaan Terdahulu

Profiling Memory In Go

Selepas mengalih keluar data yang tidak diperlukan secara selektif

Profiling Memory In Go

Dengan bantuan kaedah ini, kami boleh mengecilkan dan membetulkan penggunaan memori dengan mudah, dalam kes kami Pemuatan Data Terpilih ialah kaedah yang betul untuk mengurangkan penggunaan memori.


Kesimpulan

Pemprofilan memori ialah amalan kritikal untuk mengekalkan prestasi dan kestabilan aplikasi Go. Dengan memanfaatkan alatan seperti pprof dan parca, anda boleh mengenal pasti isu memori, mengoptimumkan penggunaan sumber dan memastikan aplikasi anda berfungsi dengan pasti di bawah pelbagai beban. Pemprofilan biasa dan pengoptimuman proaktif membantu menangani cabaran berkaitan memori dengan berkesan.

Atas ialah kandungan terperinci Memprofilkan Memori Dalam Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn