Membuat profil aplikasi Java

Halaman ini menjelaskan cara mengubah aplikasi Java Anda untuk mengambil data profiling dan mengirimkan data tersebut ke project Google CloudAnda. Untuk informasi umum tentang pembuatan profil, lihat Konsep pembuatan profil.

Jenis profil untuk Java:

  • Waktu CPU
  • Heap (memerlukan Java 11 atau lingkungan standar App Engine, dinonaktifkan secara default)
  • Waktu dinding (tidak tersedia untuk lingkungan standar App Engine Java 8)

Versi bahasa Java yang didukung:

  • JVM berbasis HotSpot (termasuk Oracle JDK dan beberapa build OpenJDK) untuk Java 8, 11, atau yang lebih baru.

Versi agen pembuatan profil yang didukung:

  • Rilis agen terbaru didukung. Secara umum, rilis yang lebih lama dari satu tahun tidak didukung. Sebaiknya gunakan agen versi terbaru.

Sistem operasi yang didukung:

  • Linux. Pembuatan profil aplikasi Java didukung untuk kernel Linux yang library C standarnya diimplementasikan dengan glibc atau dengan musl. Untuk informasi konfigurasi khusus kernel Linux Alpine, lihat Menjalankan di Linux Alpine.

Lingkungan yang didukung:

Mengaktifkan Profiler API

Sebelum menggunakan agen pembuatan profil, pastikan Profiler API yang mendasarinya diaktifkan. Anda dapat memeriksa status API dan mengaktifkannya jika perlu menggunakan Google Cloud CLI atau konsol Google Cloud :

gcloud CLI

  1. Jika Anda belum menginstal Google Cloud CLI di workstation, lihat dokumentasi Google Cloud CLI.

  2. Jalankan perintah berikut:

    gcloud services enable cloudprofiler.googleapis.com
    

Untuk informasi selengkapnya, lihat gcloud services.

Konsol Google Cloud

  1. Aktifkan Cloud Profiler API.

    Peran yang diperlukan untuk mengaktifkan API

    Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (roles/serviceusage.serviceUsageAdmin), yang berisi izin serviceusage.services.enable. Pelajari cara memberikan peran.

    Mengaktifkan API

  2. Jika API enabled ditampilkan, berarti API sudah diaktifkan. Jika belum, klik tombol Enable.

Memberikan peran IAM ke akun layanan

Jika Anda men-deploy aplikasi di resource Google Cloud dan jika Anda menggunakan akun layanan default dan belum mengubah pemberian peran ke akun layanan tersebut, Anda dapat melewati bagian ini.

Jika Anda melakukan salah satu tindakan berikut, Anda harus memberikan peran IAM Agen Cloud Profiler (roles/cloudprofiler.agent) kepada akun layanan:

  1. Anda menggunakan akun layanan default, tetapi mengubah pemberian perannya.
  2. Anda menggunakan akun layanan yang dibuat pengguna.
  3. Anda menggunakan workload identity, berikan peran Cloud Profiler Agent ke akun layanan Kubernetes.

Anda dapat memberikan peran IAM ke akun layanan menggunakan konsolGoogle Cloud atau Google Cloud CLI. Misalnya, Anda dapat menggunakan perintah gcloud projects add-iam-policy-binding:

gcloud projects add-iam-policy-binding GCP_PROJECT_ID \
    --member serviceAccount:MY_SVC_ACCT_ID@GCP_PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudprofiler.agent

Sebelum menggunakan perintah sebelumnya, ganti perintah berikut:

  • GCP_PROJECT_ID: Project ID Anda.
  • MY_SVC_ACCT_ID: Nama akun layanan Anda.

Untuk mengetahui informasi mendetail, lihat Mengelola akses ke project, folder, dan organisasi.

Menginstal agen Profiler

Compute Engine

  1. Buat direktori penginstalan, misalnya, /opt/cprof, untuk agen Profiler:

     sudo mkdir -p /opt/cprof

  2. Download arsip agen dari repositori storage.googleapis.com dan ekstrak ke direktori penginstalan:

    wget -q -O- https://storage.googleapis.com/cloud-profiler/java/latest/profiler_java_agent.tar.gz \
    | sudo tar xzv -C /opt/cprof

