Tengo un servidor de Windows 2003 que funciona un poco lento, donde la carga de confirmación y el uso del archivo de página aumentan hasta que finalmente reinicio. Para solucionar esto, necesito averiguar qué está consumiendo toda la memoria, y aquí es donde está el gran misterio.
Estadísticas actuales del Administrador de tareas:
Physical Memory (K): 2096400
Commit Charge (K): 5364848
Page file usage: 5.11 GB
Bien, entonces saquemos SysInternals Process Explorer y verifiquemos el tamaño del conjunto de trabajo de todo lo que se está ejecutando. El mayor culpable es una instancia de Tomcat que usa 121,980K WS, 481,284K VM Size. Nada allí se acerca a explicar el cargo de confirmación de 5 GB.
Siguiente paso: SysInternals pslist : pslist -m
divide la salida por columna y calcula sumas de columna para los 61 procesos que se informan.
SUM (Working Set) : 681,484 K
SUM (Private Bytes): 593,424 K
¿Estoy malentendiendo fundamentalmente lo que informan las herramientas? Siempre he tenido la impresión de que un sistema operativo realmente comprometería mucha menos memoria que la cantidad total de memoria virtual asignada por un proceso, bajo el supuesto de que en realidad nunca usará tanto, y que mirar VM aquí es un arenque rojo
fuente
Respuestas:
JP, creo que su comentario de que este es un servidor de prueba de unidad / compilación automatizado que se ejecuta menos que un código estable lo dice todo. Supongo que este servidor debe reiniciarse con frecuencia debido a que el código inestable que se ejecuta en él probablemente tiene pérdidas de memoria que le están dando los síntomas que está viendo. Las pérdidas de memoria no se incluirán en ninguno de los árboles de procesos de los procesos en ejecución, ya que son memorias que son capturadas por procesos que ya no existen y que aún se asignan, a pesar de que el proceso asociado con ellos ya no existe.
Obtenga una ventana de mantenimiento frecuente que le permita reiniciar automáticamente esta máquina, quizás todas las noches, un par de veces a la semana o semanalmente, dependiendo de la velocidad a la que este comportamiento comienza a presentar problemas de rendimiento.
Tenemos servidores de Oracle Application Servers en Windoze hace un tiempo que debían reiniciarse dos veces al día. Echamos a los usuarios a la hora del almuerzo, y en medio de la noche todos los días. Eso fue hace unos años, con un código de producción supuestamente estable de Oracle.
fuente
Lamento pegar algunos enlaces, pero hemos estado usando algunas técnicas para encontrar pérdidas de memoria, usando logparser y powershell, así que compartiré.
http://blogs.msdn.com/debuggingtoolbox/archive/2008/08/22/powershell-script-chart-and-statistics-from-top-20-objects-leaking.aspx
(El sitio Never Doubt Thy Debugger es excelente): http://blogs.msdn.com/carloc/archive/2007/09/14/something-you-need-to-know-before-start-debugging.aspx
También proporcionaré un enlace a la excelente visión de Mark Russinovich sobre el uso de memoria en Windows:
http://blogs.technet.com/markrussinovich/search.aspx?q=memory&p=1
Además de abrir casos reales de Microsoft, el sitio de Performance Team también tiene mucha buena información: http://blogs.technet.com/askperf/Default.aspx?p=2
fuente
La herramienta principal para ayudar a diagnosticar esto es perfmon. Los contadores que miraría (para empezar) son:
Memoria, Bytes comprometidos esto es una medida de la demanda de memoria virtual
Proceso, Conjunto de trabajo, _Total memoria virtual en uso "activo"
Archivo de paginación,% archivo de página en uso
Memoria, Páginas / seg (esto no es necesariamente un indicador de poca memoria , aunque todos parecen asumir que sí)
Memoria, salida de páginas / seg. cuántas páginas de memoria virtual se escribieron en el archivo de página para liberar marcos de página de RAM para otros fines cada segundo
Memoria, memoria de bytes de
memoria caché, memoria de bytes de paginación no paginada
, memoria de bytes paginada de reserva , memoria de bytes
totales del código del sistema, bytes totales
del controlador del sistema
cuando esta suma se acerque a 2 GB, tendrá problemas de rendimiento, generalmente debido a la arquitectura de 32 bits
Memoria, MBytes disponibles: esto mide la cantidad de RAM disponible para satisfacer las demandas de memoria virtual (ya sea nuevas asignaciones o para restaurar una página desde el archivo de página).
Ver también http://members.shaw.ca/bsanders/WindowsGeneralWeb/RAMVirtualMemoryPageFileEtc.htm
fuente
¿Cuánto tiempo lleva funcionando ese servidor desde el último reinicio? Es un hecho desafortunado de la vida que Windows tenga pérdidas de memoria. es decir, la memoria asignada no siempre se devuelve al sistema. Los síntomas son exactamente lo que estás viendo. Si aún no lo haces, te sugiero reiniciar al menos una vez a la semana. Muchos centros de datos reinician Windows todos los días, ya que hacerlo reduce en gran medida las llamadas de soporte. Por supuesto, eso es mucho más fácil de hacer cuando usas clústeres porque no hay tiempo de inactividad.
fuente
Se dice que hay un administrador de sistemas en algún lugar que realmente entiende las estadísticas de memoria de Windows, pero nunca los he conocido.
Sin embargo, no suele ser demasiado difícil encontrar un proceso que se porta mal. Intente usar Perfmon para ver los diversos contadores de proceso, como los identificadores o los errores de página / segundo.
JR
Reflexiones adicionales: ¿estás seguro de que tienes poca memoria? La clave es si está recibiendo paginación. Si no hay paginación, no tiene poca memoria. Usando PerfMon eche un vistazo al contador Memoria - Páginas / seg.
fuente
Recuerde que el conjunto de trabajo es el bit de memoria que en realidad representa la memoria física REAL. también tiene su carga de memoria virtual, y Windows comparte páginas de códigos, algunos fragmentos de MFC se compartirán entre muchos y muchos procesos sin duplicar el uso de la memoria. Además, tiene un deseo incesante de Windows de mantener el caché del sistema de archivos lo más grande posible (lo he visto aumentar a 800 MB en una computadora portátil de 2.5 GB antes).
La administración de memoria de Windows es muy robusta. Sin embargo, una vez que Windows comienza a paginar, las cosas se ponen feas y SIEMPRE tiene que dejar espacio para la memoria caché del sistema de archivos, siempre siempre siempre. Rutinariamente tengo que apagar y reiniciar Firefox cuando mis más de 80 pestañas controlan su consumo de memoria de hasta 1.2 gb / 1.2 + gb.
Windows también difumina un poco la línea, entre las páginas que están en el caché y las páginas que se enumeran como memoria / conjunto de trabajo.
fuente