Bagikan melalui


Pemantauan Sumber Daya Domain Aplikasi

Pemantauan sumber daya domain aplikasi (ARM) memungkinkan host untuk memantau penggunaan CPU dan memori berdasarkan domain aplikasi. Ini berguna untuk host seperti ASP.NET yang menggunakan banyak domain aplikasi dalam proses yang sudah berjalan lama. Host dapat membongkar domain aplikasi yang berdampak buruk pada kinerja seluruh proses, tetapi hanya jika dapat mengidentifikasi aplikasi yang bermasalah. ARM memberikan informasi yang dapat digunakan untuk membantu dalam membuat keputusan tersebut.

Misalnya, layanan hosting mungkin memiliki banyak aplikasi yang berjalan di server ASP.NET. Jika satu aplikasi dalam proses mulai mengonsumsi terlalu banyak memori atau terlalu banyak waktu prosesor, layanan hosting dapat menggunakan ARM untuk mengidentifikasi domain aplikasi yang menyebabkan masalah.

ARM cukup ringan untuk digunakan dalam aplikasi langsung. Anda dapat mengakses informasi dengan menggunakan pelacakan peristiwa untuk Windows (ETW) atau langsung melalui API terkelola atau asli.

Mengaktifkan Pemantauan Sumber Daya

ARM dapat diaktifkan dengan empat cara: dengan menyediakan file konfigurasi ketika runtime bahasa umum (CLR) dimulai, dengan menggunakan API hosting yang tidak dikelola, dengan menggunakan kode terkelola, atau dengan mendengarkan peristiwa ARM ETW.

Segera setelah ARM diaktifkan, ia mulai mengumpulkan data di semua domain aplikasi dalam prosesnya. Jika domain aplikasi dibuat sebelum ARM diaktifkan, data kumulatif dimulai saat ARM diaktifkan, bukan saat domain aplikasi dibuat. Setelah diaktifkan, ARM tidak dapat dinonaktifkan.

  • Anda dapat mengaktifkan ARM di startup CLR dengan menambahkan elemen <appDomainResourceMonitoring> ke file konfigurasi, dan mengatur atribut enabled ke true. Nilai false (default) berarti hanya ARM yang tidak diaktifkan saat permulaan; Anda dapat mengaktifkannya nanti dengan menggunakan salah satu mekanisme aktivasi lainnya.

  • Host dapat mengaktifkan ARM dengan meminta antarmuka hosting ICLRAppDomainResourceMonitor. Setelah antarmuka ini berhasil diperoleh, ARM diaktifkan.

  • Kode terkelola dapat mengaktifkan ARM dengan mengatur properti statis (Shared dalam Visual Basic) AppDomain.MonitoringIsEnabled ke true. Segera setelah properti diatur, ARM diaktifkan.

  • Anda dapat mengaktifkan ARM setelah permulaan dengan mendengarkan acara ETW. ARM diaktifkan dan mulai menaikkan peristiwa untuk semua domain aplikasi saat Anda mengaktifkan penyedia publik Microsoft-Windows-DotNETRuntime dengan menggunakan kata kunci AppDomainResourceManagementKeyword. Untuk menghubungkan data dengan domain dan utas aplikasi, Anda juga harus mengaktifkan penyedia Microsoft-Windows-DotNETRuntimeRundown dengan kata kunci ThreadingKeyword.

Menggunakan ARM

ARM menyediakan total waktu prosesor yang digunakan oleh domain aplikasi dan tiga jenis informasi tentang penggunaan memori.

  • Total waktu prosesor untuk domain aplikasi, dalam hitungan detik: Ini dihitung dengan menambahkan waktu utas yang dilaporkan oleh sistem operasi untuk semua utas yang menghabiskan waktu untuk dieksekusi di domain aplikasi selama masa pakainya. Benang yang diblokir atau tidur tidak menggunakan waktu prosesor. Ketika utas memanggil ke kode asli, waktu yang dihabiskan utas dalam kode asli disertakan dalam hitungan untuk domain aplikasi tempat panggilan dilakukan.

  • Total alokasi terkelola yang dibuat oleh domain aplikasi selama masa pakainya, dalam byte: Total alokasi tidak selalu mencerminkan penggunaan memori oleh domain aplikasi, karena objek yang dialokasikan mungkin berumur pendek. Namun, jika aplikasi mengalokasikan dan membebaskan sejumlah besar objek, biaya alokasi bisa signifikan.

  • Memori terkelola, dalam byte, yang direferensikan oleh domain aplikasi dan yang bertahan dari koleksi pemblokiran penuh terbaru: Angka ini hanya akurat setelah pengumpulan pemblokiran penuh. (Ini berbeda dengan koleksi bersamaan, yang terjadi di latar belakang dan tidak memblokir aplikasi.) Misalnya, metode GC.Collect() kelebihan beban menyebabkan koleksi pemblokiran penuh.

  • Total memori terkelola, dalam byte, yang direferensikan oleh proses dan yang bertahan dari koleksi pemblokiran penuh terbaru: Memori yang bertahan untuk domain aplikasi individual dapat dibandingkan dengan jumlah ini.

Menentukan Kapan Koleksi Pemblokiran Penuh Terjadi

Untuk menentukan kapan jumlah memori yang selamat akurat, Anda perlu tahu kapan pengumpulan pemblokiran penuh baru saja terjadi. Metode untuk melakukan ini tergantung pada API yang Anda gunakan untuk memeriksa statistik ARM.

API Terkelola

Jika Anda menggunakan properti kelas AppDomain, Anda dapat menggunakan metode GC.RegisterForFullGCNotification untuk mendaftar untuk pemberitahuan koleksi lengkap. Ambang batas yang Anda gunakan tidak penting, karena Anda menunggu penyelesaian koleksi daripada pendekatan koleksi. Anda kemudian dapat memanggil metode GC.WaitForFullGCComplete, yang memblokir sampai koleksi lengkap selesai. Anda dapat membuat utas yang memanggil metode dalam perulangan dan melakukan analisis yang diperlukan setiap kali metode kembali.

Atau, Anda dapat memanggil metode GC.CollectionCount secara berkala untuk melihat apakah jumlah koleksi generasi 2 telah meningkat. Tergantung pada frekuensi polling, teknik ini mungkin tidak memberikan indikasi akurat terjadinya koleksi lengkap.

API Hosting

Jika Anda menggunakan API hosting yang tidak dikelola, host Anda harus meneruskan CLR implementasi antarmuka IHostGCManager. CLR memanggil metode IHostGCManager::SuspensionEnding ketika melanjutkan eksekusi utas yang telah ditangguhkan saat koleksi terjadi. CLR melewati generasi koleksi yang telah selesai sebagai parameter metode, sehingga host dapat menentukan apakah koleksi itu penuh atau parsial. Implementasi metode IHostGCManager::SuspensionEnding Anda dapat meminta memori yang selamat, untuk memastikan bahwa hitungan diambil segera setelah diperbarui.

Lihat juga