Mengumpulkan diagnostik dalam kontainer
Alat diagnostik yang sama yang berguna untuk mendiagnosis masalah .NET Core dalam skenario lain juga berfungsi di kontainer Docker. Namun, beberapa alat memerlukan langkah-langkah khusus untuk bekerja dalam kontainer. Artikel ini membahas cara alat untuk mengumpulkan jejak performa dan mengumpulkan cadangan dapat digunakan dalam kontainer Docker.
Menggunakan alat .NET CLI dalam kontainer
Alat-alat ini berlaku untuk: ✔️ .NET Core 3.1 SDK dan versi yang lebih baru
Alat diagnostik CLI global .NET Core (penghitung dotnet, dotnet-dump, dotnet-gcdump, dotnet-monitor, dan dotnet-trace) dirancang untuk bekerja di berbagai lingkungan dan semuanya harus bekerja langsung dalam kontainer Docker. Karena itu, alat-alat ini adalah metode pilihan untuk mengumpulkan informasi diagnostik untuk skenario .NET Core yang menargetkan .NET Core 3.1 atau yang lebih baru dalam kontainer.
Anda juga dapat menginstal alat ini tanpa .NET SDK dengan mengunduh varian file tunggal dari tautan di paragraf sebelumnya. Penginstalan ini memerlukan penginstalan global runtime .NET versi 3.1 atau yang lebih baru, yang dapat Anda peroleh mengikuti salah satu metode yang ditentukan dalam dokumentasi penginstalan .NET atau dengan menggunakan salah satu kontainer runtime resmi.
Menggunakan alat CLI global .NET Core dalam kontainer sidecar
Jika Anda ingin menggunakan alat diagnostik CLI global .NET Core untuk mendiagnosis proses dalam kontainer yang berbeda, ingatlah persyaratan tambahan berikut:
- Kontainer harus berbagi namespace proses (sehingga alat dalam kontainer sidecar dapat mengakses proses dalam kontainer target).
- Alat diagnostik CLI global .NET Core memerlukan akses ke file yang ditulis runtime .NET Core ke direktori /tmp, sehingga direktori /tmp harus dibagi antara target dan kontainer sidecar melalui pemasangan volume. Ini dapat dilakukan, misalnya, dengan meminta kontainer berbagi volume umum atau volume Kubernetes emptyDir. Jika Anda mencoba menggunakan alat diagnostik dari kontainer sidecar tanpa berbagi direktori /tmp, Anda akan mendapatkan kesalahan tentang proses "tidak menjalankan runtime .NET yang kompatibel."
Menggunakan PerfCollect
dalam kontainer
Alat ini berlaku untuk: ✔️ .NET Core 2.1 dan versi yang lebih baru
PerfCollect
Skrip ini berguna untuk mengumpulkan jejak performa dan merupakan alat yang direkomendasikan untuk mengumpulkan jejak sebelum .NET Core 3.0. Jika menggunakan PerfCollect
dalam kontainer, ingatlah persyaratan berikut:
PerfCollect
memerlukan kemampuan tambahan untuk menjalankanperf
alat. Serangkaian kemampuan minimal yang diperlukan adalahPERFMON
danSYS_PTRACE
. Beberapa lingkungan memerlukanSYS_ADMIN
. Pastikan untuk memulai kontainer dengan kemampuan yang diperlukan. Jika set minimal tidak berfungsi, coba dengan set lengkap.PerfCollect
mengharuskan beberapa variabel lingkungan diatur sebelum aplikasi dimulai pembuatan profil. Ini dapat diatur baik di Dockerfile atau saat memulai kontainer. Karena variabel ini tidak boleh diatur di lingkungan produksi normal, biasanya hanya menambahkannya saat memulai kontainer yang akan diprofilkan. Dua variabel yang diperlukan PerfCollect adalah:DOTNET_PerfMapEnabled=1
DOTNET_EnableEventLog=1
Catatan
Saat menjalankan aplikasi dengan .NET 7, Anda juga harus mengatur DOTNET_EnableWriteXorExecute=0
selain variabel lingkungan sebelumnya.
Catatan
.NET 6 menstandarkan pada prefiks DOTNET_
daripada COMPlus_
untuk variabel lingkungan yang mengonfigurasi perilaku run-time .NET. Namun, prefiks COMPlus_
akan terus berfungsi. Jika Anda menggunakan versi runtime .NET sebelumnya, Anda masih harus menggunakan prefiks COMPlus_
untuk variabel lingkungan.
Menggunakan PerfCollect
dalam kontainer sidecar
Jika Anda ingin menjalankan PerfCollect
dalam satu kontainer untuk membuat profil proses .NET Core dalam kontainer yang berbeda, pengalamannya hampir sama kecuali untuk perbedaan ini:
- Variabel lingkungan yang disebutkan sebelumnya (
DOTNET_PerfMapEnabled
danDOTNET_EnableEventLog
) harus diatur untuk kontainer target (bukan yang berjalanPerfCollect
). - Kontainer yang berjalan
PerfCollect
harus memilikiSYS_ADMIN
kemampuan (bukan kontainer target). - Dua kontainer harus berbagi namespace proses.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk