Advertencias de memoria baja de Windows 10 cuando tengo mucha memoria disponible

25

He tenido un problema en el que, si mi sistema está en funcionamiento durante unos días sin reiniciar, comenzaré a recibir advertencias que dicen "Cerrar programas para evitar la pérdida de información" y luego un diálogo que sugiere que cierre los programas, que puedo cancelar o presionar "cerrar programas" y Windows forzará a cerrar algunas o todas las aplicaciones enumeradas en el cuadro de diálogo.

Abro el administrador de tareas y veo que solo alrededor del 30% de mi memoria se está utilizando actualmente:

33% de utilización

Cuando abro el monitor de recursos para ver cuánta memoria comprometida está siendo utilizada por aplicaciones específicas, todavía veo un uso de memoria relativamente bajo:

Monitor de recursos

He tenido este problema por un tiempo y he luchado por encontrar una solución. He investigado causas como la pérdida de un controlador usando poolmon, pero nunca vi nada en poolmon que coincidiera con lo que otros han descrito como señales de alerta para una pérdida de memoria del controlador. Lo que me confunde particularmente es por qué Win10 me dice que cierre las aplicaciones cuando solo utilizo el 33% de la memoria del sistema.

Brandon
fuente
3
Intente ir al administrador de tareas y vaya a la pestaña de rendimiento. ¿Qué muestra el campo de memoria comprometida ?
DrZoo
No guardé una captura de pantalla, pero mi memoria comprometida era un alto porcentaje de disponible, algo así como 17.5gb / 19gb.
Brandon

Respuestas:

15

Adivinanzas salvajes aquí.

Ha deshabilitado su archivo de intercambio, siguiendo los consejos aleatorios de "optimización" de alguien.

Tiene un controlador de sistema operativo de algún tipo que quiere un gran bloque de RAM física consecutiva. Pero no puede obtenerlo porque toda la RAM física se ha fragmentado con el tiempo. Y debido a que el archivo de intercambio está deshabilitado, no puede hacer una desfragmentación de RAM.

Habilite su archivo de intercambio.

Como dije, supongo que salvaje.

Zan Lynx
fuente
Bueno, tengo un tamaño de archivo de paginación establecido de 3 gb máximo. ¿Es esto lo que quieres decir con swapfile o es algo administrado por separado en Windows 10? No es imposible que hubiera hecho algo como esto, tuve problemas de rendimiento extremadamente malos cuando construí esta máquina por primera vez en 10/2015 y probé varias cosas como deshabilitar el estacionamiento central para solucionarlo. Terminó habiendo un esquema de administración de energía que estaba reduciendo mi potencia al 10% y eliminando todos los componentes y por eso tuve problemas de rendimiento sistémico, pero es posible que haya hecho algo como lo que dijiste durante ese episodio.
Brandon
1
Cambie el tamaño de su archivo de página a "Sistema administrado" y sus problemas probablemente desaparecerán.
Scott Chamberlain
Una vez tuve un sistema administrado, y todavía tenía el mismo problema, me tomaría más tiempo manifestarlo. Cuando lo configuré en el sistema administrado, el archivo de paginación alcanzaría un máximo de 64 gb, y luego, cuando el compromiso se elevó realmente, todavía recibiría las mismas advertencias de poca memoria. Pero todavía vería aproximadamente un 70% de memoria física disponible y ninguna indicación en el Monitor de recursos de que más de 60 gb de memoria están actualmente comprometidos con algún proceso de la lista.
Brandon
Estoy totalmente de acuerdo con Zan y Scott, es su archivo de paginación lo que está causando este problema (consulte windowsitpro.com/windows-10/… para otra fuente que también lo dice). Configúrelo como administrado por el sistema, y ​​si el problema vuelve a aparecer, ENTONCES comience a investigar.
Ƭᴇcʜιᴇ007
Así que creo que el archivo de paginación administrado por el sistema fue la respuesta principal aquí. Parece que tenerlo configurado en un estático 3gb simplemente no es ideal en el entorno de Windows 10. Implementé esta solución hace un par de semanas y la dejé correr en uso normal solo para ver lo que sucedió y aunque todavía veo mucha más memoria comprometida de la que se cuenta en la columna de memoria comprometida del Monitor de recursos, no me estoy quedando sin poca memoria advertencias o problemas ahora.
Brandon
14

Re su última Q: la versión corta: el mensaje de error es sobre el espacio de direcciones virtuales "comprometido". Si observa el gráfico Commit Charge en su segunda captura de pantalla, verá que, de hecho, está en el límite o muy cerca.

La cantidad de RAM que es "libre", "disponible" o "en uso" no importa. En particular, la escasez de RAM "disponible" no es absolutamente la razón del mensaje de "poca memoria" o "falta de memoria".

El límite de confirmación es igual al total de RAM + tamaño del archivo de paginación. Cuando se asigna la memoria comprometida, se carga inmediatamente a "carga de compromiso" aunque aún no se haya utilizado realmente ... lo que significa que no se usa espacio RAM o PF de inmediato. El espacio físico (ya sea en la RAM o en el archivo de paginación) solo se usa cuando se hace referencia a la memoria. A partir de ese momento, debe tener un lugar donde estar, hasta que el programa lo libere o hasta que finalice todo el proceso.

Ejemplo: suponga que no tiene un archivo de paginación, por lo tanto, su límite de confirmación es de 16 GB (el tamaño de su RAM). Ahora, suponga que 8 procesos cada intento de VirtualAlloc (MEM_COMMIT) 1 GB. Resultado: el cargo de compromiso aumenta en 8 GB. ¡Sin embargo, no hay un impacto inmediato en la RAM! Es como si compraras un bloc de papel en la papelería, pero en realidad no recibiste ningún papel. Sin embargo, cada vez que necesita una nueva hoja, aparece mágicamente. Hasta que use todo el pad (el tamaño de la región asignada).

Ahora suponga que cada uno de esos procesos solo accede a 100 MB de su 1 GB. La RAM utilizada solo sería de 800 MB.

Pero dado que cada uno de ellos puede hacer referencia a todos sus 1 GB, el sistema operativo debe garantizar que 8 GB de RAM + espacio de archivo de paginación ... bueno, solo RAM en caso de que no haya un archivo de paginación ... se mantiene disponible en caso de que eso suceda . Volviendo a la papelería, necesitan mantener suficiente papel en stock para dar a todos las hojas que compraron previamente.

En consecuencia, el sistema operativo debe dejar de permitir que VirtualAlloc (MEM_COMMIT) tenga éxito cuando la cantidad actual comprometida alcanza el límite.

¿Por qué? Porque se espera que el proceso verifique el resultado de VirtualAlloc para ver si tuvo éxito. Una vez que lo haya hecho y haya encontrado que la asignación tuvo éxito, el proceso tiene todo el derecho de esperar que sus referencias posteriores a toda la región comprometida tengan éxito.

Si Windows permitió que el cargo de compromiso excediera la cantidad de espacio disponible para realizar ese espacio, entonces esa expectativa no siempre podría cumplirse.

Una solución rápida es aumentar el tamaño predeterminado (= inicial) de su archivo de página. A partir de la explicación anterior, debería poder ver por qué esto evitará el mensaje de error , aunque nunca se escriba nada en ese archivo . Nuevamente, el sistema operativo se asegura de que haya espacio disponible para todo el cargo de confirmación en caso de que lo necesite . Cuando los procesos asignan memoria comprometida, solo dicen "hey, sistema operativo, podría necesitar esto". Eso no significa que realmente lo usarán, y ciertamente no significa que realmente lo hayan usado todavía.

Para más información, mira mi respuesta aquí .

Ahora ... por qué estás usando tanto commit cuando tus procesos no parecen sumar es otra pregunta. Para comenzar a ver eso, muestre la pestaña Rendimiento del Administrador de tareas, sección Memoria.

Jamie Hanrahan
fuente
No tengo palabras para describir una respuesta tan perfecta. Gracias.
Vinicius Tavares
-2

Otra posibilidad es que esté utilizando Win10 de 32 bits, no de 64 bits. Si bien tiene 16 GB de RAM instalados, existen limitaciones del sistema operativo de 32 bits que hacen que el uso práctico sea superior a 4 irregular. Además, el sistema operativo impondrá límites estrictos / por proceso / sobre la cantidad de RAM que se puede solicitar, independientemente de la RAM física. Si ese es el caso, no puede hacer mucho más que cambiar a un sistema operativo de 64 bits o ejecutar menos aplicaciones simultáneamente.

Mekki MacAulay
fuente
2
No sería posible ejecutar Win10 de 32 bits y hacer que el Administrador de tareas muestre un total de 16 GB, como lo hace en el OQ. Y, por cierto, los límites por proceso que plantea el sistema operativo están en la memoria virtual, no en la RAM. No hay ninguna llamada que pueda hacer en Windows para asignar RAM per se . (Bueno, AWE, pero eso requiere un privilegio de nivel de administrador y casi nada lo usa excepto algunos programas del sistema). Asigna espacio de direcciones virtuales (digamos con VirtualAlloc) y luego lo usa; a medida que lo usa, el sistema operativo asigna RAM a su proceso ("paginación de demanda"). Pero, por supuesto, no todo debe realizarse en la RAM al mismo tiempo.
Jamie Hanrahan