Pregunta

Tengo un sitio web en el que he estado trabajando durante aproximadamente un año. Recientemente, comenzó a lanzar System.AccessViolationException de vez en cuando, en mi máquina de desarrollo, principalmente, cuando estaba lejos de la máquina ...

No he cambiado nada en el código del servidor en semanas, ya que he estado trabajando al 100% en la parte de Javascript, y este error comenzó a aparecer recientemente.

Además, el código que estoy haciendo es 100% administrado. No estoy haciendo ninguna interoperabilidad, llamando a archivos DLL extraños, nada. Es puro VB.Net, así que no veo cómo podría generar uno de estos yo mismo ...

Ahora, he estado usando esta nueva máquina durante un par de meses, y no funciona al 100%. Cada 2 o 3 días obtengo una pantalla azul, por ejemplo. No he tenido tiempo de diagnosticarlo correctamente, pero sospecho que puedo tener un chip RAM defectuoso.

¿Es posible que una RAM defectuosa pueda provocar una excepción AccessViolationException?
¿O tengo un problema real que debería estar investigando? (además de mi RAM)


UPDATE:

Realmente no puedo encontrar DONDE ocurre el error, realmente.
Me sale la "excepción no controlada, ¿quieres depurar?" diálogo, y cuando adjunto el depurador, tengo la lista de subprocesos, donde tengo todos los subprocesos de ASP.Net, y 3 los creo yo mismo.
Para estos 3 tengo una Pila de llamadas, y todos se detienen en una llamada Sleep () (que es de esperar).
Para todos los otros hilos, incluido el que VS señala como el problema, no tengo Pila de llamadas. Tampoco tengo detalles sobre la excepción en absoluto.

Así que no sé si ocurre cada vez en el mismo lugar o no.

En cuanto a memtest, sí, voy a hacer algo así, solo espero tener ALGO tiempo para hacerlo pronto, pero mientras tanto, quería saber si esto podría explicar este problema.


ACTUALIZACIÓN 2:

Encontré esto en el registro de eventos ...

Se produjo una excepción no controlada y el proceso finalizó.

Application ID: DefaultDomain    
Process ID: 6632    
Exception: System.AccessViolationException

Message: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

StackTrace:    at System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr pHandler, RequestNotificationStatus& notificationStatus)
   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)

¿Alguna idea de qué hacer con esto?
Gracias
Daniel

¿Fue útil?

Solución

¿Es posible que una RAM defectuosa pueda provocar una AccessViolationException?

Sí, esto es posible. Si la memoria subyacente de un proceso no se comporta de manera predecible, sí, podría dar lugar a muchos tipos diferentes de fallas de la aplicación, incluida una excepción AccessViolation.

¿Es probable que una RAM defectuosa conduzca a una excepción AccessViolationException?

Yo diría que es mucho más probable que sea una falla en su programa o biblioteca a la que llama. Sin embargo, el primer paso es descubrir por qué, o más importante, dónde se produce la excepción AccessViolationException. Intente adjuntar un depurador, rompa las AccessViolationExceptions y vea lo que realmente está sucediendo.

También la sugerencia de Ben S es buena para descartar el caso de RAM rápidamente.

Otros consejos

Si alguna vez tiene dudas sobre la RAM defectuosa, simplemente ejecute memtest86 .

Pero si el error siempre ocurre en la misma llamada, probablemente no sea RAM.

¿Esto solo sucede en tu máquina de desarrollo? En caso afirmativo, la RAM / disco duro defectuoso (archivo de página) es muy posible. También es posible que desee reinstalar .NET Framework en caso de que una de las bibliotecas (tal vez una de las DLL de imágenes nativas) se haya dañado.

En pocas palabras:

Si el error ocurre en diferentes secciones de código cada vez, eso es un buen indicador de que algo está mal con su sistema en su conjunto.

Por otro lado, si el error ocurre repetidamente en el mismo fragmento de código, entonces es casi seguro que ese fragmento es el culpable.

Como se señaló en una respuesta anterior, use Memtest86 + para confirmar que su memoria es buena o no.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top