Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
oleh Jim Cheshire
Alat yang Digunakan dalam Pemecah Masalah ini:
- Diagnostik Debug 1.2
- Monitor Kinerja
Materi ini disediakan hanya untuk tujuan informasi. Microsoft tidak memberikan jaminan, tersurat maupun tersirat.
Gambaran Umum
Pemecah masalah ini akan membantu Anda mengidentifikasi penyebab CPU tinggi berkelanjutan di kumpulan aplikasi IIS. Penting untuk diingat bahwa penggunaan CPU normal meningkat saat aplikasi web melayani permintaan. Namun, jika Anda secara konsisten melihat CPU tetap pada tingkat tinggi (di area 80% atau lebih besar) untuk jangka waktu yang lama, performa aplikasi Anda akan menderita. Untuk alasan itu, penting untuk memahami penyebab CPU tinggi berkelanjutan sehingga dapat ditangani dan diperbaiki jika memungkinkan
Skenario
Kumpulan aplikasi di IIS mengalami periode CPU tinggi yang berkepanjangan yang melebihi 90%. Ketika aplikasi diuji, tidak ada masalah yang dihadapi. Namun, setelah aplikasi mengalami beban pengguna yang sebenarnya, CPU naik ke persentase tinggi dan tetap ada. Untuk memulihkan, kumpulan aplikasi harus dimulai ulang, tetapi setelah melakukannya, CPU kembali naik ke tingkat tinggi.
Kumpulan Data
Hal pertama yang harus Anda lakukan ketika Anda menemukan CPU tinggi adalah menentukan proses yang mengkonsumsi CPU. Anda bisa menggunakan tab Proses di Pengelola Tugas untuk melakukan ini. Pastikan Anda mencentang kotak Perlihatkan proses dari semua pengguna . Gambar 1 menunjukkan kotak ini dicentang dan menunjukkan proses w3wp.exe (proses yang menghosting kumpulan aplikasi IIS) yang mengkonsumsi CPU tingkat tinggi.
Gambar 1 - Pengelola Tugas memperlihatkan CPU tinggi.
Anda juga dapat menggunakan Monitor Performa untuk menentukan proses apa yang menggunakan CPU. Untuk informasi selengkapnya tentang menggunakan Monitor Performa, lihat Menganalisis Data Performa nanti di pemecah masalah ini.
Tip
Jika Anda perlu mengidentifikasi kumpulan aplikasi mana yang terkait dengan proses w3wp.exe tertentu, buka Prompt Perintah Administratif, beralih ke %windir%\System32\inetsrv
folder cd %windir%\System32\inetsrv
dan jalankan daftar appcmd wp. Ini akan menunjukkan pengidentifikasi proses (PID) dari proses w3wp.exe dalam tanda kutip. Anda dapat mencocokkan PID tersebut dengan PID yang tersedia di Task Manager.
Setelah Anda mengonfirmasi bahwa proses w3wp.exe mengalami CPU tinggi, Anda harus mengumpulkan dua informasi untuk menentukan apa yang menyebabkan masalah.
- Kumpulan pengumpul data Monitor Performa.
- Cadangan memori mode pengguna dari proses w3wp.exe.
Kedua hal ini perlu dikumpulkan selama peristiwa CPU tinggi.
Mengumpulkan Kumpulan Pengumpul Data Monitor Performa
Data Monitor Performa (Perfmon) seringkali sangat penting dalam menentukan penyebab masalah CPU yang tinggi. Ini juga bisa sangat membantu dalam mendapatkan tampilan "gambaran besar" tentang performa aplikasi Anda.
Data Perfmon dapat dilihat secara real-time atau dapat dikumpulkan dalam kumpulan pengumpul data yang dapat ditinjau nanti. Untuk memecahkan masalah CPU yang tinggi, kita perlu mengumpulkan kumpulan pengumpul data. Untuk membuat kumpulan pengumpul data untuk pemecahan masalah CPU tinggi, ikuti langkah-langkah ini.
Buka Alat Administratif dari Panel Kontrol Windows.
Klik dua kali pada Monitor Performa.
Perluas simpul Himpunan Pengumpul Data.
Klik kanan pada Pengguna yang Ditentukan dan pilih Baru, Kumpulan Pengumpul Data.
Masukkan CPU Tinggi sebagai nama kumpulan pengumpul data.
Pilih tombol radio Buat Secara Manual (Tingkat Lanjut).
Klik Berikutnya.
Pilih tombol radio Buat Log Data.
Centang kotak Penghitung Kinerja.
Klik Berikutnya.
Klik tombol Tambahkan.
Jika aplikasi Anda bukan aplikasi ASP.NET, lanjutkan ke langkah 19.
Gulir ke bagian atas daftar penghitung dan pilih .NET CLR Memory.
Dalam daftar instans, pilih <semua instans>.
Klik tombol Tambahkan untuk menambahkan penghitung ke daftar penghitung yang ditambahkan.
Pilih ASP.NET dari daftar penghitung dan klik Tambahkan.
Pilih aplikasi ASP.NET dari daftar penghitung.
Pilih <semua instans>dari daftar instans.
Klik Tambahkan.
Perluas Proses dari daftar penghitung. (Pastikan Anda memperluas Proses dan bukan Prosesor.)
Pilih % Waktu Prosesor dari objek Proses.
Pilih <semua instans>dari daftar instans.
Klik Tambahkan.
Perluas Utas dari daftar penghitung.
Pilih % Waktu Prosesor dari objek Utas.
Pilih <semua instans>dari daftar instans.
Klik Tambahkan.
Pilih Utas ID dari daftar instans.
Klik Tambahkan.
Dialog Anda sekarang akan terlihat seperti yang diperlihatkan dalam Gambar 2.
Gambar 2 - Membuat kumpulan pengumpul data.
Klik tombol OK lalu tombol Berikutnya. Catat tempat kumpulan pengumpul data disimpan. (Anda dapat mengubah lokasi ini jika perlu.) Kemudian klik Selesai.
Kumpulan pengumpul data belum berjalan. Untuk memulainya, klik kanan pada CPU Tinggi di bawah simpul yang Ditentukan Pengguna dan pilih Mulai dari menu.
Membuat Aturan Diagnostik Debug 1.2
Cara term mudah untuk mengumpulkan cadangan proses mode pengguna ketika kondisi CPU tinggi terjadi adalah dengan menggunakan Debug Diagnostics 1.2, atau DebugDiag. Anda dapat mengunduh DebugDiag dari URL berikut.
https://www.microsoft.com/download/en/details.aspx?id=26798
Instal DebugDiag 1.2 di server Anda dan jalankan. (Anda akan menemukannya di menu Mulai setelah penginstalan.) Saat Anda menjalankan DebugDiag, ini akan menampilkan dialog Pilih Jenis Aturan. Ikuti langkah-langkah ini untuk membuat aturan crash untuk kumpulan aplikasi Anda.
- Pilih Performa dan klik Berikutnya.
- Pilih Penghitung Kinerja dan klik Berikutnya.
- Klik Tambahkan Pemicu Perf.
- Perluas objek Prosesor (bukan Proses) dan pilih % Waktu Prosesor. Perhatikan bahwa jika Anda berada di Windows Server 2008 R2 dan Anda memiliki lebih dari 64 prosesor, silakan pilih objek Informasi Prosesor alih-alih objek Prosesor.)
- Dalam daftar instans, pilih _Total.
- Klik Tambahkan lalu klik OK.
- Pilih pemicu yang baru ditambahkan dan klik Edit Ambang seperti yang ditunjukkan pada Gambar 3.
- Pilih Di Atas di menu drop-down.
- Ubah ambang menjadi 80.
- Masukkan 20 untuk jumlah detik. (Anda dapat menyesuaikan nilai ini jika diperlukan, tetapi berhati-hatilah untuk tidak menentukan sejumlah kecil detik untuk mencegah pemicu palsu.)
- Klik OK.
- Klik Berikutnya.
- Klik Tambahkan Target Cadangan.
- Pilih Kumpulan Aplikasi Web dari menu dropdown.
- Pilih kumpulan aplikasi Anda dari daftar kumpulan aplikasi.
- Klik OK.
- Klik Berikutnya.
- Klik Berikutnya lagi.
- Masukkan nama untuk aturan Anda jika Anda mau dan catat lokasi tempat cadangan akan disimpan. Anda dapat mengubah lokasi ini jika diinginkan.
- Klik Berikutnya.
- Pilih Aktifkan Aturan Sekarang dan klik Selesai.
Tip
Anda dapat membuat cadangan beberapa kumpulan aplikasi dengan menambahkan beberapa target cadangan menggunakan teknik yang sama yang digunakan dalam langkah 13-15.
Gambar 3 - Menambahkan pemicu perf di DebugDiag.
Aturan ini akan membuat 11 file cadangan. 10 yang pertama adalah "mini dump" yang berukuran cukup kecil. Cadangan akhir akan menjadi cadangan dengan memori penuh, dan cadangan itu akan jauh lebih besar.
Setelah masalah CPU tinggi terjadi, Anda ingin menghentikan kumpulan pengumpul data Perfmon mengumpulkan data. Untuk melakukannya, klik kanan pada kumpulan pengumpul data CPU Tinggi yang tercantum di bawah simpul yang Ditentukan Pengguna dan pilih Hentikan.
Analisis Data
Setelah peristiwa CPU tinggi, Anda akan memiliki dua set data untuk ditinjau; kumpulan pengumpul data Perfmon dan cadangan memori. Mari kita mulai dengan meninjau data Perfmon.
Menganalisis Data Performa
Untuk meninjau data Perfmon untuk masalah Anda, klik kanan pada kumpulan pengumpul data CPU Tinggi yang tercantum di bawah simpul yang Ditentukan Pengguna dan pilih Laporan Terbaru. Anda akan melihat sesuatu yang mirip dengan layar yang ditampilkan di Gambar 4.
Gambar 4 - Perfmon menampilkan data CPU Tinggi.
Hal pertama yang harus dilakukan adalah menghapus semua penghitung saat ini sehingga Anda dapat menambahkan penghitung eksplisit yang ingin Anda tinjau. Pilih penghitung pertama dalam daftar. Kemudian gulir ke bagian bawah daftar dan klik penghitung terakhir sambil menahan tombol Shift di keyboard Anda. Setelah Anda memilih semua penghitung, tekan Hapus di keyboard Anda untuk menghapusnya.
Sekarang tambahkan penghitung Waktu Proses / % Prosesor menggunakan langkah-langkah ini.
- Klik kanan di mana saja di panel kanan Perfmon dan pilih Tambahkan Penghitung.
- Perluas objek Proses.
- Pilih % Waktu Prosesor dari daftar.
- Pilih <semua instans dari daftar instans>.
- Klik Tambahkan.
- Klik OK.
Anda sekarang akan memiliki tampilan yang menunjukkan grafik waktu prosesor yang digunakan oleh setiap proses di komputer selama kumpulan pengumpul data berjalan. Cara termampu untuk mengisolasi proses mana yang menggunakan tingkat CPU tertinggi adalah dengan mengaktifkan fitur sorotan Perfmon.
Untuk melakukannya, pilih penghitung pertama dalam daftar lalu tekan Ctrl+H. Setelah Anda melakukan ini, proses yang dipilih akan ditampilkan sebagai garis hitam tebal pada grafik.
Gunakan panah bawah pada keyboard Anda untuk menelusuri daftar proses hingga Anda menemukan proses yang menunjukkan penggunaan CPU terbanyak. Pada Gambar 5, Anda dapat dengan jelas melihat bahwa proses w3wp.exe menggunakan sejumlah besar CPU pada komputer. Ini mengonfirmasi bahwa kumpulan aplikasi IIS menyebabkan pemanfaatan CPU yang tinggi pada komputer.
Gambar 5 - Perfmon memperlihatkan penggunaan CPU w3wp.exe.
Tip
Perfmon dapat sangat berguna dalam menentukan masalah performa dalam aplikasi Anda. Data yang dikumpulkan dalam log Perfmon dapat menunjukkan kepada Anda berapa banyak permintaan yang dijalankan (menggunakan objek aplikasi ASP.NET dan ASP.NET) dan juga dapat menunjukkan kepada Anda data performa penting lainnya tentang performa aplikasi Anda.
Untuk sampai ke akar apa yang menyebabkan masalah CPU tinggi, mari kita tinjau cadangan yang dibuat menggunakan DebugDiag.
Analisis Cadangan dengan DebugDiag
DebugDiag memiliki kemampuan untuk mengenali banyak masalah dengan melakukan analisis cadangan otomatis. Untuk masalah khusus ini, Penganalisis Performa DebugDiag sangat cocok untuk membantu mengidentifikasi akar penyebab masalah CPU yang tinggi. Untuk menggunakan penganalisis, ikuti langkah-langkah berikut
- Pilih tab Analisis Tingkat Lanjut di DebugDiag.
- Pilih Penganalisis Performa.
- Klik Tambahkan File Data.
- Browser ke lokasi tempat cadangan dibuat. Secara default, ini akan menjadi subfolder
C:\Program Files\DebugDiag\Logs
folder. - Pilih salah satu cadangan lalu tekan Ctrl+A untuk memilih semua cadangan di folder tersebut.
- Klik Buka.
- Klik Mulai Analisis.
DebugDiag akan memakan waktu beberapa menit untuk mengurai cadangan dan memberikan analisis. Ketika telah menyelesaikan analisis, Anda akan melihat halaman yang mirip dengan yang ditunjukkan pada Gambar 6.
Gambar 6 - Laporan analisis DebugDiag.
Perhatikan bahwa bagian atas laporan memberi tahu Anda bahwa CPU tinggi terdeteksi. Di kolom kanan, Anda akan melihat rekomendasi yang menyertakan tautan ke 7 utas teratas menurut waktu CPU rata-rata. Klik tautan tersebut dan Anda akan melihat informasi tentang apa yang dilakukan konsumen CPU teratas tersebut. Gambar 7 menunjukkan apa yang dilakukan utas tersebut dalam aplikasi saya.
Gambar 7 - Detail tentang utas CPU tinggi.
Saya dapat mengetahui dari analisis ini bahwa halaman default.aspx di aplikasi FastApp sedang berjalan. Jika saya melihat lebih jauh ke bawah tumpukan panggilan (di bagian bawah halaman), saya dapat melihat bahwa utas ini melakukan perangkaian string. (Perhatikan panggilan ke System.String.Concat pada tumpukan panggilan.) Jika saya menganalisis utas CPU teratas lainnya, saya melihat pola yang sama.
Langkah selanjutnya adalah meninjau peristiwa Page_Load di halaman default.aspx aplikasi FastApp. Ketika saya melakukan itu, saya menemukan kode berikut.
htmlTable += "<table>";
for (int x = 0; x < 5000; x++)
{
htmlTable += "<tr>" + "<td>" + "Cell A" + x.ToString() + "</td>";
htmlTable += "<td>" + "Cell B" + x.ToString() + "</td>" + "</tr>";
}
htmlTable += "</table>";
Kode semacam ini pasti akan menyebabkan CPU tinggi. Lihat https://support.microsoft.com/kb/307340
di Pangkalan Pengetahuan Microsoft untuk informasi selengkapnya.
Kesimpulan
Dengan menggunakan Perfmon dan DebugDiag, Anda dapat dengan mudah mengumpulkan data yang dapat membantu dalam menentukan penyebab CPU tinggi di kumpulan aplikasi. Jika Anda tidak dapat menemukan akar penyebab menggunakan teknik ini, Anda dapat membuka tiket dukungan dengan Microsoft melalui https://support.microsoft.com/ dan kami dapat membantu Anda menentukan penyebab masalah Anda. Dengan memiliki data Perfmon dan cadangan yang siap untuk kami ketika Anda membuka kasus, Anda akan secara dramatis mengurangi jumlah waktu yang diperlukan bagi kami untuk membantu Anda.