Setelah posting melacak penggunaan CPU yang tinggi oleh kernel , Saya pikir saya telah men-debug masalah yang telah mengganggu saya, yaitu 20-30% penggunaan CPU yang konsisten oleh proses Sistem. Lihat saya posting sebelumnya tentang itu.
Saya mengatur Windows Performance Analyzer dan dapat melacak proses ini: Saya pikir itu ada hubungannya dengan file halaman yang menebak-nebak oleh nama fungsi, dan menonaktifkan file halaman saya, dan restart, tetapi windows malah memiliki file halaman dan melemparkan kesalahan. Jadi saya membuat pagefile kecil sekitar 100MB - 2048MB.
Itu tampaknya telah memecahkan masalah selama beberapa minggu, tetapi sekarang sudah di sini lagi, meskipun pagefile hanya 2GB. Tampaknya terjadi setelah sistem telah dinyalakan untuk sementara waktu. Waktu aktif saat ini adalah 8 hari.
Jika ada pakar kernel yang dapat memberikan saran tentang apa yang harus saya coba selanjutnya, saya akan senang melakukannya.
Namun Process Explorer menunjukkan utas berbeda di bawah gambar sistem. Saya tidak tahu bagaimana mendamaikan perbedaan ini:
Proses explorer biasanya menunjukkan hal di atas, meskipun di lain waktu dapat menunjukkan status filter debug ... dll.
(Itu selalu ThreadID 56, saya percaya). Tetapi beberapa jejak log selalu menunjukkan apa yang kita lihat di atas sebagai masalah.
EDIT
Menambahkan gambar seperti yang diminta untuk RAM. Ini adalah setelah restart baru di mana masalahnya tidak ada.
Jalur simbol yang dikonfigurasi seperti yang direkomendasikan oleh Blog untuk mempercepat pemuatan simbol
Penjelajah Proses
WPA
Ukuran file folder cache
Beberapa versi dbghelp.dll ditemukan di sistem. Saat ini menunjuk ke sistem, tetapi tidak tahu harus menunjuk ke mana.
MEMPERBARUI
Setelah mengikuti tautan untuk menemukan Proses Zombie , Saya menemukan data berikut (terpotong untuk menghapus entri kecil)
374 total zombie processes.
334 zombies held by explorer.exe(1768)
298 zombies of Fences.exe
9 zombies of LogonUI.exe
7 zombies of chrome.exe
10 zombies held by ctfmon.exe(4568)
2 zombies of chrome.exe
7 zombies held by dopus.exe(27672)
3 zombies of AcroRd32.exe
2 zombies held by RuntimeBroker.exe(12184)
2 zombies of WWAHost.exe
1 zombie held by SkypeHost.exe(190152)
1 zombie of SkypeApp.exe
1 zombie held by SecurityHealthService.exe(4536)
1 zombie of MsMpEng.exe
1 zombie held by svchost.exe(1988)
1 zombie of userinit.exe
Ini menyiratkan bahwa FENCES.exe adalah penyebabnya, jadi saya telah memperbarui program itu dan akan memeriksa lagi nanti. Juga menonaktifkan sinergi untuk memastikan bahwa bukan itu penyebabnya.
Perbarui 2
Setelah restart baru dan memperbarui pagar. Masalahnya masih ada pada proses zombie, jadi saya harus mencopot pagar untuk menyelesaikan masalah.
Ini adalah versi pagar
dan daftar proses zombie setelah restart baru.
16 total zombie processes.
7 zombies held by explorer.exe(9484)
5 zombies of Fences.exe
1 zombie of GoogleUpdateCore.exe
1 zombie of DropboxUpdate.exe
1 zombie held by svchost.exe(1788)
1 zombie of userinit.exe
sidenote
Tidakkah itu keren jika kita memiliki perangkat lunak AI yang dapat membantu semua hal ini?
Jawaban:
Jawaban cepat: Berikan rutinitas itu sedikit pekerjaan untuk dilakukan. Yang saya berpikir berarti menggunakan lebih sedikit ruang alamat virtual pada satu waktu, atau menambah lebih banyak RAM.
Detail: Pertama, rutinitas yang Anda lihat,
MiWalkPageTablesRecursively
, tidak ada hubungannya dengan file halaman secara langsung, melainkan dengan halaman meja . Tabel halaman adalah struktur dalam memori (dan hadir di semua sistem Windows terlepas dari konfigurasi pagefile). Setiap proses memiliki satu set tabel halaman, dan ada satu set untuk ruang alamat OS ("ruang kernel") juga.Tabel halaman terdiri dari entri tabel halaman; ada satu PTE untuk setiap halaman - 4K - dari ruang alamat virtual yang ditentukan proses. Dengan "terdefinisi", maksud saya ini mencakup ruang alamat yang dipetakan dan komitmen khusus proses, dan wilayah AWE jika ada; itu tidak termasuk ruang alamat yang dipesan atau gratis - wilayah yang akan melakukan pelanggaran akses jika Anda mencoba membaca atau menulisnya.
(Omong-omong: Anda tidak hanya akan memiliki tabel halaman bahkan jika Anda tidak memiliki pagefile. Anda juga akan tetap memiliki paging, dan kesalahan halaman ke dan dari disk, bahkan jika Anda tidak memiliki pagefile.)
Masalahnya di sini kemungkinan tidak melekat pada
MiWalkPageTablesRecursively
. Setelah semua fungsi ini (atau setara dengan nama lain) telah menjadi bagian dari Windows sejak NT 3.1. Itu fakta bahwa ia harus melakukan banyak pekerjaan. Ini mungkin berarti bahwa itu sering dipanggil.Petunjuk mengapa hal ini terlihat dalam rutinitas yang sebelumnya ada di stack. (Artinya, lebih dekat ke atas pada layar WPA.) Sepertinya penelepon
MiWalkPageTablesRecursively
dalam skenario iniMiWalkPageTables
, yang pada gilirannya dipanggil olehMiAgeWorkingSet
, yang pada gilirannya dipanggil olehMiTrimOrAgeWorkingSet
, yang pada gilirannya dipanggil olehMiProcessWorkingSets
, yang pada gilirannya dipanggil oleh ... itu sejauh yang kita butuhkan.Setiap proses dalam sistem Windows memiliki struktur yang disebut "set daftar kerja". Ini adalah daftar semua nomor halaman fisik yang telah rusak ke dalam RAM sebagai akibat dari kesalahan halaman proses. Utas (utas "Manajer Set Balance") dibangun setiap detik untuk melakukan pembersihan dan pemeliharaan pada set kerja setiap proses. Begitu
MiProcessWorkingSets
beralih melalui proses, berurusan dengan set kerja masing-masing proses pada gilirannya.Untuk setiap proses dalam sistem,
MiProcessWorkingSets
panggilanMiTrimOrAgeWorkingSet
. Nama rutin ini mengacu pada "memangkas" set kerja (yang berarti mengidentifikasi halaman yang lama tidak digunakan dan mengusir mereka dari proses untuk memberi ruang pada RAM untuk hal-hal lain), atau "menua" set kerja, yang berarti menambah "usia" penghitung pada setiap entri daftar set bekerja yang belum diakses sejak terakhir kali dipindai, atau memusatkan penghitung jika sudah. (Nama mengacu pada tugas "penuaan" yang dilakukan dalam akuntansi, biasanya setiap bulan atau setiap hari.) Penghitung "usia" kemudian digunakan oleh fungsi "trim" untuk mengidentifikasi halaman yang paling tidak digunakan.Dari kenyataan itu
MiTrimOrAgeWorkingSet
berakhir diMiWalkPageTablesRecursively
, kita dapat menyimpulkan bahwa mereka memindai ruang alamat virtual seperti yang didefinisikan oleh tabel halaman untuk menemukan halaman yang ada di set kerja. Sekarang pertimbangkan: Waktu yang dibutuhkan olehMiTrimOrAgeWorkingSet
untuk menangani setiap proses akan sebanding dengan ukuran ruang alamat virtual proses. Dan total waktu yang dibutuhkan untuk setiap melewatiMiProcessWorkingSets
akan secara kasar sebanding dengan jumlah proses.Entah hal ini berhadapan dengan jumlah halaman yang sangat besar dalam satu set proses kerja, atau harus berurusan dengan banyak proses.
Dan ... mengapa itu begitu sibuk? Itu tidak "memotong" set kerja sampai mereka berusia, dan jumlah yang "trim" set kerja tergantung pada tekanan RAM - yaitu, seberapa pendek Anda pada RAM.
Apakah sistem Anda kekurangan RAM? Silakan kirim buncang dari tab Performance Task Manager | Halaman memori, ditambah halaman Detail yang diurutkan berdasarkan kolom set Bekerja; ditambah tab Memory Monitor Resource, diurutkan berdasarkan kolom Hard Faults; dan halaman Penghitungan Penggunaan RAMmap.
Selain itu, silakan kirim lebih banyak jejak WPA yang Anda miliki, yang menunjukkan lebih banyak "kedalaman" panggilan. Atau poskan file .etl pada layanan berbagi di suatu tempat dan tautkan ke sini. (Zip dulu - kompres dengan sangat baik.)
Selain itu: Mengapa nama rutin tidak cocok antara WPA dan Process Explorer
Mengenai nama rutin, pertanyaan sebenarnya adalah "mengapa nama rutin yang ditampilkan di Process Explorer benar-benar salah." Ada dua alasan untuk ini dalam kasus Anda dan Anda harus memperbaiki keduanya.
Masalah pertama adalah sepertinya Anda tidak memiliki simbol yang dikonfigurasi dengan benar untuk Process Explorer. Mengkonfigurasinya untuk Windows Performance Analyzer tidak cukup.
Tanda pasti bahwa Anda tidak memiliki hak ini adalah bahwa semua atau hampir semua utas dalam proses "Sistem" muncul dengan nama modul (something.sys atau something.exe, biasanya ntoskrnl.exe) diikuti oleh offset , seperti
+0x245
- seperti pada penutup layar Anda. Tidak apa-apa untuk melihat beberapa seperti itu, tetapi Anda harus melihat sejumlah besar ntoskrnl! nama rutin diikuti oleh tidak mengimbangi.Untuk memperbaiki ini, lihat halaman ini dari Panduan Lapangan Analisis Kinerja Windows . Anda perlu mengatur jalur pencarian simbol Explorer - Anda dapat menggunakan jalur file simbol yang sama yang Anda atur untuk WPA - dan Anda perlu mengarahkan ProcExp ke DLL yang datang dengan Alat Debugging Windows. Jadi Anda harus memiliki Alat Debugging diinstal - bukan bahwa Anda menggunakan debugger secara langsung, tetapi Process Explorer membutuhkan DLL itu.
Alasan kedua untuk perbedaan ini adalah bahwa bahkan setelah Anda memiliki file simbol yang ditetapkan dengan benar untuk Process Explorer, nama-nama rutin yang ditampilkannya tidak akan sering cocok dengan nama-nama rutin tingkat-dalam yang diidentifikasi oleh Performance Analyzer. Anda harus menemukan kecocokan, pada nama rutin di dekat awal tumpukan (ditampilkan di bagian atas pohon panggilan rutin seperti yang ditunjukkan dalam WPA).
Misalnya - dalam kasus Anda, rutinitas pertama yang menarik adalah
KeBalanceSetManager
. (Dua sebelum itu sama untuk setiap utas dalam proses sistem, tetapiKeBalanceSetManager
adalah rutin yang merupakan rutinitas "tingkat atas" untuk utas ini.) Setelah simbol dikonfigurasikan dengan benar, Process Explorer akan menampilkan utas dengan itu sebagai "Mulai Alamat", seperti yang ditunjukkan di sini:Process Explorer tidak dapat menampilkan Anda
MiWalkPageTablesRecursively
karena itu adalah sekitar enam panggilan ke tumpukan dari apa yang dicatat sebagai alamat awal utas, dan bahkan bukan rutinitas terdalam saat ini (yaitu itu tidak di atas tumpukan) Informasi seperti itu (bahkan jika mudah tersedia, yang bukan) akan berubah terlalu cepat untuk berguna dalam tampilan Process Explorer, jadi itu tidak mencoba.Catatan: Bahkan dengan simbol yang benar, tidak jarang menemukan beberapa utas dalam proses sistem yang menunjukkan "Mulai Alamat" mis.
GemCCID.sys+0xd138
, seperti yang akan Anda lihat dalam contoh saya. Modul yang dipermasalahkan (GemCCID.sys) ini jelas bukan salah satu yang Microsoft menyediakan file simbol, jadi Process Explorer hanya perlu mengatakan "alamat awal utas sebesar 0xd138 byte dari awal kode dalam file ini, dan hanya itu yang saya tahu tentang itu. "Semoga ini membantu! Tolong beri tahu saya jika Anda memiliki pertanyaan lebih lanjut.
sumber
C:\Program File (x86)\Windows Kits\10\Debuggers\x64\dbghelp.dll
. Untuk jalur simbol Process Explorer yang Anda lakukan tidak ingin menunjukkan ... \ NGenPdbs_Cache! Itu hanya berisi PDB yang di-cache dari modul yang menyediakan dukungan untuk kode dot-net, yang sama sekali tidak relevan dengan kode mode kernel yang berjalan dalam proses Sistem. Ubah kesrv*c:\symbols*http://msdl.microsoft.com/download/symbols
. (lanjutan.)srv*c:\symcache*http://msdl.microsoft.com/download/symbols
jika kamu mau. Perlu diketahui bahwa Process Explorer tidak tahu tentang format simbol cache yang baru (file .symcache) yang dijelaskan di blog itu. Namun kedua cache bisa hidup berdampingan, jadi semuanya bekerja. Jangan khawatir tentang waktu pemuatan simbol di Process Explorer; cache file simbol berbasis folder gaya lama cukup cepat untuk ProcExp seperti yang dimilikinya jauh lebih sedikit simbol untuk dilihat daripada WPA.