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:
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:
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.
fuente
Respuestas:
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.
fuente
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.
fuente
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.
fuente