Resolución de problemas de rendimiento
En este tema se describe que la resolución de un problema de rendimiento es un proceso iterativo y se muestra cómo solucionar problemas de rendimiento.
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
Antes de empezar
Acerca de esta tarea
Generalmente, la resolución de un problema de rendimiento es un proceso iterativo que requiere la:
- Medición del rendimiento del sistema y recopilación de datos de rendimiento
- Localización de un cuello de botella
- Eliminación de un cuello de botella
Generalmente se trata de un proceso iterativo debido a que cuando se suprime un cuello de botella, la limitación del rendimiento se encuentra en otra parte del sistema. Por ejemplo, si se sustituyen discos duros lentos por otros más rápidos, el cuello de botella se puede trasladar al CPU de un sistema.
Medición del rendimiento del sistema y recopilación de datos de rendimiento
- Comience por seleccionar pruebas comparativas, esto es, un conjunto de operaciones estándar que se ha de ejecutar. Estas pruebas comparativas se aplican a esas funciones de las aplicaciones que sufren problemas de rendimiento. Generalmente, los sistemas complejos requieren un período de calentamiento para guardar objetos en antememoria, optimizar las vías de acceso a código, etc. El rendimiento del sistema durante el período de calentamiento es mucho más lento que después del mismo. Las pruebas comparativas deben poder generar trabajo que caliente el sistema antes de registrar las medidas que se utilizan para el análisis de rendimiento. Dependiendo de la complejidad del sistema, un período de calentamiento puede variar de algunos miles de transacciones a un período de más de 30 minutos.
- Si el problema de rendimiento que se está produciendo sólo ocurre cuando un número muy grande de clientes utilizan el sistema, entonces las pruebas comparativas deben simular también varios usuarios. Otro requisito clave es que las pruebas comparativas pueda generar resultados repetibles. Si los resultados varían por encima de un ligero porcentaje de una ejecución a otra, es posible que el estado inicial del sistema no sea el mismo en cada ejecución o que las medidas se estén realizando durante el período de calentamiento o que el sistema esté ejecutando cargas de trabajo adicionales.
- Hay varias herramientas para facilitar el desarrollo de las pruebas comparativas. Estas herramientas son desde las herramientas que invocan un URL a productos basados en scripts que pueden interactuar con datos dinámicos generados por la aplicación. IBM® Rational tiene herramientas que pueden generar interacciones complejas con el sistema bajo prueba y simular miles de usuarios. Generar pruebas comparativas útiles requiere un esfuerzo y debe formar parte del proceso de desarrollo. No espere hasta que la aplicación entre en producción para determinar el modo de medir el rendimiento.
- Las pruebas comparativas registran los resultados de rendimiento y tiempo de respuesta y permiten realizar gráficos y otras técnicas de análisis. Los datos de rendimiento proporcionados por WebSphere Application Server Performance Monitoring Infrastructure (PMI) ayuda a supervisar y ajustar el rendimiento del servidor de aplicaciones. Consulte la información sobre por qué utilizar Request metrics para obtener más información sobre los datos de rendimiento que proporciona WebSphere Application Server. Request metrics permite realizar una medición del tiempo dentro de los límites de los componentes de WebSphere Application Server, lo que permite determinar el tiempo empleado en cada componente principal.
Localización de un cuello de botella
Consulte los ejemplos siguientes y las soluciones que se sugieren:
- Escenario: El rendimiento es bajo con sólo un usuario.
Solución sugerida: utilice Request Metrics para determinar qué cantidad de cada componente está contribuyendo al tiempo de respuesta global. Para obtener más información sobre Request metrics, consulte la información sobre los datos que puede recopilar con Request metrics. Concéntrese en el componente que está ocupando la mayor parte del tiempo. Utilice Tivoli Performance Viewer para comprobar el consumo de recursos, incluida la frecuencia de las recogidas de basura. Es posible que tenga que codificar herramientas de creación de perfiles para aislar el problema en un método específico.
- Escenario: El rendimiento sólo es bajo con varios usuarios.
Solución sugerida: determine si hay algún sistema con un nivel elevado de uso de CPU, red o disco y concéntrese en estos sistemas. En las configuraciones en clúster, compruebe si entre los miembros del clúster hay una descompensación de la carga.
- Escenario: Ninguno de los sistemas parece tener una limitación de CPU, memoria, red o disco pero se producen problemas de rendimiento con varios usuarios.Soluciones sugeridas:
- Compruebe que el trabajo esté llegando al sistema que está comprobando. Asegúrese de que alguno dispositivo externo no limite la cantidad de trabajo que llega al sistema. Tivoli Performance Viewer le ayuda a determinar el número de solicitudes del sistema.
- Si se realiza un vuelco de hebras puede descubrir un cuello de botella en un método sincronizado o un gran número de hebras que está a la espera de un recurso.
- Asegúrese de que haya hebras suficientes para procesar el trabajo tanto en IBM HTTP Server, la base de datos como los servidores de aplicaciones. Por el contrario, muchas hebras pueden aumentar la contención de recursos y disminuir el rendimiento.
- Supervise la recogida de basura con Tivoli Performance Viewer o con la opción verbosegc de la JVM (Java™ Virtual Machine). Un exceso de recogida de basura puede limitar el rendimiento.
Eliminación de un cuello de botella
- Disminuya la demanda
- Aumente los recursos
- Mejore la distribución de la carga de trabajo
- Disminuya la sincronización
- IBM HTTP Server
- Mandato
- Enterprise bean
- Sistema operativo
Los perfiles de código de aplicación pueden llevar a una reducción de la demanda de CPU destacando las zonas activas que puede optimizar. IBM Rational y otras empresas tienen herramientas para perfiles de código. Si se analiza la aplicación se pueden detectar las áreas en las que se puede disminuir el trabajo para algunos tipos de transacciones.
Cambie los parámetros de ajuste para aumentar algunos recursos, por ejemplo, el número de descriptores de contexto de archivos, mientras que otros recursos pueden necesitar un cambio de hardware, por ejemplo, un número mayor de CPU o CPU más rápidas o servidores de aplicaciones adicionales. Se describen los parámetros de ajuste claves de cada componente principal de WebSphere Application Server para facilitar la resolución de problemas de rendimiento. Además, la página de asesores de rendimiento pueden proporcionar consejos sobre cómo ajustar un sistema de producción bajo una carga real o simulada.
La distribución de la carga de trabajo puede afectar el rendimiento cuando algunos recursos se utilizan poco y otros están sobrecargados. Las funciones de gestión de carga de trabajo de WebSphere Application Server proporciona varios modos de determinar cómo se distribuye el trabajo. La distribución de la carga de trabajo se aplica tanto a un solo servidor como a configuraciones de varios servidores y nodos.
Consulte gestión de la carga de trabajo.
Consulte gestión de la carga de trabajo.
Es necesario sincronizar algunas secciones críticas de la aplicación y del código del servidor para impedir que varias hebras ejecuten simultáneamente este código y produzcan resultados incorrectos. La sincronización conserva el estado correcto pero también puede disminuir el rendimiento cuando varias hebras deben esperar a que una hebra salga de la sección crítica. Cuando varias hebras esperan entrar a una sección crítica, un vuelco de hebras muestra estas hebras esperando en el mismo procedimiento. Generalmente, se puede reducir la sincronización: modificando el código de modo que sólo se utilice la sincronización cuando sea necesario; disminuyendo la longitud de la vía de acceso del código sincronizado o disminuyendo la frecuencia con que se invoca el código sincronizado.