Mengapa total sumber daya Monitor dan Task Manager penggunaan RAM bahkan tidak menambahkan hingga total penggunaan Memori Fisik? [duplikat]

28

Pertanyaan ini sudah ada jawabannya di sini:

Saya telah memperhatikan ini pada banyak mesin Windows yang berbeda, pada banyak kesempatan yang berbeda: penggunaan RAM yang dilaporkan oleh Task Manager atau Resource Monitor sering tampak menambah jumlah yang secara signifikan lebih rendah dari jumlah aktual yang digunakan.

Misalnya, berkali-kali di laptop atau desktop saya, saya telah melihat sesuatu seperti 7GB sedang digunakan, namun total RAM yang Bekerja lebih dari 3GB. Saya hanya tidak tahu di mana itu digunakan!

Berikut adalah contoh ekstrem yang saya perhatikan hari ini di Resource Monitor pada server:

Monitor sumber daya
Klik untuk ukuran penuh

Jika Anda mengklik kanan gambar dan membuka di tab baru, dan melihat angka-angka, Anda akan melihat bahwa Perangkat Kerja (yang tidak termasuk memori virtual nonfisik) bertambah hingga sekitar 1,7GB. Saya mendapatkan nomor yang sama dengan menambahkan penggunaan RAM di Task Manager ketika "Tampilkan proses dari semua pengguna" diaktifkan.

Sekarang, inilah tangkapan layar tab Performance task manager:

Pengelola tugas
Klik untuk ukuran penuh

Ini mengatakan memori fisik 7.6GB sedang digunakan.

Saya melihat ini sepanjang waktu, di komputer pribadi, laptop, dan sekarang server: total penggunaan RAM yang dilaporkan oleh alat sistem hanya menyumbang sekitar 1/4 dari penggunaan RAM yang saya amati. WTF sedang berlangsung ???

Apakah ada penjelasan yang memuaskan tentang di mana semua RAM saya berada? Apa yang melahapnya, dan mengapa tidak meninggalkan jejak?

EDIT: Ini gambar penggunaan RAM grafis, seperti yang diminta pengguna:

Penggunaan RamMap
Klik untuk ukuran penuh

EDIT 2: Menanggapi respons James, berikut adalah gambar proses yang tidak di-paging poolmon.exe, diurutkan berdasarkan ukuran:

masukkan deskripsi gambar di sini

Hasil ini membingungkan saya. poolmondengan benar menyatakan bahwa saya memiliki 6GB kumpulan non-halaman yang digunakan, tetapi semua proses kolam non-halaman berukuran kurang dari 8MB.

Apa artinya ini? Apakah poolmongagal mendeteksi beberapa proses menggunakan kumpulan non-halaman?

DumpsterDoofus
sumber
Bisakah Anda memposting gambar tab Resource Monitor> Memory Anda (hanya bagian bawah dengan warna dan angka). Itu akan lebih jitu.
whs
2
@Ramhound: Terima kasih telah mengarahkan saya ke tautan itu! Sayangnya, seperti yang diminta, saya telah mengunggah gambar peta grafis Memori Fisik Resource Monitor, dan bagian Siaga Memori Fisik kurang dari 2% dari total penggunaan RAM. Jawaban David Schwartz menunjukkan bahwa penggunaan RAM "tersembunyi" berasal dari RAM Siaga (yaitu, RAM yang digunakan untuk data cache dan kode tidak digunakan), dan itu tidak terjadi di sini. Karena itu, saya kira jawaban David tidak menjelaskan apa yang sedang terjadi.
DumpsterDoofus
Gunakan program RamMap, dan jelajahi dengan lebih banyak., Sejauh ini mungkin ada beberapa driver yang gila? tapi memang itu bukan standby (cache). Apakah Anda menjalankan program khusus yang memungkinkan untuk memperbaiki ram, atau yang seharusnya mempercepat komputer? Adakah item driver ganjil yang khusus untuk komputer Anda?
Psycogeek
2
Tautan ke "dijawab sebelumnya" tidak mencakup kasus ini.
Jamie Hanrahan