GKE

Ubah Dockerfile untuk membuat direktori penginstalan bagi agen Profiler, download arsip agen, lalu ekstrak arsip ke direktori penginstalan.

Linux (library C berbasis glibc):

Gunakan perintah penginstalan berikut:

RUN mkdir -p /opt/cprof && \
  wget -q -O- https://storage.googleapis.com/cloud-profiler/java/latest/profiler_java_agent.tar.gz \
  | tar xzv -C /opt/cprof

Linux Alpine (pustaka C berbasis musl):

Gunakan perintah penginstalan berikut:

wget -q -O- https://storage.googleapis.com/cloud-profiler/java/latest/profiler_java_agent_alpine.tar.gz \
| tar xzv -C /opt/cprof

Lingkungan Fleksibel

Saat Anda menggunakan image dasar runtime Java 8 Google atau image dasar runtime Java 9 / Jetty 9, agen Profiler sudah diinstal sebelumnya, sehingga tidak ada langkah tambahan yang perlu Anda lakukan untuk menginstal agen.

Untuk semua image dasar lainnya, Anda harus menginstal agen. Misalnya, Dockerfile berikut berisi petunjuk untuk menggunakan image openjdk:11-slim, menginstal agen Profiler, dan menentukan parameter default yang akan digunakan saat memulai aplikasi:

FROM openjdk:11-slim

