Esta semana tuve que resolver un problema de alto consumo de CPU y RAM de los procesos de Sharepoint, ej: owstimer y w3wp.
El CPU variaba entre 25% a 100 % continuamente, ocasionando que nos lance el siguiente error al ingresar: HTTP Error 503. The services is unavailable
Despúes de hacer un iisreset, y reiniciar el owstimer, volvia a la normalidad, pero por un tiempo, ya que volvía a consumir cpu y ram casi al 100%.
Revisando los logs veo que hay algún problema con los contadores del sistema, ya que no podía crear contadores: Unable to create system performance counter
PDH failure on counter \NOMBRESERVIDOR\ASP.NET\\Requests Current with error Unknown error (0xc0000bbc)
Performance Counter OS (pdh) call failed with error code PDH_INVALID_HANDLE.
Unable to create system performance counter NOMBRESERVIDOR\Memory\Available Mbytes\. The following exception was thrown: System.ComponentModel.Win32Exception: Unknown error (0xc0000bbc)
at Microsoft.SharePoint.Win32.SPPdh.CheckReturnValue(PDH_STATUS status, Boolean throwOnError)
at Microsoft.SharePoint.Utilities.SPPerformanceCounter.NextValue(Int32 retry, Int32 retryInterval)
at Microsoft.SharePoint.Utilities.SPPerformanceCounterMonitorInternal.UpdateValue()
at Microsoft.SharePoint.Utilities.SPPerformanceCounterMonitorInternal.Create(String computer, String category, String counter, String instance)
Entonces lo primero que hice es revisar si estos contadores estaban en el performance monitor, al ingresar me lanzó el siguiente error.
Revisando más en detalle con Process Monitor, veo que w3wp y owstimer está continuamente consultando por el archivo perfc409.dat
Este archivo es uno de la base de contadores del sistema. Puede haber varios archivos de este estilo perfcNNN.dat, perfdNNN.dat, perfhNNN.dat, y perfiNNN.dat. donde NNN representa el lenguaje del archivo (Ej perfc409.dat o perfc409.dat)
Perfc y perfd contienen los nombres para mostrar de un grupo de contadores, perfh y perfi contienen las descripciones correspondientes. Perfc, perfd, perfh y perfi inicialmente son idénticos, durante la configuración de Windows, perfc y perfh se actualizan cotinuamente. Perfd y perfi se utilizan para el servicio, por lo que cuando se instala un nuevo paquete de servicio, los contadores de bases de perfc y perfh se sustituyen con la información en el perfd actualizada y perfi.
Soluciones probadas
- Reconstruir manualmente los contadores del sistema mediante el siguiente KB http://support.microsoft.com/kb/300956/es y el comando Lodctr.exe /R
- Reconstruir los contadores mediante LodCtr.exe /R:PerfStringBackup.INI, donde PerfStringBackup.ini. Ver el siguiente artículo: http://blogs.technet.com/b/yongrhee/archive/2009/10/06/how-to-rebuild-performance-counters-on-windows-vista-server2008-7-server2008r2.aspx
- Copiar los archivos perfcNNN.dat, perfdNNN.dat, perfhNNN.dat, y perfiNNN.dat de otro servidor que esté funcionando OK, y renombrarlos a los que busca el sistema. Ejecutar de nuevo Lodctr.exe /R.
- Revisar group policies (Replace a process level token, Logon as a service, Impersonate a client after authentication, Adjust memory quotas for a process)
- Revisar permisos. Agregar los usuarios de los application pools usados por w3wp y el usuario de farm (seteado para owstimer.exe en services.msc). Agregarlos a los grupos Administrators (temporalmente),Performance Monitor Users, Performance Logs Users.
Ninguna de las soluciones previas funcionó, por lo que seguí revisando con process monitor,y me encontré que los procesos llamaban continuamente al la siguiente clave de registro.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\Disable Performance Counters
Veo que tiene el valor 1, que significa en este caso que están deshabilitados la creación de contadores.
La solución final fue cambiarlo a 0, y reiniciar el server. Después del reinicio todo volvió a la normalidad.
No hay comentarios:
Publicar un comentario