Peringatan Memori Windows 10 Rendah ketika saya memiliki banyak memori yang tersedia

25

Saya telah mengalami masalah di mana, jika sistem saya aktif selama beberapa hari tanpa reboot, saya akan mulai mendapatkan peringatan yang mengatakan "Tutup program untuk mencegah kehilangan informasi" dan kemudian dialog yang menyarankan saya menutup program, yang dapat saya batalkan atau tekan "tutup program" dan Windows akan menutup paksa sebagian atau semua aplikasi yang tercantum dalam dialog.

Saya membuka task manager, dan melihat bahwa hanya sekitar 30% dari memori saya saat ini sedang digunakan:

33% Pemanfaatan

Ketika saya membuka monitor sumber daya untuk melihat seberapa banyak memori yang dikomit digunakan oleh aplikasi tertentu, saya masih melihat penggunaan memori yang relatif rendah:

Monitor Sumber Daya

Saya punya masalah ini untuk sementara dan telah berjuang untuk menemukan solusi. Saya telah menyelidiki penyebab seperti kebocoran driver dengan menggunakan poolmon, tetapi tidak pernah melihat apa pun di poolmon yang cocok dengan apa yang orang lain gambarkan sebagai bendera merah untuk kebocoran memori driver. Apa yang membuat saya sangat bingung adalah mengapa Win10 mengatakan kepada saya untuk menutup aplikasi ketika saya hanya memiliki 33% dari memori sistem yang digunakan.

Brandon
sumber
3
Coba buka pengelola tugas dan buka tab kinerja. Apa yang ditampilkan bidang memori yang dikomit ?
DrZoo
Saya tidak menyimpan tangkapan layar untuk itu tetapi memori yang dikomit adalah persentase tinggi yang tersedia, sekitar 17,5gb / 19gb.
Brandon

Jawaban:

15

Tebakan liar di sini.

Anda telah menonaktifkan file swap Anda, mengikuti saran acak "mengoptimalkan" seseorang.

Anda memiliki semacam driver OS yang menginginkan sejumlah besar RAM fisik berturut-turut. Tetapi tidak bisa mendapatkannya karena semua RAM fisik telah terfragmentasi dari waktu ke waktu. Dan karena file swap dinonaktifkan, itu tidak dapat melakukan defragment RAM.

Aktifkan file swap Anda.

Seperti yang saya katakan, tebakan liar.

Zan Lynx
sumber
Yah, saya punya ukuran set pagefile maks 3gb. Apakah ini yang Anda maksud dengan swapfile atau apakah ini hal yang dikelola secara terpisah di Windows 10? Bukan tidak mungkin saya akan melakukan sesuatu seperti ini, saya memiliki masalah kinerja yang sangat buruk ketika saya pertama kali membangun mesin ini pada 10/2015 dan mencoba beberapa hal seperti menonaktifkan parkir inti untuk memperbaikinya. Akhirnya ada skema manajemen daya yang mengurangi daya saya menjadi 10% dan membuat kelaparan semua komponen dan itulah sebabnya saya memiliki masalah kinerja sistemik, tetapi mungkin saya mungkin telah melakukan sesuatu seperti yang Anda katakan selama episode itu.
Brandon
1
Ubah ukuran pagefile Anda menjadi "System Managed" dan masalah Anda kemungkinan akan hilang.
Scott Chamberlain
Saya pernah memiliki sistem yang dikelola, dan saya masih memiliki masalah yang sama, hanya perlu waktu lebih lama untuk terwujud. Ketika saya mengaturnya ke sistem yang dikelola, pagefile akan maksimal pada saya percaya 64GB, dan kemudian ketika berkomitmen naik sangat tinggi saya masih akan mendapatkan peringatan memori rendah yang sama. Tapi saya masih melihat 70% atau lebih memori fisik tersedia dan tidak ada indikasi di Resource Monitor bahwa lebih dari 60 + gb memori saat ini berkomitmen untuk setiap proses yang terdaftar.
Brandon
Saya sepenuhnya setuju dengan Zan dan Scott, ini adalah file halaman Anda yang menyebabkan masalah ini (lihat windowsitpro.com/windows-10/… untuk sumber lain yang juga mengatakan ini). Setel ke sistem yang dikelola, dan jika masalah muncul kembali, MAKA mulai selidiki.
Ƭᴇcʜιᴇ007
Jadi saya pikir sistem dikelola pagefile adalah jawaban inti di sini. Tampaknya setelah diatur ke 3gb statis tidak ideal di lingkungan Windows 10. Saya menerapkan solusi ini beberapa minggu yang lalu dan membiarkannya berjalan dalam penggunaan normal hanya untuk melihat apa yang terjadi dan sementara saya masih melihat lebih banyak memori yang dikomit daripada yang diperhitungkan dalam kolom memori yang dilakukan Resource Monitor, saya tidak kehabisan memori rendah. peringatan atau masalah sekarang.
Brandon
14

Re Q terakhir Anda - versi singkat: Pesan kesalahan adalah tentang "berkomitmen" ruang alamat virtual. Jika Anda melihat grafik Biaya Komit di snapshot layar kedua Anda, Anda akan melihat bahwa itu memang pada atau sangat dekat batas.

