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.
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.
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.
prof
Alat Go terbina dalam yang menyediakan pemprofilan untuk memori, CPU, goroutin dan banyak lagi.
Parca
Alat pemprofilan berterusan yang menyediakan cerapan masa nyata dengan mengumpul data daripada pprof.
Ujian Tekanan
Hasilkan beban untuk mensimulasikan penggunaan dunia sebenar dan perhatikan tingkah laku ingatan di bawah tekanan. Untuk kes kami, kami menggunakan SoapUI.
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.
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
Terdapat pelbagai jenis pemprofilan, untuk penggunaan Memori anda boleh gunakan
jika anda menghadapi sebarang isu, anda harus merujuk dokumentasi kerana persekitaran yang berbeza mungkin memerlukan penyelesaian yang berbeza
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.
Selepas menyelesaikan ujian tekanan, pantau penggunaan memori dari semasa ke semasa menggunakan papan pemuka parca.
Klik pada graf untuk mengakses profil terperinci.
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:
Pengoptimuman memori ialah topik kompleks yang berbeza-beza bergantung pada aplikasi dan persekitarannya. Berikut adalah beberapa teknik praktikal:
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
Selepas mengalih keluar data yang tidak diperlukan secara selektif
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.
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!