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

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

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

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

33% de utilización

Cuando abro el monitor de recursos para ver cuánta memoria comprometida utilizan 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 una fuga de controlador mediante el uso de poolmon, pero nunca vi nada en poolmon que coincidiera con lo que otros han descrito como señales de alerta de una pérdida de memoria del controlador. Lo que me confunde particularmente es por qué Win10 me dice que cierre aplicaciones cuando solo tengo en uso el 33% de la memoria del sistema.

Respuesta1

Conjeturas descabelladas aquí.

Ha desactivado su archivo de intercambio, siguiendo el consejo aleatorio de "optimización" de alguien.

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

Habilite su archivo de intercambio.

Como dije, una suposición descabellada.

Respuesta2

Con respecto a su última pregunta, la versión corta: el mensaje de error se refiere al espacio de direcciones virtuales "comprometido". Si observa el gráfico de Commit Charge en la instantánea de la segunda pantalla, verá que efectivamente está en el límite o muy cerca.

No importa la cantidad de RAM que esté "libre", "disponible" o "en uso". En particular, la escasez de RAM "disponible" no es en absoluto el motivo del mensaje de "memoria baja" o "memoria insuficiente".

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

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

Ahora supongamos que cada uno de esos procesos sólo accede a 100 MB de su 1 GB. La RAM utilizada sería únicamente de 800 MB.

Pero como cada uno de ellospodríaHaga referencia a todo su 1 GB, el sistema operativo debe garantizar que 8 GB de RAM+espacio para el archivo de paginación... bueno, solo RAM en caso de que no haya un archivo de paginación... se mantenga disponible en caso de que eso suceda. Volviendo a la papelería, necesitan tener suficiente papel en existencia para darles a todos tantas hojas como compraron anteriormente.

En consecuencia, el sistema operativo debe dejar de permitir que VirtualAlloc(MEM_COMMIT) tenga éxito cuando la cantidad actual comprometida alcance 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 comprobado que la asignación tuvo éxito, el proceso tiene todo el derecho a esperar que sus referencias posteriores a toda la región comprometida tendrán éxito.

Si Windows permitió que el cargo de confirmación 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 paginación. A partir de la explicación anterior, debería poder ver por qué esto evitará el mensaje de error.aunque es posible que nunca se escriba nada en ese archivo. Nuevamente, el sistema operativo se asegura de que haya espacio disponible para todos los cargos de confirmación.en caso de que lo necesite. Cuando los procesos asignan memoria comprometida, simplemente dicen "oye, sistema operativo,podríaNecesito tanto." Eso no significa que realmente lo usarán, y ciertamente no significa que realmente lo hayan usado todavía.

Para más, vermi respuesta aquí.

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

Respuesta3

Otra posibilidad es que estés usando 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 por encima de 4 sea 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 hay mucho que puedas hacer aparte de cambiar a un sistema operativo de 64 bits o ejecutar menos aplicaciones simultáneamente.

información relacionada