Resumen de las causas de los bloqueos de sitios web

  
Existen muchos motivos por los que los sitios web pueden no funcionar correctamente, lo que dificulta la comprobación sistemática de todos los problemas. Lo siguiente se centrará en el análisis de los problemas más comunes que causan que los sitios web se bloqueen. Si estos problemas generales se pueden resolver, entonces habrá la capacidad de lidiar con algunas situaciones inesperadas.
El disco está lleno. La causa más probable de que el sistema no funcione correctamente es que el disco está lleno. Un buen administrador de red prestará mucha atención al uso del disco. En algún momento, parte de la carga en el disco debe transferirse al medio de almacenamiento de respaldo (como una cinta).
El archivo de registro se agotará rápidamente de todo el espacio en disco. Los archivos de registro del servidor web, los archivos de registro de SQL * Net, los archivos de registro JDBC y los archivos de registro del servidor de aplicaciones son todos equivalentes a pérdidas de memoria. Puede tomar medidas para guardar los archivos de registro en un sistema de archivos diferente al del sistema operativo. El servidor web también se suspenderá cuando el espacio del sistema de archivos de registro esté lleno, pero las posibilidades de que la propia máquina se suspenda se reducen considerablemente. Error del puntero de C
Los programas escritos en C o C ++, como el módulo de API del servidor web, pueden provocar un bloqueo del sistema, ya que siempre que se produzca un error en el puntero de referencia indirecto (es decir, acceso a la memoria puntiaguda), Hace que el sistema operativo termine todos los programas. Además, un análogo de Java que usa un puntero de C malo tendrá acceso a una referencia de objeto vacía. Una referencia nula en Java generalmente no hace que la JVM se cierre de inmediato, pero solo si el programador puede manejar el error correctamente usando el manejo de excepciones. En este sentido, Java no requiere mucha atención, pero el uso de Java para mediciones adicionales de confiabilidad puede tener algún impacto negativo en el rendimiento. Las fugas de memoria

