Konsep pembuatan profil
Pembuatan profil adalah bentuk analisis kode dinamis. Anda mencatat karakteristik aplikasi saat aplikasi berjalan, lalu menggunakan informasi ini untuk mengidentifikasi cara membuat aplikasi Anda lebih cepat dan lebih efisien.
Secara historis, pembuatan profil hanya dilakukan selama pengembangan aplikasi. Pendekatan ini mengandalkan kemampuan untuk mengembangkan pengujian beban dan benchmark yang dapat memprediksi lingkungan produksi secara akurat.
Pembuatan profil berkelanjutan mengacu pada pembuatan profil aplikasi saat dijalankan di lingkungan produksi. Pendekatan ini mengurangi kebutuhan untuk mengembangkan tolok ukur dan pengujian beban prediktif yang akurat untuk lingkungan produksi. Penelitian tentang pembuatan profil berkelanjutan telah menunjukkan bahwa metode ini akurat dan hemat biaya*.
Cloud Profiler adalah alat pembuatan profil berkelanjutan yang dirancang untuk aplikasi yang berjalan di Google Cloud:
Profiler statistik atau pengambilan sampel yang memiliki overhead rendah dan cocok untuk lingkungan produksi.
Fitur ini mendukung bahasa umum dan mengumpulkan beberapa jenis profil. Lihat Jenis pembuatan profil yang tersedia untuk ringkasannya.
Mengonfigurasi aplikasi Google Cloud untuk menghasilkan data profil merupakan proses satu kali yang sederhana: menautkan atau menjalankan layanan dengan menyertakan agen pembuatan profil. Setelah aplikasi Anda di-deploy, agen pembuatan profil berjalan secara berkala untuk mengumpulkan data performa, lalu mengirim data tersebut ke project Google Cloud Anda. Untuk mengetahui detail tentang proses ini, lihat Pengumpulan profil.
Setelah mengumpulkan data profil untuk aplikasi, Anda dapat menganalisis data tersebut menggunakan antarmuka Profiler. Menganalisis data profil biasanya adalah proses iteratif yang bergantung pada pengetahuan Anda tentang desain aplikasi dan bahasa pemrogramannya.
*Lihat Profiling Seluruh Google: Infrastruktur Pembuatan Profil yang Berkelanjutan untuk Pusat Data dan Pembuatan Profil Berkelanjutan: Dari Mana Semua Siklus Hilang?.
Jenis pembuatan profil yang tersedia
Tabel berikut merangkum jenis profil yang didukung:
Jenis profil | Go | Java | Node.js | Python |
---|---|---|---|---|
Waktu CPU | Y | Y | Y | |
Heap | Y | Y | Y | |
Heap yang dialokasikan | Y | |||
Pertentangan | Y | |||
Rangkaian pesan | Y | |||
Waktu proses | Y | Y | Y |
Bagian selanjutnya dari bagian ini memberikan detail selengkapnya tentang masing-masing jenis profil ini.
Pengukuran waktu
Waktu CPU adalah waktu yang dihabiskan CPU untuk mengeksekusi blok kode.
Waktu CPU untuk suatu fungsi menunjukkan berapa lama CPU sibuk mengeksekusi petunjuk. Waktu CPU itu tidak termasuk waktu CPU menunggu atau memproses instruksi untuk hal lain.
Wall-clock time (juga disebut wall time) adalah waktu yang diperlukan untuk menjalankan blok kode.
Waktu dinding untuk fungsi mengukur waktu yang berlalu antara masuk dan keluar dari suatu fungsi. Waktu Wall-clock mencakup semua waktu tunggu, termasuk untuk penguncian dan sinkronisasi thread. Waktu proses untuk blok kode tidak boleh kurang dari waktu CPU.
Jika waktu wall-clock lebih lama daripada waktu CPU, hal tersebut menunjukkan bahwa kode menghabiskan waktu menunggu. Jika perbedaannya cukup besar, aplikasi Anda mungkin mengalami bottleneck resource.
Jika waktu CPU serupa dengan waktu proses, berarti kode tersebut menggunakan CPU secara intensif; hampir semua waktu yang diperlukan untuk menjalankannya dihabiskan oleh CPU. Blok kode yang menggunakan CPU yang berjalan lama dapat menjadi kandidat untuk pengoptimalan.
Penggunaan heap (memori)
Penggunaan heap (juga disebut heap) adalah jumlah memori yang dialokasikan dalam heap program tepat pada saat profil dikumpulkan. Tidak seperti jenis profil lain dengan data yang dikumpulkan pada interval tertentu, jenis profil ini mengumpulkan penggunaan heap pada satu titik waktu.
Alokasi heap (juga disebut heap yang dialokasikan) adalah jumlah total memori yang dialokasikan dalam heap program selama interval saat profil dikumpulkan. Nilai ini mencakup memori apa pun yang dialokasikan dan telah dibebaskan, serta tidak lagi digunakan. Contohnya, pertimbangkan tugas yang mengulangi urutan berikut: mengalokasikan 1 MiB, menunggu 500 md, membebaskan 1 MiB, menunggu 500 md. Dalam 10 detik saat profil heap yang dialokasikan dikumpulkan, ada 10 alokasi dan 10 pengosongan. Profil ini akan menampilkan heap yang dialokasikan 10 MiB, karena yang bebas tidak dipertimbangkan. Kecepatan rata-rata alokasi adalah 10 MiB/10 detik atau 1 MiB per detik.
Membuat profil penggunaan heap membantu Anda menemukan potensi inefisiensi dan kebocoran memori dalam program. Membuat profil alokasi heap membantu Anda mengetahui alokasi mana yang paling banyak melakukan pekerjaan untuk pembersih sampah memori.
Informasi rangkaian pesan
Aplikasi yang membuat thread dapat mengalami thread yang diblokir dan kebocoran thread:
- Thread yang diblokir adalah thread yang dibuat, tetapi menunggu kunci. Thread ini sedang tidak berjalan dan mungkin tidak pernah berjalan. Namun, thread yang diblokir pada akhirnya dapat berjalan.
- Kebocoran thread terjadi saat jumlah thread yang dibuat terus meningkat.
Thread yang diblokir adalah salah satu penyebab thread bocor.
Pada tingkat frame, profil Thread menampilkan jumlah rata-rata thread yang menyertakan frame tersebut. Jenis profil ini mengumpulkan penggunaan thread pada satu waktu.
Pertentangan
Dalam program multi-thread, waktu yang dihabiskan untuk menunggu serialisasi akses ke resource bersama bisa sangat besar. Memahami perilaku pertentangan dapat memandu desain kode dan memberikan informasi untuk penyesuaian performa.
Koleksi profil
Peran agen profiler adalah untuk mengambil data profil dari aplikasi Anda dan mengirimkan data ini ke backend Profiler menggunakan Profiler API. Setiap profil ditujukan untuk satu instance aplikasi dan berisi empat kolom yang mengidentifikasi deployment-nya secara unik:
- Project Google Cloud
- Nama aplikasi
- Zona aplikasi
- Versi aplikasi
Saat agen siap merekam profil, agen akan mengeluarkan perintah Profiler API ke backend Profiler. Backend menerima permintaan ini dan, dalam skenario yang paling sederhana, segera membalas agen. Balasan akan menentukan jenis profil yang akan diambil. Sebagai respons, agen menangkap profil dan mengirimkannya ke backend. Terakhir, backend Profiler mengaitkan profil dengan project Google Cloud Anda. Kemudian, Anda dapat melihat dan menganalisisnya menggunakan antarmuka Profiler.
Urutan handshake yang sebenarnya lebih kompleks daripada yang dijelaskan di paragraf sebelumnya. Misalnya, saat Profiler menerima permintaan dari agen, backend akan memeriksa database-nya untuk menentukan apakah sudah menerima permintaan sebelumnya dari agen. Jika belum, backend akan menambahkan informasi agen ke database-nya. Deployment baru akan dibuat jika kolom deployment agen tidak cocok dengan setelan agen lainnya yang tercatat.
Setiap menit, rata-rata, dan untuk setiap deployment dan setiap jenis profil, backend akan memilih agen dan menginstruksikannya untuk membuat profil. Misalnya, jika agen untuk deployment mendukung pembuatan profil waktu Heap dan Wall, rata-rata dua profil akan diambil setiap menit:
Untuk semua jenis profil, kecuali penggunaan heap dan thread, satu profil mewakili data yang dikumpulkan selama 10 detik.
Profil thread dan penggunaan heap dikumpulkan secara instan.
Setelah agen memberi tahu backend Profiler bahwa agen sudah siap mengambil data, agen akan tidak ada aktivitas hingga backend balasan dengan jenis profil yang akan diambil. Jika memiliki 10 instance aplikasi yang berjalan di deployment yang sama, berarti Anda membuat 10 agen pembuatan profil. Namun, sering kali agen ini tidak ada aktivitas. Selama periode 10 menit, Anda dapat mengharapkan 10 profil; setiap agen rata-rata menerima satu balasan untuk setiap jenis profil. Ada beberapa pengacakan yang terlibat, sehingga jumlah sebenarnya mungkin bervariasi.
Backend Profiler menggunakan kuota Profiler API dan kolom deployment profil untuk membatasi profil yang diserap. Untuk mengetahui informasi tentang cara menampilkan dan mengelola kuota Profiler, lihat Kuota dan batas.
Menganalisis data
Setelah Profiler mengumpulkan data, Anda dapat melihat dan menganalisis data ini menggunakan antarmuka Profiler.
Pada panel navigasi Google Cloud Console, pilih Profiler: