Indicadores de seguimiento de pruebas de rendimiento y guía de análisis y ajuste para los principales fabricantes

1. ¿Qué factores se convertirán en el cuello de botella del sistema?

  • CPU: si hay una gran cantidad de cálculos, ocuparán los recursos de la CPU durante mucho tiempo sin interrupción, lo que hará que otros recursos no puedan competir por la CPU y respondan lentamente, lo que generará problemas de rendimiento del sistema, como FullGC frecuentes y El contexto frecuente causado por la conmutación de subprocesos múltiples hará que la CPU esté ocupada. Generalmente, es más apropiado que el uso de la CPU sea inferior al 75 %.
  • Memoria: la memoria de Java generalmente se asigna a través de la memoria jvm, principalmente usando memoria de montón en jvm para almacenar objetos creados por Java. La velocidad de lectura y escritura de la memoria es muy rápida, pero el espacio de memoria es limitado. Cuando el espacio de memoria está lleno y los objetos no se pueden reciclar, se producirá un desbordamiento de memoria o una fuga de memoria.
  • E/S de disco: el espacio de almacenamiento del disco es mucho más grande que el de la memoria, pero la velocidad de lectura y escritura del disco es más lenta que la de la memoria. Aunque ahora se introduce la unidad de estado sólido SSD, todavía no puede comparar con la velocidad de la memoria.
  • Red: El tamaño del ancho de banda tendrá un gran impacto en los datos transmitidos, cuando la cantidad de concurrencia aumente, la red se convertirá fácilmente en un cuello de botella.
  • Excepción: los programas Java lanzan excepciones, y las excepciones deben capturarse. Este proceso consume rendimiento. Si las excepciones se manejan continuamente en condiciones de alta concurrencia, el rendimiento del sistema se verá afectado.
  • Base de datos: las operaciones de base de datos generalmente implican lecturas y escrituras de E/S de disco. Una gran cantidad de lecturas y escrituras de base de datos provocarán cuellos de botella en el rendimiento de E/S de disco y demoras en las operaciones de base de datos.

Cuando se realiza programación concurrente, a menudo se utilizan varios subprocesos para operar el mismo recurso. En este momento, para garantizar la atomicidad de los datos, se deben utilizar bloqueos. El uso de bloqueos generará un cambio de contexto, lo que generará una sobrecarga de rendimiento. En JDK1 Después de 6, se agregan bloqueos sesgados, bloqueos giratorios, bloqueos livianos, engrosamiento de bloqueo y eliminación de bloqueo.

2. Qué indicadores se utilizan para medir el desempeño del sistema

1.Tiempo de respuesta RT

  • Tiempo de respuesta de la base de datos, que es el tiempo para las operaciones de la base de datos.
  • El tiempo de respuesta del servidor, el servidor incluye el tiempo consumido por la solicitud distribuida por Nginx y el tiempo consumido por la ejecución del programa del servidor.
  • Tiempo de respuesta de la red, transmisión de la red, el tiempo consumido por el hardware de la red para analizar la solicitud transmitida
  • El tiempo de respuesta del cliente generalmente es insignificante para los clientes web y de aplicaciones, pero si el cliente tiene mucho procesamiento lógico, el tiempo consumido puede ser mayor.

2. Rendimiento TPS

  • Rendimiento del disco: IOPS (entrada/salida por segundo) entrada y salida por segundo, esta es la cantidad de solicitudes de E/S que el sistema puede manejar por unidad de tiempo, las solicitudes de E/S generalmente son solicitudes de operación de lectura o escritura de datos, preste atención al rendimiento de lectura y escritura aleatorio, adecuado para aplicaciones con lectura y escritura aleatorias frecuentes, como almacenamiento de archivos pequeños, servidor de correo. Rendimiento de datos, esta es la cantidad de datos que se pueden transmitir por unidad de tiempo. Para aplicaciones con una gran cantidad de lecturas y escrituras secuenciales, se transmite una gran cantidad de datos continuos, como la edición de video.
  • Rendimiento de la red: se refiere a la velocidad de datos máxima que un dispositivo puede aceptar sin pérdida de tramas durante la transmisión de la red. El rendimiento de la red no solo está relacionado con el ancho de banda, sino que también está estrechamente relacionado con la potencia de procesamiento de la CPU, la tarjeta de red, el cortafuegos y las E / S. El rendimiento está determinado por la potencia de procesamiento de la tarjeta de red, el algoritmo del programa interno y el ancho de banda.

3. Utilización de recursos

  • Uso de la CPU, primero puede comprender la información básica de la CPU, incluida la cantidad de CPU físicas, la cantidad de núcleos de una sola CPU y luego puede verificar el uso a través del comando, vmstat, mpstat, top
  • Uso de memoria, libre -m, vmstat, top
  • E/S de disco, iostat, iotop
  • E/S de red, netstat, ifconfig, tcpstat

3. Problemas a tener en cuenta en las pruebas de rendimiento

Cuando realizamos pruebas de rendimiento, el sistema se ejecutará cada vez más rápido, y la velocidad de acceso subsiguiente es varias veces más rápida que nuestra primera velocidad de acceso. Esto se debe a que el orden de compilación del lenguaje Java es que los archivos .java se compilan primero en .class. y luego convierta el código de bytes de .class en código de máquina local a través de un intérprete antes de que pueda ejecutarse.

Para ahorrar memoria y eficiencia de ejecución, cuando el código se ejecuta inicialmente, el intérprete primero interpretará y ejecutará este código. A medida que aumenta el número de ejecuciones de código, la máquina virtual detecta que cierto método o código se ejecuta con especial frecuencia y lo identifica como un código de zona activa (Hot Spot Code).

Para mejorar la eficiencia de ejecución de los códigos calientes, la máquina virtual compilará estos códigos en códigos de máquina relacionados con la plataforma local a través de un compilador justo a tiempo (JIT) en tiempo de ejecución y luego los almacenará en la memoria obtenida de . Esto hará que el sistema funcione lentamente la primera vez y la velocidad de las visitas posteriores será varias veces más rápida.

Al realizar pruebas de rendimiento, el conjunto de datos procesados ​​por cada prueba es el mismo, pero los resultados son diferentes. Esto se debe a que la prueba está acompañada de muchos factores inestables, como la influencia de otros procesos en la máquina, las fluctuaciones de la red y cada uno de ellos. Diferentes fases de la recolección de basura JVM. Podemos pasar varias pruebas y promediar los resultados de las pruebas. Siempre que el valor promedio esté dentro de un rango razonable y la fluctuación no sea demasiado grande, en este caso, la prueba de rendimiento pasará.

4. Al localizar problemas de rendimiento, puede utilizar el análisis de estrategia de abajo hacia arriba y la resolución de problemas.

Después de realizar la prueba de presión, generaremos un informe de prueba de rendimiento, que incluye RT, TPS, TP99, la CPU, la memoria, la E/S del servidor estresado y la frecuencia del GC de la JVM. A través de estos indicadores, se pueden encontrar cuellos de botella en el desempeño y podemos analizarlos de manera ascendente.

1. Primero, desde el nivel del sistema operativo, verifique si la CPU, la memoria, la E/S y el uso de la red del sistema son anormales, luego busque registros anormales a través de comandos y, finalmente, descubra la causa del cuello de botella a través del análisis de registros. .

2. Desde el nivel de JVM de la aplicación Java, puede verificar la frecuencia de recolección de basura de la JVM y si hay alguna anomalía en la asignación de memoria, analizar el registro de recolección de basura y averiguar la causa del cuello de botella.

3. Si no hay una situación anormal en el nivel del sistema y JVM, puede verificar si hay un cuello de botella en el rendimiento de la capa comercial del servicio de aplicaciones, por ejemplo, problemas de programación Java, cuellos de botella en la lectura y escritura de bases de datos, etc.

5. Al optimizar los problemas de rendimiento, puede utilizar una estrategia de arriba hacia abajo para la optimización

En la secuencia de ajuste general, podemos pasar del ajuste empresarial al ajuste de programación y, finalmente, al ajuste del sistema.

1. Ajuste de la capa de aplicación

El primero es optimizar el código. Los problemas del código a menudo se exponen debido al consumo de recursos del sistema. Por ejemplo, el código provoca un desbordamiento de la memoria, lo que hace que la memoria de la JVM se agote y se produzca FullGC con frecuencia, lo que resulta en una CPU alta.

El segundo es optimizar el diseño, principalmente para optimizar el código de la capa de negocios y la capa de middleware.Por ejemplo, el modo proxy se puede usar en la escena de creación de objetos que se invocan con frecuencia, y el objeto de creación se puede compartir con Reducir el consumo de creación de objetos.

El tercero es optimizar el algoritmo, elegir el algoritmo apropiado para reducir la complejidad del tiempo.

2. Ajuste de middleware: ajuste de MySQL

1) Estructura de tablas y optimización de índices

Es principalmente para optimizar el diseño de la base de datos, el diseño de la estructura de la tabla y las dimensiones de configuración del índice. Al diseñar la estructura de la tabla, considere las capacidades de expansión horizontal y vertical de la base de datos, planifique con anticipación el crecimiento futuro del volumen de datos, el volumen de lectura y escritura, y plan para subbases de datos Plan de subtabla. Elija un tipo de datos apropiado para los campos, prefiriendo estructuras de datos más pequeñas.

2) Optimización de sentencias SQL

Es principalmente para optimizar la declaración SQL, use la explicación para ver el plan de ejecución, para ver si se usan índices y qué índices se usan. También puede usar el comando Perfil para analizar el consumo de tiempo de cada paso en el proceso de ejecución de sentencias.

3) Optimización de parámetros de MySQL

Es principalmente para optimizar la configuración de los servicios de MySQL, como la gestión de la cantidad de conexiones, y para optimizar el tamaño de varios cachés, como el caché de índice, el caché de consulta y el caché de clasificación.

4) Configuración del hardware y del sistema

Optimice los dispositivos de hardware y la configuración del sistema operativo, como ajustar los parámetros del sistema operativo, deshabilitar el intercambio, aumentar la memoria y actualizar las unidades de estado sólido.

3. Ajuste del sistema

El primero es el ajuste del sistema operativo. La configuración de los parámetros del kernel de la operación de Linux se puede ajustar para lograr el propósito de proporcionar un alto rendimiento.

En segundo lugar, el ajuste de JVM, la configuración de un espacio de memoria JVM razonable y los algoritmos de recolección de basura para mejorar el rendimiento, por ejemplo, si la lógica comercial creará objetos grandes, podemos configurar los objetos grandes directamente en la generación anterior, lo que puede reducir YongGC ocurre con frecuencia en la generación joven para reducir el tiempo de uso de la CPU.

4. Estrategia de ajuste

El primero es intercambiar tiempo por espacio, en ocasiones el sistema no requiere una alta velocidad de consulta sino altos requerimientos de espacio de almacenamiento, en este momento podemos considerar el intercambio de tiempo por espacio.

En segundo lugar, el espacio se intercambia por tiempo y el espacio de almacenamiento se utiliza para mejorar la velocidad de acceso. La estrategia típica es la estrategia de subtabla y subbase de datos de MySQL. Cuando los datos de formulario de MySQL se almacenan en más de decenas de millones, el rendimiento de lectura y escritura disminuirá En este momento, podemos dividir los datos., para lograr la consulta, los datos de cada tabla son una pequeña cantidad, para lograr el propósito de mejorar el rendimiento.

5. Estrategia de ida y vuelta

Después de ajustar el sistema, todavía habrá problemas de rendimiento. En este momento, necesitamos tener una estrategia de abajo hacia arriba. La primera es limitar el flujo, establecer el límite de acceso máximo en la entrada del sistema y tomar fusibles. medidas para devolver las solicitudes sin éxito. El segundo es la expansión horizontal, cuando el tráfico supera un cierto umbral, el sistema puede aumentar automáticamente los servicios horizontalmente.

La siguiente es la información de apoyo. Para los amigos que hacen [pruebas de software], debería ser el almacén de preparación más amplio y completo. Este almacén también me acompañó en el viaje más difícil. ¡Espero que también pueda ayudarlos!

subprograma de entrevista de prueba de software

¡El banco de preguntas de prueba de software maximizado por millones de personas! ! ! ¡Quién es quién sabe! ! ! El mini programa de cuestionarios más completo de toda la red, puedes usar tu teléfono móvil para hacer los cuestionarios, en el metro o en el autobús, ¡enróllalo!

Se cubren las siguientes secciones de preguntas de la entrevista:

1. Teoría básica de las pruebas de software, 2. web, aplicación, pruebas de funciones de interfaz, 3. red, 4. base de datos, 5. linux

6. web, aplicación, automatización de interfaz, 7. pruebas de rendimiento, 8. conceptos básicos de programación, 9. preguntas de la entrevista de hora, 10. preguntas de prueba abiertas, 11. pruebas de seguridad, 12. conceptos básicos de informática

Método de adquisición de información:

Supongo que te gusta

Origin blog.csdn.net/IT_LanTian/article/details/131743837
Recomendado
Clasificación