Bagikan melalui


Pemantauan Sumber Daya Domain Aplikasi

Pemantauan sumber daya domain aplikasi (ARM) memungkinkan host memantau penggunaan CPU dan memori berdasarkan domain aplikasi. Ini berguna untuk host seperti ASP.NET yang menggunakan banyak domain aplikasi dalam proses yang berjalan lama. Host dapat membongkar domain aplikasi aplikasi yang berdampak buruk pada performa seluruh proses, tetapi hanya jika dapat mengidentifikasi aplikasi yang bermasalah. ARM menyediakan 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 mengkonsumsi 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, ARM mulai mengumpulkan data pada semua domain aplikasi dalam proses. 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 <appDomainResourceMonitoring> elemen ke file konfigurasi, dan mengatur enabled atribut ke true. Nilai false (default) berarti hanya ARM yang tidak diaktifkan saat startup; 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 di Visual Basic) AppDomain.MonitoringIsEnabled ke true. Begitu properti ditetapkan, ARM diaktifkan.

  • Anda dapat mengaktifkan ARM setelah startup dengan memantau event ETW. ARM diaktifkan dan mulai menghasilkan kejadian 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 detik: Ini dihitung dengan menambahkan waktu utas yang dilaporkan oleh sistem operasi untuk semua utas yang menghabiskan waktu eksekusi di domain aplikasi selama masa pakainya. Utas yang diblokir atau tidur tidak menggunakan waktu prosesor. Ketika sebuah utas memanggil ke dalam kode asli, waktu yang dihabiskan oleh utas dalam kode asli tersebut termasuk 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: Jumlah ini akurat hanya setelah koleksi pemblokiran penuh. (Ini berbeda dengan koleksi bersamaan, yang terjadi di latar belakang dan tidak memblokir aplikasi.) Misalnya, overload metode GC.Collect() menyebabkan pengumpulan 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 angka ini.

Menentukan Kapan Koleksi Pemblokiran Penuh Terjadi

Untuk menentukan kapan jumlah memori yang bertahan akurat, Anda perlu tahu kapan koleksi 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 AppDomain kelas , Anda dapat menggunakan GC.RegisterForFullGCNotification metode untuk mendaftar untuk pemberitahuan koleksi lengkap. Ambang yang Anda gunakan tidak penting, karena Anda menunggu penyelesaian pengumpulan daripada mendekati penyelesaian pengumpulan. Anda kemudian dapat memanggil metode GC.WaitForFullGCComplete, yang memblokir hingga pengumpulan lengkap selesai. Anda dapat membuat utas yang memanggil metode dalam perulangan dan melakukan analisis yang diperlukan setiap kali metode tersebut mengembalikan hasil.

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

API Penyedia Layanan

Jika Anda menggunakan API hosting yang tidak dikelola, host Anda harus meneruskan implementasi antarmuka IHostGCManager ke CLR. CLR memanggil metode IHostGCManager::SuspensionEnding ketika eksekusi utas yang telah ditangguhkan dilanjutkan selama pengumpulan terjadi. CLR meneruskan pembuatan koleksi yang telah selesai sebagai parameter metode , sehingga host dapat menentukan apakah koleksi penuh atau parsial. Implementasi Anda dari metode IHostGCManager::SuspensionEnding dapat mengetahui memori yang masih ada, supaya memastikan bahwa hitungan diperoleh segera sesudah diperbarui.

Lihat juga