Jawaban:

26

Maaf, saya tahu ini kedengarannya seperti tanggapan sembrono ... tetapi jawaban untuk pertanyaan dalam judul Anda adalah "karena mereka tidak seharusnya."

Atau untuk membuatnya lebih sopan: Ada banyak penggunaan RAM yang tidak dalam perangkat kerja pribadi proses. Beberapa di antaranya ada di perangkat kerja bersama proses - tetapi Anda tidak bisa mendapatkan gagasan yang dapat diandalkan tentang penggunaan aktual di sana, karena berbagi; menambahkan angka proses akan memberi Anda hasil yang terlalu besar.

Hal-hal lain yang menempati RAM, seperti kumpulan non-halaman, bagian penduduk dari kumpulan halaman, dan bagian-bagian tetap dari penggunaan ruang kernel lainnya, sama sekali tidak muncul di tampilan "proses" Task Manager.

Mengenai masalah spesifik Anda:

Pada tampilan Task manager, lihat bagian "memori kernel"? Anda memiliki "memori tanpa halaman" 6 GB (itu kumpulan tanpa halaman). Itu bagian dari bagian "Sedang digunakan" dalam grafik kedua Anda. Kelompok non-halaman tidak dikenakan biaya untuk proses apa pun, itulah sebabnya menambahkan nomor per-proses di task manager tidak mendekati total yang digunakan. Beberapa pengemudi kemungkinan besar menggunakannya. Ini adalah jumlah yang sepenuhnya berlebihan; itu harus di bawah 1 GB. driver apa pun yang bertanggung jawab atas bagian berlebihan dari penggunaan kumpulan non-halaman tidak diragukan lagi buggy.

RAMmap dapat mengkonfirmasi ini (pada tab "Gunakan Hitungan", lihat total untuk "Non-Halaman Pool") tetapi tidak dapat membantu Anda menemukan driver yang menyebabkannya.

Berikut cara menemukannya: Dapatkan salinan alat Microsoft "poolmon". Ini adalah alat karakter-mode (anak laki-laki, apakah pernah) didistribusikan dengan Windows Driver Kit. Untuk Windows 7 WDK adalah unduhan gratis . Anda harus mengunduh semuanya (ini ISO) dan menginstalnya, tetapi Anda dapat memilih untuk menginstal alatnya saja, jika itu yang Anda inginkan.

Temukan poolmon di direktori WDK - pastikan untuk memilih yang tepat, 32- atau 64-bit - dan jalankan dari prompt perintah administrator. Anda akan mendapatkan tampilan seperti ini:

masukkan deskripsi gambar di sini

Sekarang, tekan tombol "p" (tidak, saya tidak bercanda. Tidak ada menu di sini!) Sampai kolom "Type" hanya menampilkan "Nonp". Kemudian tekan "b" (dua kali jika perlu) untuk mengurutkan tampilan dalam urutan menurun dengan kolom Bytes (yang sudah dilakukan dalam sampel di sini).

Kemudian lihat kolom "Tag" untuk baris paling atas. Dalam kasus (jelas buatan) yang ditampilkan di sini adalah "Kebocoran". (Sistem ini menjalankan driver yang sengaja disadap untuk menyebabkan masalah ini - ini adalah kolam bocor "yang bocor").

btw, garis yang disorot adalah yang diubah sejak pembaruan sebelumnya ke layar kuno ini.

Sekarang cari c: \ Windows \ System32 \ Drivers untuk file .sys yang berisi string itu. Dalam hal ini Anda akan mencari "Leak", seperti ini:

c:\windows\system32> findstr /s Leak *.sys

Kemudian cari web untuk referensi ke string itu dan / atau nama driver itu.

Kembali ke sini dan melaporkan nama lengkap, nama pabrikan, dll. Dari file .sys juga akan sangat membantu.

