Intro

Pandora es un sistema se monitorización del tipo de nagios, pero desarrollado en nuestro país y bastante (más) sencillo de utilizar. No es que vayamos a hablar de Pandora en esta entrada, sin embargo Pandora nos sirvió para detectar el problema que vamos a resolver. Cuando instalé el agente de Pandora en nuestro windows server 2012r2 lo primero que me llamó la atención fue que de cuando en cuando el servidor tenía picos de utilización de CPU. Lo de cuando en cuando es un decir, porque eran bastante frecuentes. Lo entendería si se están realizando alineamientos de secuencias con MEGA, o si hay muchos usuarios conectados simultáneamente y realizando múltiples tareas cada uno. Sin embargo, los picos de CPU se producían incluso a horas en las que nadie estaba trabajando en el servidor.

Al final, opté por desactivar las alertas de Pandora, porque me enmascaraban problemas reales en otros equipos.

Sin embargo, esta mañana he entrado en el servidor y he comprobado que había un servicio que estaba acaparando una gran cantidad de uso de la CPU. Se trataba del .Net runtime optimization service. Pues como se hace en estos casos, me fuí a buscar a Google y al final encontré una solución por parte de Johan Ardwirmark, un señor que se ve que en 2014 tuvo el mismo problema y sabía de esto más que yo. El caso es que publicó una solución simple al problema, que he probado y funciona. El artículo con la solución se puede encontrar en el siguiente enlace, pero como suelo hacer, por si se les ocurre borrarlo o parar el servidor o irse de vacaciones perpetuas o algo, pongo la solución aquí.

 

Solución

La solución consiste en ejecutar el siguiente snippet (que nombre más gracioso para el trozo de código, no?) en un Windows PowerShell ISE ejecutado como administrador. Yo ejecuté después de copiar y pegar, pero ahora que lo miro, creo que vale con cualquiera de las dos versiones que pongo debajo.

Versión 1

# Code snippet from Arjan Mensch
$ngens = Get-ChildItem -Path $env:windir\Microsoft.Net -Filter ngen.exe -Recurse;foreach($ngen in $ngens){& "$($ngen.Directory)\$($ngen)" executeQueuedItems} 
Versión 2
# Shorter version by Keith Garner
Get-ChildItem $env:SystemRoot\Microsoft.net\NGen.exe -recurse | %{ & $_ executeQueuedItems }

El caso es que después de ejecutarlo con el botón de la flecha verde (hoy estoy técnico, qué le vamos a hacer?) que aparece en la figura 1, la CPU volvió a valores normales. He de reconocer que en nuestro caso el sistema arrojó un número considerable de errores durante la ejecución de los snippets, al contrario de lo que se ve en el artículo de Johan.

 

Problema de la gráfica

Seguimos observando alta utilización de la CPU después de ejecutar el snippet anterior y vemos que Firefox es de los que más CPU consume. Otra vez Google al rescate. Se comenta que el problema puede ser que la configuración de la gráfica de la máquina virtual sea muy pobre, por lo que el sistema tira de CPU para suplir la falta de gráfica.

Para tratar de solucionar el problema hemos hecho dos cosas:

  • Cambiar el tipo de video a VGA
  • Duplicar la memoria de vídeo hasta 32MB

Parece que Firefox ya no es la aplicaicón que más CPU consume. Seguiremos de cerca el equipo.