COPY . .
RUN  apt-get update \
     && apt-get install wget \
     && rm -rf /var/lib/apt/lists/*

RUN mkdir -p /opt/cprof && \
    wget -q -O- https://storage.googleapis.com/cloud-profiler/java/latest/profiler_java_agent.tar.gz \
    | tar xzv -C /opt/cprof

CMD ["java", "-agentpath:/opt/cprof/profiler_java_agent.so=OPTION1,OPTION2", "-jar", "PATH_TO_YOUR_JAR_FILE"]

Untuk menggunakan Dockerfile ini dengan lingkungan fleksibel App Engine, Anda harus melakukan hal berikut:

  • Ganti OPTION1 dan OPTION2 dengan nilai konfigurasi agen yang diperlukan untuk aplikasi Anda, dan ganti PATH_TO_YOUR_JAR_FILE dengan jalur ke file jar Anda.
  • Tempatkan Dockerfile di direktori yang sama dengan file app.yaml Anda.
  • Ubah file app.yaml untuk menentukan runtime kustom. Untuk mengetahui informasi selengkapnya, lihat Mem-build Runtime Kustom.

Lingkungan Standar

Saat Anda menggunakan lingkungan runtime Java, agen Profiler sudah diinstal sebelumnya, jadi tidak ada langkah tambahan yang perlu Anda lakukan untuk menginstal agen. Untuk Java versi 11 dan yang lebih baru, Java sudah diinstal sebelumnya di /opt/cprof.

Di luar Google Cloud

  1. Buat direktori penginstalan, misalnya, /opt/cprof, untuk agen Profiler:

     sudo mkdir -p /opt/cprof

  2. Download arsip agen dari repositori storage.googleapis.com dan ekstrak ke direktori penginstalan:

    wget -q -O- https://storage.googleapis.com/cloud-profiler/java/latest/profiler_java_agent.tar.gz \
    | sudo tar xzv -C /opt/cprof

Untuk mencantumkan semua versi agen yang tersedia untuk didownload, jalankan perintah berikut:

gcloud storage ls gs://cloud-profiler/java/cloud-profiler-*

Respons perintah mirip dengan berikut ini:

gs://cloud-profiler/java/cloud-profiler-java-agent_20191014_RC00.tar.gz
gs://cloud-profiler/java/cloud-profiler-java-agent_20191021_RC00.tar.gz
gs://cloud-profiler/java/cloud-profiler-java-agent_20191028_RC00.tar.gz

Untuk mendownload agen versi tertentu, teruskan URL-nya ke perintah download. Misalnya, untuk mendownload agen yang dibuat pada 28 Oktober 2019, Anda akan menggunakan pernyataan berikut:

wget -q -O- https://storage.googleapis.com/cloud-profiler/java/cloud-profiler-java-agent_20191028_RC00.tar.gz \
  | sudo tar xzv -C /opt/cprof

Versi agen dicatat selama inisialisasinya.

Memuat agen Profiler

Untuk memprofilkan aplikasi, mulai Java seperti biasanya untuk menjalankan program Anda, tetapi tentukan opsi konfigurasi agen. Anda menentukan jalur ke library agen, dan Anda dapat meneruskan opsi ke library.

Untuk lingkungan standar App Engine, agen akan otomatis dimuat dan dikonfigurasi. Langsung buka bagian Memulai program untuk mengetahui detail tentang cara mengonfigurasi dan memulai program.

Konfigurasi agen

Untuk mengonfigurasi agen pembuatan profil, sertakan tanda -agentpath saat memulai aplikasi Anda:

 -agentpath:INSTALL_DIR/profiler_java_agent.so=OPTION1,OPTION2,OPTION3

Dalam ekspresi ini, INSTALL_DIR adalah jalur ke agen pembuatan profil, sedangkan OPTION1, OPTION2, dan OPTION3 adalah opsi konfigurasi agen. Misalnya, jika Anda mengganti OPTION1 dengan -cprof_service=myapp dalam ekspresi sebelumnya, Anda akan menetapkan nama layanan menjadi myapp. Tidak ada batasan pada jumlah opsi atau urutannya. Opsi konfigurasi yang didukung tercantum dalam tabel berikut:

Opsi agen Deskripsi
-cprof_service Jika aplikasi Anda tidak berjalan di App Engine, Anda harus menggunakan opsi konfigurasi ini untuk menyetel nama layanan. Untuk mengetahui batasan nama layanan, lihat Argumen nama dan versi layanan.
-cprof_service_version Jika Anda ingin menganalisis data pembuatan profil menggunakan UI Profiler menurut versi layanan, gunakan opsi ini untuk menetapkan versi. Untuk pembatasan versi, lihat Argumen nama layanan dan versi.
-cprof_project_id Jika Anda menjalankan di luar Google Cloud, gunakan opsi ini untuk menentukan project ID Google Cloud Anda. Untuk mengetahui informasi selengkapnya, lihat Membuat profil aplikasi yang berjalan di luar Google Cloud.
-cprof_zone_name Saat aplikasi Anda berjalan di Google Cloud, agen pembuatan profil akan menentukan zona dengan berkomunikasi dengan layanan metadata Compute Engine. Jika agen pembuatan profil tidak dapat berkomunikasi dengan layanan metadata, Anda harus menggunakan opsi ini.
-cprof_gce_metadata_server_retry_count
-cprof_gce_metadata_server_retry_sleep_sec
Kedua opsi ini bersama-sama menentukan kebijakan percobaan ulang yang digunakan agen profiler saat berkomunikasi dengan layanan metadata Compute Engine. untuk mengumpulkan Google Cloud informasi ID project dan zona Anda.

Kebijakan default adalah mencoba lagi hingga 3 kali dengan menunggu 1 detik di antara upaya. Kebijakan ini sudah cukup untuk sebagian besar konfigurasi.
-cprof_cpu_use_per_thread_timers Untuk profil waktu CPU yang paling akurat, setel opsi ini ke benar (true). Penggunaan opsi ini akan meningkatkan overhead per thread.

Nilai defaultnya adalah false.
-cprof_force_debug_non_safepoints Secara default, agen pembuatan profil memaksa JVM untuk membuat informasi pen-debug-an untuk semua kode yang dibuat tepat waktu (JIT), selain membuat informasi debug untuk semua titik aman. Hal ini menghasilkan informasi lokasi tingkat baris dan fungsi yang paling akurat untuk waktu CPU dan profil heap dengan mengorbankan overhead agen tambahan. Anda dapat menonaktifkan pembuatan informasi pen-debug-an untuk kode JIT dengan menyetel opsi ini ke salah (false).

Nilai defaultnya adalah benar (true).