Tenemos una aplicación web (desarrollada por un tercero) que se ejecuta en Tomcat. Hemos estado obteniendo muy mal rendimiento de la aplicación. El desarrollador de la aplicación afirma que es una buena práctica de la industria reiniciar los servidores web todas las noches, liberar todo el uso de memoria y comenzar de nuevo.
Desde la perspectiva del cliente que alivia su problema de la caída del sitio durante el día, pero desde la perspectiva de SysAdmin es una solución horrible.
Hospedamos 20 de estas aplicaciones en diferentes servidores para diferentes clientes, y la coordinación de asegurarnos de que todas se reinicien todas las noches parece incorrecta.
Respuestas:
Ciertamente, esta no es una mejor práctica. Si bien es bueno reiniciar sus servidores periódicamente solo para asegurarse de que todo salga correctamente, la necesidad de reiniciar cada noche apunta a una pérdida de memoria muy grave en la aplicación.
fuente
Hay una diferencia entre "Mejores prácticas", cosas que muchas personas hacen por buenas razones, y "Prácticas comunes", cosas que muchas personas hacen porque son flojas y / o ignorantes.
Las aplicaciones y (peor) los servidores que necesitan reiniciarse o reiniciarse de manera rutinaria para seguir funcionando bien son bastante comunes. Pero también es una clara indicación de que tiene un error crítico.
Al hacer que SOP reinicie una aplicación regularmente, su empresa está ocultando un error grave debajo de la alfombra. Esto es inexcusable, el error debe ser enfrentado y aplastado, o volverá a picarte más tarde.
Idealmente, su empresa debería encontrar un mejor desarrollador. Desafortunadamente, esto puede llevar a bastante trabajo para reescribir grandes extensiones de su código. El hecho de que el desarrollador piense que un código mal escrito es aceptable, o no sabe lo suficiente como para reconocer los síntomas del código defectuoso, sugiere que la calidad del código es baja. Un buen desarrollador será constitucionalmente incapaz de dejarlo en ese estado.
Dado que es posible que no esté en condiciones de reemplazar al desarrollador, algunas sugerencias:
Incluso sin entrar en las herramientas de creación de perfiles orientadas al desarrollador, hay muchas herramientas orientadas a los administradores de sistemas para crear perfiles y monitorear el uso de memoria en aplicaciones Java. En cualquier caso, debería configurar la supervisión de la memoria (especialmente el almacenamiento dinámico) en sus servidores de producción. Lo recomendaría incluso si estuviera ejecutando un código de calidad. Puede darle una advertencia anticipada cuando sus aplicaciones con errores están a punto de caerse.
Pero mejor aún, esto debería ayudarlo a reunir pruebas de que hay una fuga, e incluso puede indicar dónde está el problema en la aplicación. Esto le dará mejores municiones para presionar para que se repare.
fuente
Es más probable que el desarrollador de la aplicación afirme que le conviene cubrir su trasero trabajando en el trabajo no profesional que hizo. Es posible que haya dejado de admitir que escribió algo con una fuga de memoria enorme, pero no muy lejos de eso.
fuente
Muchas respuestas aquí parecen estar muy lejos de las soluciones prácticas. Parecen evitar el dogma: los servidores nunca deben reiniciarse, ¿por qué tenemos 5 nueves? ¿Tolerancia a fallos? Bueno, eso es así cuando se supone que deben estar despiertos, se quedan despiertos.
Además, afirmar que es la causa de los malos desarrolladores o las malas prácticas de desarrollo no va a la raíz del problema. Puede ser, pero la mayoría de las veces no es un mal código de aplicación. Estos problemas ya están integrados en gran parte del código del sistema. Pequeñas pérdidas de memoria, problemas de almacenamiento dinámico de Java y permgen si está ejecutando muchas aplicaciones pequeñas como lo hacemos nosotros. Los servidores modernos y el software que ejecutan son muy complejos. Cuando piensa en lo que un servidor como Tomcat tiene que hacer: servir archivos, procesar solicitudes web, comunicaciones de red, comunicaciones de bases de datos, etc., está haciendo mucho. EN esa pila hay muchas partes móviles.
Reiniciar proactivamente los servidores, digamos, una vez a la semana o al mes, es inteligente y eficiente en mi opinión. Si está agrupado y rota los servidores, no debería afectar a los clientes ni un bit. Los clientes estarán mucho más felices con el rendimiento de sus servidores.
fuente
Los servidores IMO deben cerrarse lo menos posible. Es más probable que el desarrollador de aplicaciones haya creado una aplicación de mala calidad con una pérdida de memoria.
fuente
Tengo un script que reinicia uno de nuestros servidores web todas las noches, pero eso se debe más a una aplicación de Java mal escrita que a un estándar de la industria. Sin embargo, diría que no es raro reiniciar los servicios web. Esto podría hacer la limpieza de memoria que está buscando y ejercer menos presión sobre el servidor en comparación con un reinicio completo.
fuente
Un servidor preferiblemente nunca debe reiniciarse. Esa es una de las razones por las que tenemos tolerancia a fallas . Si tiene que reiniciar su servidor debido a sus aplicaciones, sus aplicaciones pierden memoria y están mal construidas.
He estado trabajando con Tomcat antes, y tuve el mismo problema, la próxima vez que trabaje con un contenedor Java buscaré otro, tal vez JBoss o GlassFish.
Editar: si tiene que reiniciarlo todas las noches ahora, entonces probablemente tenga que reiniciarlo con más frecuencia si / cuando la carga aumenta. Asegúrese de tener aplicaciones sólidas, esa es la mejor solución.
fuente
El más frecuente que he visto es semanal. Donde estoy ahora somos una tienda de escaparates, y lo hacemos mensualmente durante el fin de semana siguiente a Patch Tuesday.
fuente
Si bien estoy de acuerdo en que no es ideal reiniciar un servidor constantemente, hay situaciones en las que no es culpa del desarrollador ni algo incorrecto. Tenemos una aplicación con buen comportamiento que pierde memoria debido a problemas en la biblioteca Python Popen. Es una aplicación antigua que se retirará pronto, pero es crítica para el negocio. Tenemos que mantenerlo funcionando con un mínimo de alboroto para nuestros clientes. Así que hemos decidido reiniciar el servidor todas las noches.
fuente