Bagaimana cara menentukan aplikasi apa yang bocor memori non-halaman?


8

Baru-baru ini kami memiliki masalah pada server langsung kami yang menyebabkan Aplikasi Web kami berhenti merespons. Yang kami dapatkan hanyalah 503 kesalahan sampai kami mem-boot ulang server lalu itu baik-baik saja. Akhirnya saya melacaknya kembali ke httperr.log dan menemukan banyak kesalahan 1_Connections_Refused.

Penyelidikan lebih lanjut tampaknya menunjukkan bahwa kami telah mencapai batas kolam non-halaman. Sejak itu kami telah memantau memori kumpulan non-halaman menggunakan Poolmon.exe dan kami yakin kami telah mengidentifikasi tag yang menyebabkan masalah.

Tag   Type    Allocs       Frees       Diff       Bytes      Per Alloc
Even  Nonp  51,231,806   50,633,533   684,922   32,878,688      48

Jika kita menggunakan poolmon.exe / g itu menunjukkan Driver yang dipetakan sebagai [<tidak diketahui> objek acara].

Ini tidak banyak membantu sama sekali. Tim saya telah menghabiskan banyak waktu untuk meneliti masalah ini dan belum dapat menemukan proses untuk mempersempitnya ke aplikasi atau layanan tertentu. Saya mendapatkan pengertian bahwa kebanyakan orang tampaknya menyelesaikan masalah dengan mematikan proses pada mesin sampai mereka melihat memori non-halaman diatur ulang. Ini bukan apa yang ingin Anda lihat ketika bekerja pada mesin produksi.

Jika saya membuka Pengelola Tugas dan melihat daftar proses. Saya melihat MailService.exe dengan nilai NP Pool 105K ini adalah 36K lebih tinggi dari nilai proses yang tercantum kedua. Karena kami memiliki beberapa masalah dengan Server Surat kami di masa lalu (yang mungkin atau mungkin tidak terkait dengan masalah ini) firasat saya adalah ini yang menyebabkan masalah.

Namun, sebelum kita memulai kembali layanan, saya ingin memiliki sedikit kepastian lebih dari sekedar "firasat".

Saya juga sudah mencoba menggunakan poolmon.exe / c tetapi ini selalu mengembalikan kesalahan:

unable to load msvcr70.dll/msvcp70.dll

dan itu tidak membuat localtag.txt. Rekan saya harus mengunduh pooltag.txt dari internet karena kami tidak tahu di mana ia berada. Kami tidak memiliki win debugger atau win DDK yang diinstal (yang dapat saya lihat). Mungkin kesalahan di atas diberikan karena kita tidak menginstal keduanya - tetapi saya tidak tahu.

Akhirnya saya mencoba:

C:\windows\system32\driver\findstr /m /l Even *.sys

Ini mengembalikan daftar file .sys yang cukup besar dan sekali lagi sama sekali tidak membantu dengan masalah yang dihadapi.

Jadi pertanyaan saya adalah ini: Apakah ada cara lain untuk mempersempit penyebab kebocoran memori ini?

MEMPERBARUI:

Seperti yang disarankan di bawah ini, saya telah mencatat Pool Nonpaged Bytes untuk hari terakhir atau lebih untuk melihat apakah ada proses yang sedang tren. Sebagian besar semua proses tampaknya cukup statis dalam penggunaannya. Dua dari mereka terlihat sedikit berdetak. Saya akan terus memonitor ini selama beberapa hari ke depan.

Saya juga lupa menyebutkan sebelumnya bahwa tidak ada proses yang tampaknya menggunakan terlalu banyak pegangan.

PEMBARUAN 2:

Saya telah memantau ini selama beberapa minggu terakhir. Baik Bytes Nonpaged Pool untuk proses individu dan total Nonpaged Bytes Pool tetap relatif stabil selama waktu itu. Selama ini Windows telah diperbarui dan server reboot jadi saya bertanya-tanya apakah itu telah menyelesaikan masalah. Saya jelas tidak melihat pertumbuhan yang konsisten di Pool Bytes Nonpaged sekarang karena saya sebelum ini.


Mengapa tidak menggunakan perfmon untuk memantau Pool Nonpaged Bytes untuk semua proses dan mencari proses dengan memori pool nonpaged yang dapat dijalankan?
joeqwerty

Saya baru saja bermain dengan Performance Monitor dan mengaturnya untuk melakukan seperti yang Anda sarankan. Namun itu tidak benar-benar memberi tahu saya apa pun yang belum saya ketahui dari melihat Task Manager. MailService memiliki penggunaan Nonpaged Pool tertinggi tetapi hanya di 106K. Jadi bukan pistol merokok yang saya cari.
Pengembang

Cari peningkatan Pool Nonpaged Bytes dalam proses dari waktu ke waktu. Ini mungkin tidak mudah terlihat dengan mengambil pandangan cepat dari penggunaan dengan proses pada satu saat kapan saja. Anda dapat dengan mudah menangkap penggunaan dari waktu ke waktu dengan menyiapkan Log penghitung untuk menyimpan ke file CSV dan membukanya dengan Excel untuk menganalisis peningkatan penggunaan per proses. Setiap proses yang menunjukkan peningkatan 10% atau lebih dalam Pool Nonpaged Bytes dari startup sistem bocor memori dan kemungkinan proses yang menyebabkan masalah
joeqwerty

