Perbaikan Diagnostik di .NET Core 3.0

Di .NET Core 3.0, kami menyajikan serangkaian alat yang memanfaatkan fitur baru dari lingkungan .NET runtime yang menyederhanakan diagnosis dan penyelesaian masalah kinerja.

Fitur-fitur ini akan membantu Anda menjawab beberapa pertanyaan diagnostik umum yang mungkin Anda miliki:

  1. Apakah aplikasi saya operasional?
  2. Mengapa aplikasi saya memiliki perilaku abnormal?
  3. Mengapa aplikasi saya mogok?



Apakah aplikasi saya operasional?


Seiring waktu, kebocoran memori dapat terjadi dalam aplikasi, yang akhirnya mengarah ke OutOfMemoryException. Dalam kasus lain, beberapa kode bermasalah dapat menyebabkan lompatan beban prosesor. Ini hanya beberapa masalah yang dapat Anda identifikasi secara aktif dengan metrik .

Metrik


Metrik adalah data pengukuran selama periode waktu tertentu. Metrik ini memungkinkan Anda untuk memantau keadaan sistem Anda di tingkat tinggi. Berbeda dengan .NET Framework pada Windows, .NET Core tidak menghasilkan penghitung kinerja. Alih-alih, kami memperkenalkan cara baru untuk menghasilkan metrik dalam .NET Core melalui API EventCounter .

EventCounters menawarkan peningkatan dibandingkan penghitung kinerja Windows, karena mereka sekarang digunakan pada semua sistem operasi yang mendukung .NET Core. Selain itu, tidak seperti penghitung kinerja, mereka juga dapat digunakan di lingkungan dengan privilege rendah (misalnya, saat menggunakan xcopy). Sayangnya, tidak adanya alat seperti Performance Monitor (perfmon) membuatnya sulit untuk menampilkan indikator ini secara real time.

penghitung dotnet
Di 3.0-preview5, kami menyajikan alat baris perintah baru untuk memantau metrik yang dihasilkan oleh aplikasi .NET Core secara real time.

Anda dapat menginstal alat ini dengan menjalankan perintah berikut

dotnet tool install --global dotnet-counters --version 1.0.3-preview5.19251.2 

Dalam contoh di bawah ini, kita melihat bahwa beban CPU dan memori aplikasi kita meningkat ketika kita mulai memuat pada aplikasi web kita.



Untuk petunjuk terperinci tentang cara menggunakan alat ini, lihat file readme dalam proyek dengan penghitung dotnet . Untuk mengetahui keterbatasan penghitung dotnet, lihat masalah terbuka di GitHub .

Mengapa aplikasi saya memiliki perilaku abnormal?


Sementara metrik membantu mengidentifikasi terjadinya perilaku abnormal, mereka menawarkan sedikit pemahaman tentang apa yang salah. Untuk menjawab pertanyaan mengapa aplikasi Anda memiliki perilaku abnormal, Anda perlu mengumpulkan informasi tambahan melalui jejak. Misalnya, Profil CPU yang dikumpulkan menggunakan jejak dapat membantu Anda menentukan jalur panas dalam kode Anda.

Jejak


Jejak adalah catatan peristiwa diskrit waktu-cap yang diperbaiki. Jejak berisi konteks lokal yang memungkinkan Anda untuk lebih menentukan nasib sistem. Secara tradisional, .NET Framework (dan kerangka kerja seperti ASP.NET) telah menghasilkan jejak diagnostik tentang komponen internal mereka menggunakan Event Tracing for Windows (ETW). Di .NET Core, jejak ini direkam dalam ETW untuk Windows dan LTTng untuk Linux.

dotnet-trace

Dalam versi 3.0-preview5, setiap aplikasi .NET Core membuka saluran dupleks bernama EventPipe (soket domain Unix di * nix atau pipa bernama di Windows) di mana ia dapat mengirim acara. Sementara kami masih bekerja pada protokol controller, dotnet-trace mengimplementasikan versi awal dari protokol ini.

Anda dapat menginstal alat ini dengan menjalankan perintah berikut

 dotnet tool install --global dotnet-trace--version 1.0.3-preview5.19251.2 