(Taruhan saya adalah bahwa tag yang Anda temukan adalah ECMC, drivernya adalah intmsd.sys, dan itu terkait dengan produk yang disebut ExpressCache atau IntelliMemory. Saya akan "mencopot" produk itu. Ada pembaruan untuk memperbaiki masalah, tetapi bahkan dengan versi tetap saya belum pernah melihat kinerja sistem yang ditingkatkan oleh produk ini; pada dasarnya duplikat fungsi yang sudah ada di Windows.)

Jika Anda tidak dapat menemukannya dengan cara itu, langkah selanjutnya adalah menggunakan "Windows Performance Toolkit". Cari di forum ini untuk string itu, dengan jawaban oleh magicandre1981, untuk caranya. Abaikan jawaban yang menyebutkan xperf - ini adalah versi alat yang lebih lama.

PEMBARUAN: Menurut komentar, OP melakukan hal di atas dan menemukan bahwa meskipun poolmon melaporkan ukuran total kolam tanpa halaman memang besar, semua potongan yang dialokasikan tampaknya kecil. Dugaan saya (juga dalam komentar) adalah bahwa ini disebabkan oleh apa yang akan saya sebut kolam "kembung": Pool dialokasikan, kemudian dibebaskan, tetapi karena beberapa alasan jumlah RAM yang dialokasikan ke pool tidak menyusut untuk mencerminkan "membebaskan" . Mengikuti prosedur yang dijelaskan dalam jawaban ini oleh magicandre dapat mengidentifikasi pelakunya.

Jamie Hanrahan
sumber
Terima kasih telah menyelidiki lebih jauh dari yang dimiliki orang lain! Saya akan mencari-cari kebocoran poolmonhari ini jika saya punya waktu, dan mencoba membaca jawaban Anda lebih dekat juga untuk memastikan saya memahaminya. Apakah Anda mengatakan mungkin ada kebocoran memori? Jika demikian, itu sepenuhnya masuk akal, karena kami sedang mengerjakan perangkat lunak yang diketahui mengalami kebocoran memori yang mengerikan.
DumpsterDoofus
@DumpsterDoofus: Ya. Mungkin ada kebocoran memori pada driver mode kernel. Ini berbeda dari kebocoran memori di suatu aplikasi.
Jamie Hanrahan
Jadi saya akhirnya bisa berjalan poolmon.exedi server yang dimaksud, dan mengedit pertanyaan saya untuk menyertakan tangkapan layar. poolmonmenyatakan saya memiliki 6GB kumpulan halaman (seperti yang Anda tunjukkan dari tangkapan layar Task Manager saya), tetapi ketika saya melihat hanya proses "Nonp" dan mengurutkan berdasarkan ukuran, semuanya kecil (yang terbesar adalah 8MB). Apakah Anda punya ide mengapa poolmontidak mendeteksi sebagian besar penggunaan kumpulan non-halaman?
DumpsterDoofus
2
Ah ... masalahnya di sini adalah kata "penggunaan". Jadi Anda memiliki 6 GB kumpulan halaman, tetapi tampaknya hanya sebagian kecil saja yang digunakan saat ini. Sayangnya tidak ada yang saya ketahui (bukan TM, bukan poolmon, bukan RAMmap) menunjukkan berapa banyak sebenarnya pool yang digunakan. Dugaan saya adalah bahwa ada pengguna kolam berat pada satu waktu, jadi kolam itu diperluas untuk menampungnya, dan kemudian pengguna berat itu pergi. Karena cara pool ditangani, tidak mudah untuk membebaskan RAM setelah dialokasikan untuk itu, kecuali alokasi itu dalam potongan besar yang bersebelahan. Saya sarankan menonton ini setelah sistem baru dinyalakan.
Jamie Hanrahan
Ada versi poolmon.exe yang tersedia di Alat Dukungan untuk Server 2003 ( serverfault.com/questions/84479/… ) - agak lama, tetapi ini hanya unduhan 5,2MB, dan masih berjalan pada (setidaknya) Server 2016.
mwfearnley