Alat praktis untuk membantu menangkap dan menganalisis data penghitung yang relevan adalah alat PAL, ditemukan di sini: pal.codeplex.com/releases/view/51623#ReviewAnchor . Ini adalah versi yang lebih baru daripada yang saya gunakan tetapi ada versi x86 dan sepertinya itu dapat digunakan pada W2K3.
joeqwerty

Saya sudah menyiapkan file log untuk merekam NP Pool Bytes. Poolmon sekarang mengatakan penggunaan memori non-halaman saya adalah 68MB. Itu telah tumbuh sekitar 2-3MB dalam beberapa jam yang saya telah mencoba untuk mencari tahu ini. Tetapi tidak ada pertumbuhan yang sesuai (yang bisa saya lihat) dalam nilai NP untuk proses. Bahkan nilai NP Pool terhadap proses individu tidak mendekati angka ini. Bahkan jika saya menambahkan semua nilai np pool yang terdaftar total akan beruntung menjadi 1MB bukan 68MB. Tapi mungkin saya kehilangan sesuatu di sini.
Pengembang

Jawaban:


6

Saya telah memantau ini selama sekitar 6-7 minggu sekarang dan akhirnya dapat memberikan jawaban yang pasti untuk masalah ini.

Pertama, Nonpaged Bytes untuk proses individual tidak benar-benar memberi tahu saya apa pun yang bermanfaat karena semuanya tampak cukup statis dalam penggunaannya. Ada paku tetapi penggunaannya selalu kembali ke garis dasar sesudahnya.

Total Memori Bytes Nonpaged adalah statis untuk sementara juga tetapi kemudian mulai meningkat secara bertahap dan kemudian spiking. Setelah lonjakan sekitar setengah memori dibebaskan dan kemudian tetap statis lagi (pada tingkat yang lebih tinggi) untuk sementara waktu hingga pola berulang. Melihat grafik saya perhatikan bahwa paku-paku ini sepertinya cukup teratur jaraknya dan ternyata mereka terjadi 2 minggu terpisah dan selalu pada hari Minggu.

Jadi pertanyaan selanjutnya adalah: Apa yang berjalan dua mingguan pada hari Minggu? Aku pergi melihat-lihat di Event Viewer dan setiap kali terjadi lonjakan McAfee berlari . Saya juga berpikir dengan masuk ke server secara teratur untuk memantau masalah ini, kami secara tidak sengaja memperburuk masalah karena McAfee memiliki pemindai waktu nyata dan saya percaya ini menyebabkan peningkatan yang lebih kecil yang kami lihat.

Saya berpikir bahwa pemindaian yang dijadwalkan tugas juga menjelaskan mengapa kami melihat Memori NP meningkat melekat pada tag objek Acara di PoolMon, bukan pada tag spesifik McAfee. Ini adalah hal utama yang benar-benar membawa kami menyusuri jalan setapak.

Sekarang kita akhirnya tahu apa yang menyebabkan kebocoran, kita dapat melakukan sesuatu. Sungguh luar biasa bahwa butuh waktu selama ini untuk melacaknya.

UPDATE : Sama seperti catatan akhir. McAfee diperbarui pada akhir pekan dan ini sepenuhnya menyelesaikan masalah Memori Non-Paged kami.

UPDATE 2 : Karena saya baru saja mendapatkan suara untuk ini, saya akan menambahkan pembaruan lebih lanjut untuk ini. Awalnya pembaruan ke McAfee tampaknya memperbaiki masalah kami yaitu kita tidak lagi melihat lonjakan besar dalam Memori NP secara berkala. Saya juga memperhatikan bahwa sejak pembaruan tampaknya McAfee tidak lagi menulis log ke Peraga Peristiwa secara default sekarang, yang bersembunyi ketika sedang memindai secara aktif.

Tapi kami masih melihat peningkatan bertahap dalam penggunaan memori NP. Sudah sampai pada titik di mana kita sekarang perlu me-reboot server kami setiap 2 minggu atau lebih. Sangat buruk bahwa kami baru saja memperoleh server baru dengan harapan bahwa perangkat keras dan perangkat lunak yang diperbarui akan membuat masalah ini hilang. TETAPI server kami yang sepenuhnya baru dengan hanya Windows Server 2008, SQL Server 2008 R2, dan McAfee yang diinstal masih MASIH menunjukkan kebocoran Memori NP . Hanya setelah saya benar-benar menghapus McAfee kebocoran itu berhenti dan tetap statis bahkan setelah kami menyiapkan server dengan semua perangkat lunak kami dalam persiapan untuk beralih ke sana.

Sejak itu saya sudah membaca, dan saya tidak tahu apakah ini benar, bahwa masalahnya bukan pada McAfee, tetapi dengan beberapa rutin Windows yang digunakan McAfee yang menyebabkan NP Memory bocor. Rupanya, aktivitas jaringan adalah penyebab kebocoran yaitu lebih banyak aktivitas jaringan => kebocoran lebih besar. Ini tampaknya konsisten dengan pengalaman kami, karena kebocoran semakin memburuk karena server kami semakin sibuk.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.