¿Cuándo ocurre una Excepción OutOfMemonry? Si intentamos crear un objeto nuevo y el recolector de basura no encuentra memoria libre, podemos detectar la excepción; Otro caso es que cuando el CLR necesita memoria y el sistema no puede proporcionarla, también se lanzará la excepción. Pero en este punto, nuestra solicitud no puede detectar el error.
Análisis de depuración del desbordamiento de memoria (OutOfMemoryException).
El espacio de direccionamiento del sistema operativo de 32 bits es 4G, de los cuales 2G está ocupado por el sistema operativo, lo que significa que la memoria que queda para el proceso de usuario es solo 2G (lo que también descuenta parte del espacio ocupado por la imagen cuando se carga el programa, generalmente solo se puede usar alrededor de 1,6G~1,8G). Si un proceso necesita solicitar memoria mientras está en ejecución y el sistema operativo no puede asignarle espacio de memoria, generará una excepción fuera de memoria, System.OutOfMemoryException en .net (La excepción que se lanza cuando no hay suficiente memoria para continuar la ejecución de un programa). Aunque la manifestación final es OutOfMemoryException, la causa puede ser diferente, y antes de resolver este problema, es necesario analizar el estado actual de uso de memoria del proceso para encontrar la causa correcta antes de prescribir el medicamento adecuado. Aquí tienes algunos consejos para depurar este tipo de problemas.
Para más información, por favor consulte:http://blog.csdn.net/lazyleland/article/details/6704661
Sistema de error de desbordamiento de memoria en pool de aplicaciones iis. OutOfMemoryException
En un servidor web ASP.NET, la cantidad de memoria que ASP.NET puede usar normalmente no es igual a toda la cantidad de memoria. En el archivo de configuración machine.config, <processModel>hay una propiedad "memoryLimit" en la sección de configuración, el valor de esta propiedad es un valor porcentual, el valor por defecto es "60", es decir, el proceso ASP.NET (puedes ver el proceso ASP.NET en el administrador de tareas, aspnet_wp en IIS5, w3wp en IIS6) puede usar el 60% de toda la memoria física. Cuando la cantidad de memoria utilizada por ASP.NET supera este límite, IIS comienza a reciclar automáticamente el proceso, es decir, crea un nuevo proceso para gestionar las solicitudes Http y recupera la memoria ocupada por el proceso antiguo.
Cuando tenemos un servidor con una memoria grande, el valor de "memoryLimit" debe ajustarse adecuadamente. Por ejemplo, si preparamos un servidor con chemas-microsoft-com ffice marttags" />t="on"> memoria 4G, entonces t="on">4G×60%=t="on">2.4G. Sin embargo, para sistemas operativos Win32, todo el espacio de memoria que puede ocupar un proceso es solo t="on">2G. Cuando la memoria ocupada por el proceso ASP.NET empieza a alcanzar t="on">2G, porque no alcanza el "umbral de reciclaje" de t="on">2.4G, IIS no iniciará la operación de reciclaje, pero debido a las limitaciones de Win32, en realidad es imposible asignar más memoria a este proceso, por lo que es probable que se elimine OutOfMemoryException. Para evitar esto, tuvimos que reducir adecuadamente el "Límite de memoria" para que IIS pudiera procesar el reciclaje antes.
Microsoft recomienda que ASP.NET proceso no ocupe más del 60% de la memoria, y que lo mejor sea que el valor real calculado no supere t="on">800M. Dicho esto, para un servidor con t="on" > memoria 4G, lo mejor es poner la propiedad "memoryLimit" en "20". Establecer un umbral de reciclaje adecuado para que IIS recicle procesos de manera oportuna es muy importante para garantizar el funcionamiento estable de todo el servidor y evitar OutOfMemoryException.
En IIS6, el umbral de reciclaje para ASP.NET procesos ya no se determina por la propiedad "memoryLimit" en la sección de configuración, sino por los ajustes en la configuración del pool de aplicaciones en IIS Manager.
Sin embargo, incluso si estas configuraciones están configuradas correctamente, no hay garantía de que las OutOfMemoryExceptions se eviten por completo, y las razones pueden ser variadas y complejas, como las operaciones de recuperación de memoria que pueden ser demasiado lentas. Los desarrolladores siempre deben tener en cuenta no usar ni desperdiciar memoria innecesariamente en su código. :)
Si tienes un servidor con una memoria grande y te frustra el límite de usar t="on" >2G en el sistema operativo Win32, existen dos soluciones alternativas:
- Inicia el ordenador en modo /3GB y sigue el enlace después del artículo sobre la participación en el método
- Usa Windows Server 2003 64 bits Edition
Varios elementos para evitar el desbordamiento de memoria
Si quieres crear un array, asegúrate de que tenga el tamaño correcto.
Asegúrate de tener suficiente memoria para uso interno y nuevos objetos alojados.
Si estás programando en el .NET Compact Framework, el entorno de ejecución del lenguaje público lanza esta excepción cuando no hay suficiente memoria para uso interno o un nuevo objeto gestionado. Para evitar esta excepción, deberías evitar escribir métodos grandes que ocupen 64KB o más de memoria.
El uso excesivo de memoria gestionada suele ser causado por:
- Lee grandes conjuntos de datos en la memoria.
- Crear demasiadas entradas en caché.
- Sube o descarga archivos grandes.
- Usa demasiadas expresiones regulares o cadenas al analizar archivos.
- Estatus de visualización excesiva.
- Hay demasiados datos o demasiadas sesiones en el estado de sesión.
- Esta excepción puede surgir cuando se llama a un método sobre un objeto COM y el método devuelve un tipo definido por el usuario que contiene un array seguro (un array de tamaños indefinidos) con un mensaje adicional "No hay suficiente espacio de almacenamiento para completar esta operación". Esto se debe a que .NET Framework no puede gestionar campos estructurales con tipos de array seguros.
Un ejemplo de un sobreuso de memoria causado por el uso inadecuado de arrays de bytes
Si el archivo de salida es particularmente grande, puede informar directamente de System.OutOfMemoryException. La forma correcta de hacerlo es generar el flujo de bytes del archivo en segmentos, pero existe asp.net método ya hecho llamado Response.WriteFile(filePath) que hace precisamente eso.
La siguiente es la forma correcta de escribir:
Cuando un asp.net experimenta un desbordamiento de memoria, una forma sencilla de solucionarlo es recuperar el pool de aplicaciones de inmediato. Pero esto no resolvió completamente el problema.
Desbordamiento de memoria al crear un tipo de imagen (System.OutOfMemoryException)
Código de error: System.Drawing.Image myimg=System.Drawing.Image.FromFile(file. Nombre completo);
Excepciones que se lanzan cuando un archivo abierto no es un archivo imagen:
MSDN: Este método genera una excepción OutOfMemoryException si el archivo no tiene un formato de imagen válido, o si GDI+ no soporta el formato de píxel del archivo.
Información tan anormal es fácilmente engañosa.
<processModel> elemento
Configura la configuración del modelo de proceso ASP.NET en el servidor web de Internet Information Services (IIS). La sección solo puede configurarse en el archivo <processModel> Machine.config y afecta a todas las aplicaciones ASP.NET que se ejecutan en el servidor.
Aviso Para información sobre este elemento, por favor lea la sección "Notas".
Ejemplo de configuración de la estructura:
exégesis
El sistema de configuración de código gestionado no lee <processModel> los ajustes de configuración. En su lugar, se lee directamente por la aspnet_isapi.dll DLL no gestionada. Los cambios de esta sección entran en vigor después de reiniciar IIS.
Si instalas ASP.NET en un controlador de dominio, debes tomar medidas especiales o la instalación no funcionará. Para más información, véase Ubicado enhttp://support.microsoft.comEl artículo de Microsoft en la Base de Conocimientos CHS315158 "No ASP.NET puede usar la cuenta ASPNET predeterminada en controladores de dominio".
Cuando ASP.NET ejecuta en modo nativo de la versión 6 de IIS, utiliza el modelo de proceso de IIS 6 e ignora <processModel> los ajustes de la sección. Para configurar la identidad del proceso, el reciclaje u otros valores del modelo de proceso, utiliza la interfaz de usuario de Internet Services Manager para configurar procesos worker IIS para tu aplicación.
El valor de tiempo está formateado como "horas:minutos:segundos". Si solo se da un solo número sin dos puntos, se asume que el valor son minutos; Por lo tanto, timeout="4" es equivalente a timeout="00:04:00".
Si una aplicación ASP.NET hace que ASP.NET procesos de trabajo (Aspnet_wp.exe en Windows 2000 y Windows XP Professional y W3wp.exe en Windows Server 2003) se reinicien y muestra un mensaje de error que indica que el reinicio se debe a una condición sospechosa de bloqueo sin conexión, debería aumentar responseDeadlockInterval configurando.
Guardar nombres de usuario y contraseñas en el registro
Guardar nombres de usuario y contraseñas en el registro
Para cifrar nombres de usuario y contraseñas y almacenarlos en el registro, establece el nombre de usuario y la contraseña de la siguiente manera.
usuarioNombre="registro:HKLM\Software\AspNetProceso,Nombre"
password="registry:HKLM\Software\AspNetProcess,Pwd"
La parte de la cadena que viene después del registro de palabras clave y antes de la coma indica el nombre de la clave del registro que ASP.NET abre. La parte posterior a la coma contiene un nombre de valor de cadena desde el que el ASP.NET leerá las credenciales. Se requieren comas y las credenciales deben almacenarse en la unidad de configuración HKLM. Si la configuración está mal formateada, ASP.NET no iniciará el proceso de trabajo y aparecerá posteriormente en la ruta del código de fallo de creación de cuenta actual.
Las credenciales deben estar en REG_BINARY formato y contener la salida de una llamada a la función API de Windows CryptProtectData. Puedes crear y almacenar credenciales de cifrado en el registro con la aplicación Configuración de la Consola del Registro de ASP.NET (Aspnet_setreg.exe), que utiliza CryptProtectData para completar el cifrado. Para descargar código fuente de Aspnet_setreg.exe y Visual C++ y recibir ayuda, visita la página webwww.asp.nety busca "aspnet_setreg".
Deberías configurar el acceso a las claves del registro que almacenan las credenciales cifradas para que el acceso solo esté disponible para los administradores y el SISTEMA. Como la clave del registro será leída por el proceso ASP.NET que se ejecuta como SYSTEM, debes establecer los siguientes permisos:
Administrators:F
SYSTEM:F
CREADOR PROPIETARIO: F
ProcessAccount:R
Esto proporcionará dos líneas de defensa para proteger los datos:
Los permisos ACL requieren acceso a datos con la identidad de Administrador. El atacante tendría que ejecutar código (CryptUnprotectData) en el servidor para recuperar las credenciales de la cuenta.
ejemplo
El siguiente ejemplo especifica varios <processModel> ajustes de configuración.
El siguiente ejemplo especifica que el nombre de usuario y la contraseña cifrados se almacenan bajo el elemento definido por el usuario del registro AspNetProcess.
Requisitos
- Incluido en: <system.web>
- Plataforma web: IIS 5.0, IIS 5.1, IIS 6.0
- Archivos de configuración: Machine.config, Web.config
- Manejador de sección de configuración: System.Web.Configuration.ProcessModelConfigurationHandler
http://doc.51windows.net/iismmc/ ... essmodelelement.htm
|