Los programas C /C ++ también pueden crear otro problema de puntero: perder referencias a la memoria asignada. Este problema generalmente ocurre cuando la memoria está asignada en una subrutina, y como resultado, el programa no libera memoria cuando regresa de una subrutina. Como resultado, la referencia a la memoria asignada se pierde, y el proceso continuará usando la memoria mientras el sistema operativo aún se esté ejecutando. El resultado es que los programas que han ocupado más memoria degradarán el rendimiento del sistema hasta que la máquina se detenga por completo y la memoria se vacíe por completo.
Una de las soluciones es utilizar una herramienta de análisis de código (como Purify) para analizar cuidadosamente el código para identificar posibles fugas. Sin embargo, este método no puede encontrar una fuga en la biblioteca causada por otras razones, porque el código fuente de la biblioteca no está disponible. Otra forma es borrar y reiniciar el proceso a intervalos regulares. El servidor web Apache creará y limpiará los procesos secundarios por este motivo.
Aunque Java en sí no tiene punteros, en general, los programas Java usan la memoria más que los programas en C. En Java, los objetos se crean con frecuencia y el recolector de basura libera memoria hasta que desaparecen todas las referencias al objeto. Incluso si el recolector de basura se está ejecutando, solo devolverá la memoria a la máquina virtual VM, no al sistema operativo. El resultado: los programas Java usarán todos sus montones y nunca los lanzarán. Debido al código generado por el compilador Just In Time (JIT), el tamaño de un programa Java a veces puede ampliar varias veces el tamaño máximo de almacenamiento dinámico.
Todavía hay un problema, la situación es similar. Se asigna una conexión de base de datos desde el conjunto de conexiones, y la conexión asignada no se puede devolver al conjunto de conexiones. Algunos grupos de conexiones tienen un temporizador de actividad que liberará la conexión de la base de datos después de un período de inactividad, pero esto no es suficiente para aliviar el desperdicio de recursos causado por un código incorrecto que filtra rápidamente las conexiones de la base de datos. El proceso de
carece de descriptores de archivo. Si un descriptor de archivo ha sido asignado a un servidor web u otro proceso crítico, pero requiere más descriptores de archivo, el servidor o proceso se suspenderá o se informará un error. Hasta obtener el descriptor de archivo requerido. Los descriptores de archivos se utilizan para realizar un seguimiento de los archivos abiertos y los sockets abiertos. Los archivos abiertos y los sockets abiertos son un componente clave de un servidor web. La tarea es copiar los archivos a una conexión de red. De forma predeterminada, la mayoría de los shells tienen 64 descriptores de archivo, lo que significa que cada proceso iniciado desde el shell puede abrir 64 archivos y conexiones de red simultáneamente. La mayoría de los shells tienen un comando ulimit incrustado que aumenta el número de descriptores de archivo.
Interbloqueo de subprocesos
La mejora del rendimiento generada por los subprocesos múltiples tiene un costo de confiabilidad, principalmente porque es posible crear un interbloqueo de subprocesos. Cuando un subproceso está bloqueado, el primer subproceso espera que el segundo subproceso libere el recurso, mientras que el segundo subproceso espera que el primer subproceso libere el recurso. Imaginemos una situación en la que dos personas se encuentren cara a cara en la acera. Para dar paso a la otra parte, los dos hombres dan un paso al mismo tiempo. Los dos lados no pueden pasar, y al mismo tiempo dan otro paso al otro lado. . Ambos lados bloquearon el camino del otro lado de la misma manera. Suponiendo que esta situación continúa, no es difícil comprender por qué se ha producido un punto muerto.
No hay una manera fácil de resolver el interbloqueo, porque es una situación muy específica para hacer que el hilo genere este tipo de problema y, a menudo, tiene una carga muy alta. La mayoría de las pruebas de software no generan suficiente carga, por lo que es imposible exponer todos los errores de subprocesos. Hay un problema de bloqueo de subprocesos en todos los idiomas que utilizan subprocesos. Dado que la programación de subprocesos que utiliza Java es más fácil que usar C, hay más personas que utilizan subprocesos en los programadores de Java y los interbloqueos de subprocesos son cada vez más comunes. Puede aumentar el uso de palabras clave de sincronización en su código Java para reducir los interbloqueos, pero hacerlo también puede afectar el rendimiento. Si la carga es demasiado pesada, puede haber puntos muertos en la base de datos.
Si el programa utiliza un bloqueo permanente, como un archivo de bloqueo, y el programa no desbloquea el estado al final del programa, es posible que otros procesos no puedan usar este tipo de bloqueo, ni el bloqueo ni el desbloqueo. Esto hará que el sistema no funcione correctamente. Debes desbloquearlo manualmente en este momento.
Sobrecarga del servidor
El servidor web de Netscape usa un hilo por conexión. El servidor web de Netscape Enterprise se bloquea después de que el hilo se agote, sin proporcionar ningún servicio para las conexiones existentes. Si existe un mecanismo de distribución de carga que detecta que el servidor no responde, la carga en ese servidor se puede distribuir a otros servidores web, lo que puede hacer que estos servidores se queden sin todos los subprocesos uno por uno. Como resultado, se suspenderá todo el grupo de servidores. El nivel del sistema operativo puede continuar recibiendo nuevas conexiones, mientras que las aplicaciones (servidores web) no pueden atender estas conexiones. El usuario puede ver el mensaje conectado en la línea de estado del navegador, pero no ocurrirá nada en el futuro. //Este artículo proviene de la red de aplicaciones de software y hardware de la computadora www.45it.com
Una forma de resolver el problema es establecer el valor del parámetro obj.conf RqThrottle en un valor inferior al número de subprocesos, por lo que si se cruza el valor de RqThrottle, No recibirá nuevas conexiones. Los servidores que no pueden conectarse dejarán de funcionar, y el servidor en la conexión será más lento, pero al menos el servidor conectado no se suspenderá. En este punto, el descriptor del archivo debe configurarse en al menos el mismo número que el número de subprocesos, de lo contrario, el descriptor del archivo se convertirá en un cuello de botella.
La tabla temporal en la base de datos no es suficiente. El número de tablas temporales (cursores) de muchas bases de datos es fijo, y la tabla temporal conserva el área de memoria del resultado de la consulta. Después de leer los datos de la tabla temporal, se libera la tabla temporal, pero una gran cantidad de consultas simultáneas puede agotar un número fijo de todas las tablas temporales. En este momento, otras consultas deben esperar en línea hasta que se libere la tabla temporal antes de continuar con la ejecución.
Este es un problema que los programadores no notan fácilmente, pero se revelará durante las pruebas de carga. Pero para el administrador de la base de datos (DataBase Administrator, DBA), este problema es muy obvio.
Además, hay algunos otros problemas: el espacio de tablas establecido no es suficiente, el límite del número de serie es demasiado bajo, lo que provocará un error de desbordamiento de la tabla. Estos problemas demuestran la importancia de un buen DBA para verificar periódicamente la configuración de la base de datos y el rendimiento utilizado para la producción. Además, la mayoría de los proveedores de bases de datos también proporcionan herramientas de monitoreo y modelado para ayudar a resolver estos problemas.
Además, hay muchos factores que probablemente hagan que el sitio web no funcione. Tales como: correlación, sobrecarga de tráfico de subred, controladores de dispositivos defectuosos, fallas de hardware, comodines que incluyen archivos de error, tablas de claves bloqueadas inadvertidamente.
Copyright © Conocimiento de Windows All Rights Reserved