Archivo de la etiqueta: ULS Viewer

Script para habilitar CollectSPRequestAllocationCallStacks en SharePoint 2010

Una tarea que ha de realizar cualquier desarrollador de SharePoint 2010 es la labor de revisar los logs en los diferentes entornos de los que se cuenta…

Revisando los logs de ULS con la aplicación ULS Viewer (verdaderamente útil), me he encontrado con este mensaje de error relacionado con un memory leak (perdida de memoria):

An SPRequest object was not disposed before the end of this thread.
To avoid wasting system resources, dispose of this object or its
parent (such as an SPSite or SPWeb) as soon as you are done using it.
This object will now be disposed.  Allocation Id:
{646667A7-73BC-4DDD-B0FB-6EDFC315CCE7}  To determine where this
object was allocated, set
Microsoft.SharePoint.Administration.SPWebService.ContentService.CollectSPRequestAllocationCallStacks = true.

Este es un mensaje que no nos da mucha información sobre el objeto que esta generando la perdida de memoria al no ser liberado… para obtener mas información lo que debemos hacer es ver la pila de llamadas actual.

Para ello y como se especifica en la descripción del error, lo que debemos hacer es activar la propiedad CollectSPRequestAllocationCallStacks, para ello, lo mas sencillo es usar un script de PowerShell:

$contentService = [Microsoft.SharePoint.Administration.SPWebService]::ContentService
write-host "Actual: " $contentService.CollectSPRequestAllocationCallStacks
$contentService.CollectSPRequestAllocationCallStacks = $true
$contentService.Update()
write-host "Nuevo: " $contentService.CollectSPRequestAllocationCallStacks

Una vez hayamos realizado el cambio podemos volver a revisar los logs de ULS y ahora comprobaremos que nos muestra toda la información de la pila sobre el objeto que no esta siendo liberado.

 

Escribir en ULS con SharePoint 2010

SharePoint 2007/20010 dispone de un sistema de logs/trazar llamado Unified Logging System (ULS). Si quieres mas información sobre ULS puedes consultar este artículo de Microsoft: Introducción al registro del sistema de creación de registros unificado (ULS).

Cuando implementamos una aplicación sobre esta plataforma, es muy conveniente, registrar cualquier excepción al ULS para un futuro análisis, que nos permita evaluar y corregir el problema.

En SharePoint 2010 se implementa la clase SPDiagnosticsServiceBase, con la que podemos acceder de una forma mas cómoda que en versiones anteriores a este tipo de información, ya que cuenta con los métodos WriteEvent y WriteTrace, para ello.

El siguiente codigo muestra un ejemplo de como escribir en ULS volcando la información de una excepción capturada:

try
{
    var i = 0;
    var a = 2 / i;
}
catch (Exception ex)
{
    SPDiagnosticsService.Local.WriteTrace(0, new SPDiagnosticsCategory("Mi Categoria", TraceSeverity.Unexpected, EventSeverity.Error), TraceSeverity.Unexpected, ex.Message, ex.StackTrace);
}

En el caso que queramos volcar información al ULS sin necesidad de estar dentro de un “catch” puedes usar esto:

SPDiagnosticsService.Local.WriteTrace(0, new SPDiagnosticsCategory("Mi Categoria", TraceSeverity.Unexpected, EventSeverity.Error), TraceSeverity.Unexpected, "Mi descripcion del error", string.Empty);

Por ultimo, existe una herramienta de Microsoft, para visualizar estos archivos de logs, llamada ULS Viewer, que puedes descargar de forma gratuita desde aquí.