Tampilkan data Application Insights Profiler

Anggap saja Anda sedang menjalankan pengujian performa web. Anda akan memerlukan jejak untuk memahami bagaimana aplikasi web Anda berjalan dengan beban. Dalam artikel ini, Anda akan:

  • Hasilkan lalu lintas ke aplikasi web Anda dengan memulai pengujian performa web atau memulai sesi sesuai permintaan Profiler.
  • Lihat jejak Profiler setelah uji beban atau sesi Profiler Anda.
  • Pelajari cara membaca data performa Profiler dan tumpukan panggilan.

Menghasilkan lalu lintas ke layanan Anda

Agar Profiler dapat mengunggah jejak, layanan Anda harus secara aktif menangani permintaan.

Jika Anda baru mengaktifkan Profiler, jalankan uji beban singkat.

Jika layanan Azure Anda sudah memiliki lalu lintas masuk atau jika Anda hanya ingin menghasilkan lalu lintas secara manual, lewati pengujian beban dan mulai sesi Profiler sesuai permintaan:

  1. Dari halaman Gambaran umum Application Insights untuk layanan Azure Anda, pilih Performa dari menu sebelah kiri.

  2. Pada panel Performa, pilih Profiler dari menu atas untuk pengaturan Profiler.

    Cuplikan layar tombol Profiler dari panel Performa.

  3. Setelah halaman Pengaturan profiler dimuat, pilih Profil Sekarang.

    Cuplikan layar fitur halaman Profiler dan pengaturan.

Melihat jejak

  1. Setelah sesi Profiler selesai berjalan, kembali ke panel Performa.

  2. Di bawah Telusuri..., pilih Jejak profiler untuk melihat jejak.

    Cuplikan layar fitur halaman lacak penjelajah.

Penjelajah jejak menampilkan informasi berikut ini:

Filter Deskripsi
Pohon profil v. Grafik api Lihat jejak sebagai pohon atau dalam bentuk grafik.
Jalur panas Pilih untuk membuka node leaf terbesar. Dalam kebanyakan kasus, simpul ini berada di dekat penyempitan performa.
Dependensi kerangka kerja Pilih untuk melihat setiap dependensi kerangka kerja yang dilacak yang terkait dengan jejak.
Menyembunyikan peristiwa Ketik string yang akan disembunyikan dari tampilan pelacakan. Pilih Peristiwa yang disarankan untuk saran.
Kejadian Nama peristiwa atau fungsi. Pohon menampilkan campuran kode dan peristiwa yang terjadi, seperti peristiwa SQL dan HTTP. Peristiwa teratas mewakili durasi permintaan keseluruhan.
Modul Modul tempat peristiwa atau fungsi yang dilacak terjadi.
Waktu utas Interval waktu antara awal operasi dan akhir operasi.
Garis waktu Waktu ketika fungsi atau peristiwa sedang berjalan dalam kaitannya dengan fungsi lainnya.

Cara membaca data performa

Profiler menggunakan kombinasi metode pengambilan sampel dan instrumentasi untuk menganalisis performa aplikasi Anda. Saat melakukan koleksi terperinci, Profiler:

  • Sampel penunjuk instruksi setiap CPU mesin setiap milidetik.
    • Setiap sampel menangkap tumpukan panggilan lengkap dari utas, memberikan informasi terperinci pada tingkat abstraksi tinggi dan rendah.
  • Mengumpulkan peristiwa untuk melacak korelasi dan kausalitas aktivitas, termasuk:
    • Peristiwa pengalihan konteks
    • Peristiwa Pustaka Paralel Tugas (TPL)
    • Peristiwa kumpulan utas

Tumpukan panggilan yang ditampilkan dalam tampilan garis waktu adalah hasil dari sampling dan instrumentasi. Karena setiap sampel menangkap tumpukan panggilan lengkap dari utas, ini termasuk kode dari Microsoft .NET Framework dan kerangka kerja lain yang Anda referensikan.

Alokasi objek (clr!JIT_New atau clr!JIT_Newarr1)

clr!JIT_New dan clr!JIT_Newarr1 adalah fungsi pembantu di .NET Framework yang mengalokasikan memori dari tumpukan terkelola.

  • clr!JIT_New dipanggil saat sebuah objek dialokasikan.
  • clr!JIT_Newarr1 dipanggil saat array objek dialokasikan.

Kedua fungsi ini biasanya bekerja dengan cepat. Jika clr!JIT_New atau clr!JIT_Newarr1 menghabiskan waktu di garis waktu Anda, kode mungkin mengalokasikan banyak objek dan menghabiskan banyak memori.

Kode pemuatan (clr! ThePreStub)

Clr! ThePreStub adalah fungsi pembantu dalam .NET Framework yang menyiapkan kode untuk eksekusi awal, yang biasanya mencakup kompilasi just-in-time (JIT). Untuk setiap metode C#, clr!ThePreStub harus dipanggil, paling banyak, satu kali selama proses.

