Konsep pembuatan profil

Pembuatan profil adalah bentuk analisis kode dinamis. Anda mengambil karakteristik aplikasi saat berjalan, lalu menggunakan informasi ini untuk mengidentifikasi cara membuat aplikasi lebih cepat dan lebih efisien.

Secara historis, pembuatan profil hanya dilakukan selama pengembangan aplikasi. Pendekatan ini mengandalkan kemampuan untuk mengembangkan benchmark dan pengujian beban 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 benchmark dan pengujian beban prediktif yang akurat untuk lingkungan produksi. Riset tentang pembuatan profil berkelanjutan telah menunjukkan bahwa pembuatan profil ini akurat dan hemat biaya*.

Cloud Profiler adalah alat pembuatan profil berkelanjutan yang dirancang untuk aplikasi yang berjalan di Google Cloud:

  • Ini adalah profiler statistik atau sampling yang memiliki overhead rendah dan cocok untuk lingkungan produksi.

  • API ini mendukung bahasa umum dan mengumpulkan beberapa jenis profil. Lihat Jenis pembuatan profil yang tersedia untuk mengetahui ringkasannya.

Mengonfigurasi aplikasi Google Cloud untuk menghasilkan data profil adalah proses satu kali yang sederhana: tautkan atau jalankan layanan Anda dengan menyertakan agen pembuatan profil. Setelah aplikasi di-deploy, agen pembuatan profil akan berjalan secara berkala untuk mengumpulkan data performa, lalu mengirimkan 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 menggunakan antarmuka Profiler. Menganalisis data profil biasanya merupakan proses iteratif yang mengandalkan pengetahuan Anda tentang desain aplikasi dan bahasa pemrogramannya.

*Lihat artikel Profiling Google-Wide: Infrastruktur Profiling Berkelanjutan untuk Pusat Data dan Profiling Berkelanjutan: Ke Mana Semua Siklus Pergi?.

Jenis pembuatan profil yang tersedia

Tabel berikut merangkum jenis profil yang didukung:

Jenis profil Go Java Node.js Python
Waktu CPU YY Y
Heap YY Y
Heap yang dialokasikan Y
Pertentangan Y
Rangkaian pesan Y
Waktu proses Y YY

Bagian selanjutnya dari bagian ini memberikan detail selengkapnya tentang setiap jenis profil ini.

Pengukuran waktu

  • Waktu CPU adalah waktu yang dihabiskan CPU untuk mengeksekusi blok kode.

    Waktu CPU untuk suatu fungsi memberi tahu Anda berapa lama CPU sibuk mengeksekusi instruksi. Waktu ini tidak mencakup waktu CPU menunggu atau memproses petunjuk untuk hal lain.

  • Waktu aktual (juga disebut waktu aktual) adalah waktu yang diperlukan untuk menjalankan blok kode.

    Waktu jam dinding untuk fungsi mengukur waktu yang berlalu antara masuk dan keluar dari fungsi. Waktu jam dinding mencakup semua waktu tunggu, termasuk waktu untuk kunci dan sinkronisasi thread. Waktu wall untuk blok kode tidak boleh kurang dari waktu CPU.

Jika waktu wall-clock lebih lama dari waktu CPU, hal ini menunjukkan bahwa kode menghabiskan waktu untuk menunggu. Jika perbedaannya substansial, aplikasi Anda mungkin memiliki bottleneck resource.

Jika waktu CPU mirip dengan waktu wall, hal ini menunjukkan bahwa kode tersebut intensif CPU; hampir semua waktu yang diperlukan untuk dijalankan dihabiskan oleh CPU. Blok kode yang intensif CPU dan berjalan lama mungkin merupakan kandidat untuk pengoptimalan.

Penggunaan heap (memori)

  • Penggunaan heap (juga disebut heap) adalah jumlah memori yang dialokasikan di heap program pada saat profil dikumpulkan. Tidak seperti jenis profil lain yang mengumpulkan data selama interval, jenis profil ini mengumpulkan penggunaan heap pada satu titik waktu.

  • Alokasi heap (juga disebut heap yang dialokasikan) adalah jumlah total memori yang dialokasikan di heap program selama interval saat profil dikumpulkan. Nilai ini mencakup memori apa pun yang dialokasikan dan telah dibebaskan serta tidak lagi digunakan. Sebagai contoh, pertimbangkan tugas yang mengulangi urutan berikut: mengalokasikan 1 MiB, menunggu 500 md, mengosongkan 1 MiB, menunggu 500 md. Dalam 10 detik saat profil heap yang dialokasikan dikumpulkan, ada 10 alokasi dan 10 pembebasan. Profil ini akan menampilkan heap yang dialokasikan sebesar 10 MiB, karena penghapusan tidak dipertimbangkan. Rasio alokasi rata-rata 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 menyebabkan pekerjaan paling banyak untuk pengumpulan sampah.

Informasi threading

Aplikasi yang membuat thread dapat mengalami thread yang diblokir dan kebocoran thread:

  • Thread yang diblokir adalah thread yang dibuat, tetapi menunggu kunci. Thread ini saat ini tidak berjalan, dan mungkin tidak akan pernah berjalan. Namun, thread yang diblokir mungkin akhirnya 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 titik waktu.

Pertentangan

Dalam program multi-thread, waktu yang dihabiskan untuk menunggu serialisasi akses ke resource bersama dapat menjadi signifikan. Memahami perilaku pertentangan dapat memandu desain kode dan memberikan informasi untuk penyesuaian performa.

Koleksi profil

Peran agen profiler adalah mengambil data profil dari aplikasi Anda dan mengirimkan data ini ke backend Profiler menggunakan Profiler API. Setiap profil ditujukan untuk satu instance aplikasi dan menyertakan empat kolom yang secara unik mengidentifikasi deployment-nya:

  • Project Google Cloud
  • Nama aplikasi
  • Zona aplikasi
  • Versi aplikasi

Saat siap mengambil profil, agen akan mengeluarkan perintah Profiler API ke backend Profiler. Backend menerima permintaan ini dan, dalam skenario paling sederhana, segera membalas agen. Balasan menentukan jenis profil yang akan diambil. Sebagai respons, agen akan mengambil 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 databasenya untuk menentukan apakah telah menerima permintaan sebelumnya dari agen. Jika tidak, backend akan menambahkan informasi agen ke database-nya. Deployment baru akan dibuat jika kolom deployment agen tidak cocok dengan setelan agen lain yang dicatat.

Rata-rata setiap menit, dan untuk setiap deployment dan setiap jenis profil, backend memilih agen dan menginstruksikannya untuk mengambil 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 siap mengambil data, agen akan tidak ada aktivitas hingga backend menjawab dengan jenis profil yang akan diambil. Jika Anda memiliki 10 instance aplikasi yang berjalan di deployment yang sama, Anda akan membuat 10 agen pembuatan profil. Namun, sebagian besar waktu agen ini tidak ada aktivitas. Selama periode 10 menit, Anda dapat mengharapkan 10 profil; rata-rata setiap agen 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 melihat dan mengelola kuota Profiler, lihat Kuota dan batas.

Menganalisis data

Setelah Profiler mengumpulkan data, Anda dapat melihat dan menganalisis data ini menggunakan antarmuka Profiler.

Di konsol Google Cloud, buka halaman Profiler:

Buka Profiler

Anda juga dapat menemukan halaman ini menggunakan kotak penelusuran.