none
Posible memory leak? RRS feed

  • Pregunta

  • Buenos dias a todos... tengo un problema de memoria en mi granja de Producción... Revisando los logs he visto el siguiente error, el cual creo que puede estar provocando el memory ley que hace que la memoria poco a poco vaya aumentando...

    Como se puede apreciar en el log, hay un WebPart que hemos implementado y que podría estar causando el error "Cepsa.SharePoint.WebParts.WPCalendario". Usamos SPDisposeCheck para revisar la liberación de todos los objetos COM como SPSite y SPWeb, y no nos ha dado ningún error/warning en dicho objeto ya que estamos usando using(){} en este caso.

    Viendo este log, se os ocurre que podria estar pasando? 

     

    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: {B15607FC-2414-47E0-9D45-CA25024470E1}  This SPRequest was allocated
    at   
     at Microsoft.SharePoint.Library.SPRequest..ctor()    
     at Microsoft.SharePoint.SPGlobal.CreateSPRequestAndSetIdentity(SPSite site, String name, Boolean bNotGlobalAdminCode, String strUrl, Boolean bNotAddToContext, Byte[] UserToken, String userName, Boolean bIgnoreTokenTimeout, Boolean bAsAnonymous)    
     at Microsoft.SharePoint.SPWeb.InitializeSPRequest()    
     at Microsoft.SharePoint.SPFormCollection.InitForms(Boolean bOnlyFormAttributes, Boolean bNeedInitAll)    
     at Microsoft.SharePoint.SPList.get_Forms()    
     at Microsoft.SharePoint.SPList.GetServerRelativeDefaultFormUrl(PAGETYPE pageType, Boolean useMobileForm)    
     at Cepsa.SharePoint.WebParts.WPCalendario.WPCalendarioUserControl.GenerarEventosDinamicos(SPListItem item)    
     at Cepsa.SharePoint.WebParts.WPCalendario.WPCalendarioUserControl.GenerarEventosDinamicos()    
     at Cepsa.SharePoint.WebParts.WPCalendario.WPCalendarioUserControl.Page_Load(Object sender, EventArgs e)    
     at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)    
     at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)    
     at System.Web.UI.Control.OnLoad(EventArgs e)    
     at System.Web.UI.Control.LoadRecursive()    
     at System.Web.UI.Control.AddedControl(Control control, Int32 index)    
     at Cepsa.SharePoint.WebParts.WPCalendario.WPCalendario.CreateChildControls()    
     at System.Web.UI.Control.EnsureChildControls()    
     at System.Web.UI.Control.PreRenderRecursiveInternal()    
     at System.Web.UI.Control.PreRenderRecursiveInternal()    
     at System.Web.UI.Control.PreRenderRecursiveInternal()    
     at System.Web.UI.Control.PreRenderRecursiveInternal()    
     at System.Web.UI.Control.PreRenderRecursiveInternal()    
     at System.Web.UI.Control.PreRenderRecursiveInternal()    
     at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)    
     at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)    
     at System.Web.UI.Page.ProcessRequest()    
     at System.Web.UI.Page.ProcessRequest(HttpContext context)    
     at Microsoft.SharePoint.Publishing.TemplateRedirectionPage.ProcessRequest(HttpContext context)    
     at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()    
     at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)    
     at System.Web.HttpApplication.PipelineStepManager.ResumeSteps(Exception error)    
     at System.Web.HttpApplication.BeginProcessRequestNotification(HttpContext context, AsyncCallback cb)    
     at System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context)    
     at System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr managedHttpContext, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)    
     at System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr managedHttpContext, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)    
     at System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr managedHttpContext, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)    
     at System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr managedHttpContext, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)
    

    PD.  No adjunto el código del metoto GenerarEventosDinamicos() por ser algo extenso...

    Muchas gracias a todos

     


    Oscar Martin Garcia | Blog: http://oscarmartin.org | Twitter: http://twitter.com/omartin1978
    viernes, 3 de febrero de 2012 7:47

Todas las respuestas

  • Hola Oscar,

    A pesar de que comentas que estáis usando SPDisposeCheck, entiendo que en tiempo de desarrollo, ¿puedes probar a pasarlo a la dll que tenéis en producción? Es por asegurar que todo está correcto en cuanto a SPSite y SPWeb.

     

    Un saludo


    ------------------------------------------------------------
    Juan Carlos González Martín MVP de SharePoint Server
    Director revista CompartiMOSS: http://www.gavd.net/servers/compartimoss/compartimoss_main.aspx
    Blog: http://geeks.ms/blogs/ciin
    Twitter: @jcgm1978
    ------------------------------------------------------------
    viernes, 3 de febrero de 2012 9:20
  • Hola Juan Carlos, gracias por tu rápida respuesta. Desconocía que se pudiera checkear con SPDisposeCheck directamente una dll, pensaba que únicamente se podía usar tiempo de desarrollo desde Visual Studio...

     

    Me podrias indicar como verificar una dll directamente con SPDisposeCheck?

     

    Muchas gracias por todo


    Oscar Martin Garcia | Blog: http://oscarmartin.org | Twitter: http://twitter.com/omartin1978
    viernes, 3 de febrero de 2012 9:25
  • Hola Oscar,

    Lo que tienes que hacer es lo siguiente:

    • Te traes la dll que tienes en producción al entorno de desarrollo.
    • Ejecutas SPDisposeCheck desde línea de comandos y especificas que quieres hacer el análisis para esa dll.

    La ruta de SPDisposeCheck debería <Unidad>\Program Files (x86)\SharePoint Dispose Check\...la utilidad de poder ejecutar SPDisposeCheck de esta forma es sobre todo que podemos ver si dlls de terceros tienen problemas de fugas de memoria.

    Un saludo


    ------------------------------------------------------------
    Juan Carlos González Martín MVP de SharePoint Server
    Director revista CompartiMOSS: http://www.gavd.net/servers/compartimoss/compartimoss_main.aspx
    Blog: http://geeks.ms/blogs/ciin
    Twitter: @jcgm1978
    ------------------------------------------------------------
    viernes, 3 de febrero de 2012 9:45
  • Hola de nuevo Juan Carlos, tras revisar las DLLs de Producción el SPDisposeCheck no ha encontrado ningún error, pero en el ULS se siguen registrando errores como el del inicio de este hilo... alguna idea por donde puedo seguir mirando??? Verdaderamente ando sin ideas ya...

    Muchas gracias otra vez


    Oscar Martin Garcia | Blog: http://oscarmartin.org | Twitter: http://twitter.com/omartin1978
    viernes, 3 de febrero de 2012 12:03
  • Hola,

    ¿Has revisado que estés siguiendo los patrones de disposado: http://msdn.microsoft.com/en-us/library/ie/aa973248(v=office.12).aspx (busca la versión para SharePoint 2010)? SPDisposeCheck no es 100 % efecitiva. Revisa también este post al respecto, aunque entiendo que no es tu caso: http://stephenvick.wordpress.com/2009/03/20/mystery-solved-spdisposecheck-missing-memory-leaks/

     

    Un saludo


    ------------------------------------------------------------
    Juan Carlos González Martín MVP de SharePoint Server
    Director revista CompartiMOSS: http://www.gavd.net/servers/compartimoss/compartimoss_main.aspx
    Blog: http://geeks.ms/blogs/ciin
    Twitter: @jcgm1978
    ------------------------------------------------------------
    viernes, 3 de febrero de 2012 12:34