Saya memiliki Windows 2003 Server berjalan agak lambat di mana biaya komit dan penggunaan file halaman berdetak dan naik sampai akhirnya saya reboot. Untuk memperbaikinya, saya perlu mencari tahu apa yang menghabiskan semua memori, dan di sinilah misteri besarnya.
Statistik terkini dari Task Manager:
Physical Memory (K): 2096400
Commit Charge (K): 5364848
Page file usage: 5.11 GB
Baik, jadi mari kita tarik SysInternals Process Explorer dan periksa ukuran set yang berfungsi dari semua yang berjalan. Penyebab terbesar adalah contoh Tomcat menggunakan 121.980K WS, 481.284K Ukuran VM. Tidak ada yang mendekati menjelaskan biaya komit 5 GB.
Langkah selanjutnya: SysInternals pslist : pslist -m
, berpisah output dengan kolom dan kolom menghitung jumlah untuk 61 proses yang dilaporkan.
SUM (Working Set) : 681,484 K
SUM (Private Bytes): 593,424 K
Apakah saya salah paham secara mendasar tentang apa yang dilaporkan oleh alat? Saya selalu berada di bawah kesan bahwa OS akan benar-benar melakukan memori jauh lebih sedikit daripada jumlah penuh memori virtual yang dipetakan oleh suatu proses, dengan asumsi bahwa itu tidak akan benar-benar pernah menggunakan sebanyak itu, dan bahwa melihat VM di sini adalah ikan herring merah.
sumber
Jawaban:
JP, saya yakin komentar Anda bahwa ini adalah server uji build / unit otomatis yang menjalankan kode kurang stabil mengatakan itu semua. Dugaan saya adalah bahwa server ini perlu di-reboot berulang kali karena kode yang tidak stabil berjalan di atasnya mungkin memiliki kebocoran memori yang memberi Anda gejala yang Anda lihat. Kebocoran memori tidak akan didaftar pada pohon proses proses yang sedang berjalan karena mereka adalah memori yang diambil oleh proses yang tidak lagi ada, dan masih dialokasikan, meskipun proses yang terkait dengannya sudah lama hilang.
Dapatkan jendela perawatan yang sering untuk memungkinkan Anda me-reboot mesin ini secara otomatis, mungkin setiap malam, beberapa kali seminggu, atau setiap minggu tergantung pada kecepatan di mana perilaku ini mulai menunjukkan masalah kinerja.
Kami memiliki server Oracle Application Server di Windoze beberapa waktu lalu yang perlu di-reboot dua kali sehari. Kami mengusir para pengguna saat makan siang, dan di tengah malam setiap hari. Itu beberapa tahun yang lalu, dengan kode produksi yang seharusnya stabil dari Oracle.
sumber
Maaf hanya menyisipkan beberapa tautan - tetapi kami telah menggunakan beberapa teknik untuk menemukan kebocoran memori, menggunakan logparser dan PowerShell, jadi saya akan berbagi.
http://blogs.msdn.com/debuggingtoolbox/archive/2008/08/22/powershell-script-chart-and-statistics-from-top-20-objects-leaking.aspx
(Situs Debugger-Mu Tidak Diragukan lagi sangat bagus): http://blogs.msdn.com/carloc/archive/2007/09/14/something-you-need-to-know-before-start-debugging.aspx
Saya juga akan memberikan tautan ke wawasan Mark Russinovich yang sangat baik untuk Penggunaan Memori di Windows:
http://blogs.technet.com/markrussinovich/search.aspx?q=memory&p=1
Pendek membuka kasus Microsoft yang sebenarnya, situs Tim Kinerja memiliki banyak info bagus, juga: http://blogs.technet.com/askperf/Default.aspx?p=2
sumber
Alat utama untuk membantu mendiagnosis ini adalah perfmon. Penghitung yang akan saya lihat (untuk memulai) adalah:
Memory, Committed Bytes, ini adalah ukuran dari permintaan untuk memori virtual.
Process, Working Set, _Total virtual memory dalam "aktif" menggunakan
Paging File,% pagefile dalam penggunaan
Memory, Pages / Sec (ini bukan merupakan indikator dari memori rendah) , meskipun semua orang tampaknya menganggapnya demikian)
Memori, Output Halaman / Sec berapa banyak halaman memori virtual ditulis ke pagefile untuk membebaskan frame halaman RAM untuk keperluan lain setiap detik
Memori, Memori Cache Bytes
, Memori Bytes Non
Paged Pool, Pool Bytes
Memory, Kode Sistem Total Bytes
Memory, Sistem Driver Total Bytes
ketika jumlah ini mendekati 2GB Anda akan memiliki masalah kinerja biasanya karena arsitektur 32 bit
Memory, Available MBytes - ini mengukur berapa banyak RAM yang tersedia untuk memenuhi permintaan akan memori virtual (baik alokasi baru, atau untuk mengembalikan halaman dari pagefile).
Lihat juga http://members.shaw.ca/bsanders/WindowsGeneralWeb/RAMVirtualMemoryPageFileEtc.htm
sumber
Berapa lama server telah berjalan sejak reboot terakhir? Ini adalah fakta kehidupan yang disayangkan bahwa Windows memiliki kebocoran memori. yaitu Memori yang dialokasikan tidak selalu dilepaskan kembali ke sistem. Gejala-gejalanya persis seperti yang Anda lihat. Jika Anda belum melakukannya saya sarankan me-reboot setidaknya sekali seminggu. Banyak pusat data yang me-reboot Windows setiap hari, karena hal itu sangat mengurangi panggilan dukungan. Tentu saja itu jauh lebih mudah dilakukan ketika Anda menggunakan cluster karena tidak ada down time.
sumber
Dikatakan bahwa ada sysadmin di suatu tempat yang benar-benar memahami statistik memori Windows, tetapi saya belum pernah bertemu mereka.
Namun biasanya tidak terlalu sulit untuk menemukan proses pelanggaran. Coba gunakan Perfmon untuk melihat berbagai proses penghitung seperti gagang atau Halaman kesalahan / detik.
JR
Pikiran lebih lanjut: apakah Anda yakin memori Anda sebenarnya rendah. Kuncinya adalah apakah Anda mendapatkan paging. Jika tidak ada paging, Anda tidak kekurangan memori. Menggunakan PerfMon lihat di penghitung Memory - Pages / sec.
sumber
Ingat bahwa set kerja adalah sedikit memori yang sebenarnya diwakili oleh memori fisik NYATA. Anda juga memiliki biaya memori virtual, dan Windows melakukan pembagian halaman kode, beberapa potongan MFC akan dibagikan di antara banyak dan banyak proses tanpa menduplikasi penggunaan memori. Ditambah lagi Anda memiliki keinginan Windows yang tak henti-hentinya untuk menyimpan cache sistem file sebesar mungkin (saya pernah melihatnya menggelembung hingga 800MB pada laptop 2.5GB sebelumnya).
Manajemen memori Windows sangat kuat. Namun begitu Windows mulai paging, segalanya menjadi jelek, dan Anda SELALU harus meninggalkan ruang untuk cache sistem file - selalu selalu selalu. Saya secara rutin harus mematikan dan memulai kembali Firefox ketika 80+ tab saya mendorong konsumsi memorinya hingga 1.2gb / 1.2+ gb.
Windows juga mengaburkan garis sedikit, antara halaman yang ada di cache, dan halaman yang terdaftar sebagai memori / set kerja.
sumber