Jumlah RAM yang "bebas", "tersedia", atau "digunakan" tidak masalah. Khususnya kekurangan "tersedia" RAM sama sekali bukan alasan untuk pesan "rendah pada memori" atau "kehabisan memori".

Batas komit sama dengan total ukuran RAM + pagefile. Ketika memori yang dialokasikan dialokasikan, maka segera dibebankan ke "biaya komit" meskipun sebenarnya belum digunakan ... yang berarti bahwa tidak ada ruang RAM atau PF yang digunakan segera. Ruang fisik (apakah dalam RAM atau pagefile) hanya digunakan ketika memori sebenarnya direferensikan. Sejak saat itu harus ada suatu tempat, sampai program membebaskannya, atau seluruh proses berakhir.

Contoh: Misalkan Anda tidak memiliki pagefile, maka batas komit Anda adalah 16 GB (ukuran RAM Anda). Sekarang, anggaplah 8 proses masing-masing mencoba ke VirtualAlloc (MEM_COMMIT) 1 GB. Hasil: Biaya komit meningkat sebesar 8 GB. Namun, tidak ada dampak langsung pada RAM! Seolah-olah Anda membeli kertas di toko alat tulis, tetapi Anda tidak benar-benar mendapatkan kertas. Namun, setiap kali Anda membutuhkan lembar baru, satu lembar akan muncul secara ajaib. Sampai Anda menggunakan seluruh pad (ukuran wilayah yang dialokasikan).

Sekarang anggaplah masing-masing proses tersebut hanya benar-benar mengakses 100 MB dari 1 GB-nya. RAM yang digunakan hanya akan menjadi 800 MB.

Tetapi karena masing-masing dari mereka mungkin mereferensikan semua 1 GB-nya, OS harus memastikan bahwa 8 GB RAM + ruang pagefile ... well, hanya RAM jika tidak ada pagefile ... tetap tersedia hanya dalam kasus yang terjadi . Kembali ke toko alat tulis, mereka harus menyimpan stok kertas yang cukup untuk memberi semua orang sebanyak lembar yang mereka beli sebelumnya.

Karenanya, OS harus berhenti memungkinkan VirtualAlloc (MEM_COMMIT) untuk berhasil ketika jumlah saat ini mencapai batas.

Mengapa? Karena proses ini diharapkan untuk memeriksa hasil VirtualAlloc untuk melihat apakah itu berhasil. Setelah itu dilakukan dan menemukan bahwa alokasi berhasil, proses memiliki hak untuk berharap bahwa rujukan selanjutnya ke seluruh wilayah berkomitmen akan berhasil.

Jika Windows mengizinkan biaya komit untuk melebihi jumlah ruang yang tersedia untuk mewujudkan ruang itu, maka harapan itu tidak selalu dapat dipenuhi.

Solusi cepat adalah untuk meningkatkan ukuran default (= awal) dari pagefile Anda. Dari penjelasan di atas Anda harus dapat melihat mengapa ini akan menghindari pesan kesalahan meskipun tidak ada yang pernah ditulis ke file itu . Sekali lagi, OS memastikan bahwa ruang untuk semua biaya komit tersedia jika diperlukan . Ketika proses mengalokasikan memori yang dikomit, mereka hanya mengatakan "hei, OS, saya mungkin membutuhkan ini." Itu tidak berarti mereka akan benar-benar menggunakannya, dan itu tentu saja tidak berarti mereka sudah menggunakannya.

Untuk lebih lanjut, lihat jawaban saya di sini .

Sekarang .... mengapa Anda menggunakan komit sebanyak itu ketika proses Anda sepertinya tidak cocok dengan itu adalah pertanyaan lain. Untuk mulai melihat itu, tunjukkan tab Performance Task Manager, bagian Memory.

Jamie Hanrahan
sumber
Saya tidak punya kata-kata untuk menggambarkan jawaban yang begitu sempurna. Terima kasih.
Vinicius Tavares
-2

Kemungkinan lain adalah Anda menggunakan Win10 32-bit, bukan 64 bit. Meskipun Anda memiliki 16GB RAM diinstal, ada batasan OS 32-bit yang praktis menggunakan di atas 4 jerawatan. Selanjutnya, OS akan mengenakan batasan keras / per proses / pada jumlah RAM yang dapat diminta, terlepas dari RAM fisik. Jika itu masalahnya, tidak banyak yang dapat Anda lakukan selain beralih ke OS 64-bit atau menjalankan lebih sedikit aplikasi secara bersamaan.

Mekki MacAulay
sumber
2
Tidak mungkin menjalankan Win10 32-bit dan Task Manager menunjukkan total 16 GB, seperti halnya di OQ. Dan btw, batas per-proses pose OS adalah pada memori virtual, bukan RAM. Tidak ada panggilan yang dapat Anda lakukan di Windows untuk mengalokasikan RAM per se . (Yah, AWE, tapi itu membutuhkan hak istimewa tingkat admin dan hampir tidak ada yang menggunakan itu kecuali beberapa program sistem.) Anda mengalokasikan ruang alamat virtual (katakan dengan VirtualAlloc) dan kemudian menggunakannya; saat Anda menggunakannya, OS mengalokasikan RAM untuk proses Anda ("paging permintaan"). Tetapi tentu saja tidak semua itu harus direalisasikan dalam RAM pada satu waktu.
Jamie Hanrahan