Dalam contoh di atas, saya menjalankan jejak dotnet dengan profil default yang mencakup peristiwa profiler CPU dan runtime .NET events.

Selain peristiwa default, Anda dapat mengaktifkan penyedia tambahan berdasarkan studi yang Anda coba lakukan.

Sebagai hasil dari menjalankan jejak dotnet, Anda mendapatkan file .netperf. File ini berisi runtime dan tumpukan CPU mengambil acara yang dapat divisualisasikan dalam perfview . Pembaruan berikutnya untuk Visual Studio (16.1) juga akan menambahkan dukungan untuk memvisualisasikan jejak ini.



Jika Anda menjalankan OS X atau Linux, Anda dapat mengonversi file .netperf ke file .speedscope.json yang dapat dirender menggunakan Speedscope.app saat merekam jejak .
Anda dapat mengonversi jejak yang ada dengan menjalankan perintah berikut:

 dotnet trace convert <input-netperf-file> 

Gambar di bawah ini menunjukkan diagram yang memvisualisasikan jejak yang baru saja kami terima.



Untuk petunjuk terperinci tentang cara menggunakan alat ini, lihat file readme . Untuk batasan yang diketahui dengan dotnet-trace, lihat masalah terbuka di GitHub .

Mengapa aplikasi saya mogok?


Dalam beberapa kasus, tidak mungkin menetapkan penyebab perilaku abnormal hanya dengan memantau prosesnya. Jika terjadi kegagalan proses atau situasi di mana kita mungkin memerlukan informasi tambahan, seperti akses ke seluruh tumpukan proses, proses dump mungkin lebih cocok untuk analisis.

Analisis Dump


Dump adalah catatan keadaan memori virtual yang berfungsi dari suatu proses, biasanya ditangkap ketika tiba-tiba berakhir. Diagnosis dump kernel biasanya digunakan untuk mengidentifikasi penyebab crash aplikasi atau perilaku yang tidak terduga.

Secara tradisional, Anda mengandalkan sistem operasi Anda untuk menerima dump ketika aplikasi mogok (misalnya, laporan kesalahan Windows) atau menggunakan alat seperti procdump untuk menangkap dump ketika kriteria peluncuran tertentu dipenuhi.

Sejauh ini, masalah dengan dump dumping menggunakan .NET di Linux adalah bahwa dump dumping menggunakan gcore atau debugger telah menyebabkan dump yang sangat besar, karena alat yang ada tidak tahu halaman mana dari memori virtual untuk memotong dalam proses .NET Core.

Selain itu, sulit untuk menganalisis dump ini bahkan setelah Anda mengumpulkannya, karena Anda harus membeli debugger dan mengkonfigurasinya untuk memuat sos, ekstensi debugger untuk .NET.

dotnet-dump

Di 3.0.0-preview5, kami menyajikan alat baru yang memungkinkan Anda untuk mengumpulkan dan menganalisis dump proses di Windows dan Linux.

dotnet-dump masih dalam pengembangan aktif, dan tabel di bawah ini menunjukkan fitur mana yang saat ini didukung pada sistem operasi mana.



Anda dapat menginstal alat ini dengan menjalankan perintah berikut

 dotnet tool install --global dotnet-dump --version 1.0.3-preview5.19251.2 

Setelah Anda menginstal dotnet-dump, Anda dapat menangkap proses dump dengan menjalankan perintah berikut

 sudo $HOME/.dotnet/tools/dotnet-dump collect -p <pid> 

Di Linux, dump yang dihasilkan dapat dianalisis dengan memuat dump yang dihasilkan dengan perintah berikut

 dotnet dump analyze <dump-name> 

Dalam contoh berikut, saya mencoba untuk mendefinisikan dump ASP.NET Core Hosting Environment



Untuk petunjuk terperinci tentang cara menggunakan alat ini, lihat file readme. Untuk batasan yang diketahui dengan dotnet-dump, lihat masalah terbuka di GitHub .

Kesimpulan


Terima kasih telah menguji alat diagnostik baru di .NET Core 3.0. Silakan terus memberi kami umpan balik, baik di komentar atau di GitHub . Kami mendengarkan dengan cermat dan akan melakukan perubahan berdasarkan umpan balik Anda.

Source: https://habr.com/ru/post/id451372/


All Articles