Jika clr!ThePreStub membutuhkan waktu ekstra untuk sebuah permintaan, ini adalah permintaan pertama untuk menjalankan metode tersebut. Runtime .NET Framework membutuhkan waktu yang signifikan untuk memuat metode pertama. Pertimbangkan:

  • Menggunakan proses pemanasan yang mengeksekusi bagian kode tersebut sebelum pengguna Anda mengaksesnya.
  • Menjalankan Native Image Generator (ngen.exe) pada rakitan Anda.

Pertentangan kunci (clr!JITutil_MonContention atau clr!JITutil_MonEnterWorker)

clr!JITutil_MonContention atau clr!JITutil_MonEnterWorker menunjukkan bahwa utas saat ini sedang menunggu kunci dilepaskan. Teks ini sering ditampilkan saat Anda:

  • Menjalankan pernyataan C# LOCK,
  • Memanggil metode Monitor.Enter, atau
  • Memanggil metode dengan atribut MethodImplOptions.Synchronized.

Ketidaksesuaian kunci biasanya terjadi ketika alur A memperoleh kunci dan alur B mencoba mendapatkan kunci yang sama sebelum alur A merilisnya.

Kode pemuatan ([DINGIN])

Jika .NET Framework runtime menjalankan kode yang tidak dioptimalkan untuk pertama kalinya, nama metode akan berisi [COLD]:

mscorlib.ni![COLD]System.Reflection.CustomAttribute.IsDefined

Untuk setiap metode, ini harus ditampilkan satu kali selama proses, paling banyak.

Jika memuat kode membutuhkan banyak waktu untuk sebuah permintaan, ini adalah permintaan yang memulai eksekusi dari bagian metode yang tidak dioptimalkan. Pertimbangkan untuk menggunakan proses pemanasan yang mengeksekusi bagian kode tersebut sebelum pengguna Anda mengaksesnya.

Mengirim permintaan HTTP

Metode seperti HttpClient.Send menunjukkan bahwa kode sedang menunggu permintaan HTTP selesai.

Operasi database

Metode seperti SqlCommand.Exelucu menunjukkan bahwa kode sedang menunggu operasi database selesai.

Menunggu (AWAIT_TIME)

AWAIT_TIME menunjukkan bahwa kode sedang menunggu tugas lain untuk diselesaikan. Penundaan ini terjadi dengan pernyataan C# AWAIT. Saat kode melakukan C# AWAIT:

  • Utas dilepas dan mengembalikan kontrol ke kumpulan utas.
  • Tidak ada utas yang diblokir menunggu AWAIT selesai.

Namun, secara logika, utas yang melakukan AWAIT "diblokir", menunggu operasi selesai. Pernyataan AWAIT_TIME menunjukkan waktu yang diblokir, menunggu tugas selesai.

Waktu yang diblokir

WAKTU_YANG DIBLOKIR menunjukkan bahwa kode sedang menunggu sumber daya lain tersedia. Misalnya, mungkin menunggu:

  • Objek sinkronisasi
  • Utas yang akan tersedia
  • Permintaan untuk diselesaikan

Async Tidak Dikelola

Agar panggilan asinkron dilacak di seluruh utas, .NET Framework memancarkan peristiwa ETW dan meneruskan ID aktivitas di antara utas. Karena kode yang tidak dikelola (asli) dan beberapa gaya kode asinkron yang lebih lama tidak memiliki peristiwa dan ID aktivitas ini, Profiler tidak dapat melacak utas dan fungsi yang berjalan di utas. Item ini diberi label Asinkron Tidak Terkelola di tumpukan panggilan. Unduh file ETW untuk menggunakan PerfView untuk wawasan lebih lanjut.

Waktu CPU

CPU sibuk menjalankan instruksi.

Waktu disk

Aplikasi sedang melakukan operasi disk.

Waktu jaringan

Aplikasi sedang melakukan operasi jaringan.

Kolom Kapan

Kolom When adalah visualisasi dari berbagai sampel inklusif yang dikumpulkan untuk sebuah node dari waktu ke waktu. Rentang total permintaan dibagi menjadi 32 wadah waktu, tempat sampel inklusif node terakumulasi. Setiap wadah diwakili sebagai bar. Tinggi bar mewakili nilai skala. Untuk node berikut, bilah mewakili konsumsi salah satu sumber daya selama wadah:

  • Node ditandai CPU_TIME atau BLOCKED_TIME.
  • Node dengan hubungan yang jelas dengan mengonsumsi sumber daya (misalnya, CPU, disk, atau utas).

Untuk metrik ini, Anda bisa mendapatkan nilai lebih besar dari 100% dengan menggunakan beberapa sumber daya. Misalnya, jika Anda menggunakan dua CPU selama interval rata-rata, Anda mendapatkan 200%.

Langkah berikutnya

Pelajari cara...