Get Hands-on with Amazon EKS - Workshop Event Series
Whether you're taking your first steps with Kubernetes or you're an experienced practitioner looking to sharpen your skills, our Amazon EKS workshop series delivers practical, real-world experience that moves you forward. Learn directly from AWS solutions architects and EKS specialists through hands-on sessions designed to build your confidence with Kubernetes. Register now and start building with Amazon EKS!
¿Cómo soluciono los problemas de uso elevado de la CPU en mi clúster de OpenSearch Service?
Mis nodos de datos muestran un uso elevado de la CPU en mi clúster de Amazon OpenSearch Service.
Descripción corta
Para solucionar problemas de uso elevado de la CPU en el clúster, sigue estos pasos:
- Utiliza un runbook automatizado para identificar la causa del uso excesivo de la CPU.
- Utiliza la detección de anomalías para identificar patrones.
- Utiliza la API de subprocesos activos de los nodos para entender el uso de los recursos.
- Comprueba la operación de escritura o el grupo de subprocesos de API masivos.
- Comprueba el grupo de subprocesos de búsqueda.
- Comprueba el grupo de subprocesos de combinación de Apache Lucene.
- Comprueba la presión de la memoria de la máquina virtual Java (JVM).
- Revisa tu estrategia de particiones.
- Escala tu clúster.
- Optimiza tus consultas.
Se recomienda mantener el uso de la CPU lo suficientemente bajo para que OpenSearch Service pueda realizar sus tareas. Un clúster que utiliza constantemente una cantidad elevada de CPU puede experimentar problemas de rendimiento. OpenSearch Service no responde a los clústeres sobrecargados y recibes una solicitud de tiempo de espera.
Resolución
Uso de un runbook automatizado
Requisito previo: Asegúrate de tener los permisos de AWS Identity and Access Management (IAM) necesarios para ejecutar el runbook. Para más información, consulta Permisos de IAM necesarios en AWSSupport-TroubleshootOpenSearchHighCPU.
Utiliza el runbook de Automatización de AWS Systems Manager AWSSupport-TroubleshootOpenSearchHighCPU para solucionar problemas relacionados con el uso elevado de la CPU en OpenSearch Service.
La salida muestra la siguiente información:
- Subprocesos activos
- Tareas en ejecución
- Estadísticas del grupo de subprocesos de cada nodo del dominio
- Información sobre los nodos del dominio ordenados por su uso de la CPU
- Asignación de particiones a cada nodo de datos y su espacio en disco
- Estado e información sobre el estado del dominio de OpenSearch Service
Utiliza la salida del runbook para identificar la causa del uso elevado de la CPU.
Uso de la detección de anomalías para identificar patrones
Para identificar posibles problemas antes de que provoquen interrupciones, utiliza la detección de anomalías en OpenSearch Service para detectar automáticamente patrones inusuales en las métricas, como el uso de la CPU. Para obtener más información, consulta Tutorial: detectar un uso elevado de la CPU con la detección de anomalías.
Uso de la API de subprocesos activos de los nodos
Si hay picos de CPU constantes en el clúster de OpenSearch Service, ejecuta el siguiente comando para ver la información de todos los nodos del clúster:
GET/_nodes/hot_threads
La longitud de la salida depende del número de nodos que se estén ejecutando en el clúster de OpenSearch Service. Para obtener más información sobre la API de subprocesos activos de los nodos, consulta Nodes hot threads API (API de subprocesos activos de los nodos) en el sitio web de OpenSearch.
Resultado de ejemplo:
GET _nodes/hot_threads 100.0% (131ms out of 500ms) cpu usage by thread 'opensearch[abc][search][T#62]' 10/10 snapshots sharing following 10 elements sun.misc.Unsafe.park(Native Method) java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) java.util.concurrent.LinkedTransferQueue.awaitMatch(LinkedTransferQueue.java:737) java.util.concurrent.LinkedTransferQueue.xfer(LinkedTransferQueue.java:647) java.util.concurrent.LinkedTransferQueue.take(LinkedTransferQueue.java:1269) org.opensearch.common.util.concurrent.SizeBlockingQueue.take(SizeBlockingQueue.java:162) java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) java.lang.Thread.run(Thread.java:745)
También puedes usar la API de nodos cat para ver el desglose actual de la utilización de los recursos. Para ver los nodos con el mayor uso de CPU, ejecuta el siguiente comando:
GET _cat/nodes?v&s=cpu:desc
La última columna de la salida muestra el nombre del nodo. Para obtener más información sobre la API de nodos cat, consulta CAT nodes API (API de nodos CAT) en el sitio web de OpenSearch.
A continuación, ejecuta el siguiente comando para los nodos con un uso elevado de la CPU:
GET _nodes/node_id/hot_threads
Nota: Sustituye node_id por el ID del nodo.
La salida muestra los procesos de OpenSearch Service del nodo que utilizan más CPU. Si ves un subproceso de combinación de Apache Lucene en la salida, consulta Comprobar el grupo de subprocesos de combinación de Apache Lucene para solucionar el problema.
Resultado de ejemplo:
percentage of cpu usage by thread 'opensearch[nodeName][thread-name]'
Comprobación de la operación de escritura o el grupo de subprocesos de la API masiva
Si recibes un mensaje de error «429», es posible que el clúster tenga demasiadas solicitudes de indexación masiva. Cuando hay picos constantes de CPU en tu clúster, OpenSearch Service rechaza las solicitudes de indexación masiva.
El grupo de subprocesos de escritura gestiona las solicitudes de indexación e incluye operaciones de la API masiva. Para comprobar si tu dominio está bajo presión debido a la cantidad excesiva de solicitudes de indexación masiva, consulta la métrica IndexingRate de Amazon CloudWatch.
Si tu clúster tiene demasiadas solicitudes de indexación masiva, toma las siguientes medidas:
- Reduce la cantidad de solicitudes masivas en el clúster.
- Reduce el tamaño de cada solicitud masiva para que los nodos puedan procesarlas de manera más eficiente.
- Si usas Logstash para cargar datos en tu clúster de OpenSearch Service, reduce el tamaño del lote o la cantidad de trabajadores.
- Si la tasa de ingesta del clúster se ralentiza, escala el clúster horizontal o verticalmente.
Comprobación del grupo de subprocesos de búsqueda
Un grupo de subprocesos de búsqueda que usa mucha CPU muestra que las consultas de búsqueda abruman el clúster de OpenSearch Service. Una sola consulta de larga duración puede sobrecargar el clúster. Un aumento en las consultas que realiza el clúster también puede afectar a tu grupo de subprocesos de búsqueda.
Para comprobar si una sola consulta aumenta el uso de la CPU, ejecuta el siguiente comando:
GET _tasks?actions=*search&detailed
La API de administración de tareas muestra todas las consultas de búsqueda activas que se ejecutan en tu clúster. Para obtener más información, consulta List tasks API (API de enumeración de tareas) en el sitio web de OpenSearch.
En la salida, comprueba el campo de descripción para identificar la consulta que se está ejecutando. El campo running_time_in_nanos muestra la cantidad de tiempo que ha estado ejecutándose una consulta.
Resultado de ejemplo:
{ "nodes": { "U4M_p_x2Rg6YqLujeInPOw": { "name": "U4M_p_x", "roles": [ "data", "ingest" ], "tasks": { "U4M_p_x2Rg6YqLujeInPOw:53506997": { "node": "U4M_p_x2Rg6YqLujeInPOw", "id": 53506997, "type": "transport", "action": "indices:data/read/search", "description": """indices[*], types[], search_type[QUERY_THEN_FETCH], source[{"size":10000,"query":{"match_all":{"boost":1.0}}}]""", "start_time_in_millis": 1541423217801, "running_time_in_nanos": 1549433628, "cancellable": true, "headers": {} } } } } }
Nota: Para las tareas de búsqueda, la salida de la API de administración de tareas incluye solo el campo de descripción.
Para reducir el uso de la CPU, ejecuta el siguiente comando para cancelar la consulta de búsqueda que tiene una CPU alta:
POST _tasks/U4M_p_x2Rg6YqLujeInPOw:53506997/_cancel
Nota: Sustituye U4M_p_x2Rg6YqLujeInPOw:53506997 por el ID de tu tarea.
La consulta anterior marca la tarea como cancelada y, a continuación, libera los recursos de AWS dependientes. Si se están ejecutando varias consultas en el clúster, utiliza la llamada POST para cancelar cada consulta hasta que el clúster vuelva a su estado normal.
Para evitar picos de CPU, se recomienda establecer un valor de tiempo de espera en el cuerpo de la consulta. Para obtener más información, consulta Search settings (Configuración de búsqueda) en el sitio web de OpenSearch. Para comprobar que el número de consultas activas ha disminuido, comprueba la métrica SearchRate de CloudWatch.
Nota: Si cancelas todas las consultas de búsqueda activas al mismo tiempo en el clúster de OpenSearch Service, pueden producirse errores en la aplicación cliente.
Comprobación del grupo de subprocesos de combinación de Apache Lucene
OpenSearch Service usa Apache Lucene para indexar y buscar documentos en el clúster. Al crear nuevos segmentos de particiones, Apache Lucene ejecuta operaciones de combinación para reducir el número efectivo de segmentos para cada partición y eliminar los documentos eliminados. Para obtener más información, consulta Merge settings (Configuración de combinación) en el sitio web de Elastic.
Si un subproceso de combinación de Apache Lucene afecta al uso de la CPU, ejecuta el siguiente comando para aumentar la configuración refresh_interval de tus índices:
PUT /your-index-name/_settings { "index": { "refresh_interval": "value" } }
Nota: Sustituye value por el nuevo intervalo de solicitud. Esta actualización ralentiza la creación de segmentos de clúster. Para obtener más información, consulta Refresh index API (API de actualización de índice) en el sitio web de OpenSearch.
Cuando un clúster migra los índices al almacenamiento UltraWarm, el uso de la CPU puede aumentar. Una migración de UltraWarm suele usar una operación de la API de combinación forzada que puede requerir un uso intensivo de la CPU. Para obtener más información, consulta Force merge API (API de combinación forzada) en el sitio web de OpenSearch.
Para comprobar si hay migraciones de UltraWarm, ejecuta el siguiente comando:
GET _ultrawarm/migration/_status?v
Comprobación de la presión de la memoria de la JVM
Comprueba el porcentaje de presión de la memoria de la JVM del montón de Java en un nodo de clúster. En el siguiente registro de ejemplo, la JVM se encuentra dentro del rango recomendado, pero la recopilación prolongada de elementos no utilizados afecta al clúster:
[2022-06-28T10:08:12,066][WARN ][o.o.m.j.JvmGcMonitorService] [515f8f06f23327e6df3aad7b2863bb1f] [gc][6447732] overhead, spent [9.3s]collecting in the last [10.2s]
Para solucionar problemas de alta presión de memoria de JVM, consulta ¿Cómo soluciono los problemas de alta presión de memoria de JVM en mi clúster de OpenSearch Service?
Revisión de la estrategia de particiones
Según el tamaño del clúster, es posible que el rendimiento del clúster se reduzca debido a que hay demasiadas particiones. Se recomienda tener un máximo de 25 particiones por cada GiB de montón de Java.
De forma predeterminada, OpenSearch Service tiene una estrategia de particiones de 5:1, en la que cada índice tiene cinco particiones principales. Dentro de cada índice, cada partición principal tiene su propia réplica. OpenSearch Service asigna automáticamente las particiones principales y las particiones de réplica a nodos de datos independientes y se asegura de que haya una copia de seguridad en caso de error.
Para redistribuir las particiones, consulta ¿Cómo puedo reequilibrar la distribución desigual de particiones en mi clúster de OpenSearch Service?
Escalamiento del clúster
Asegúrate de que el clúster tenga suficiente espacio de CPU, memoria y disco para tus necesidades. Si tu aplicación realiza consultas de gran tamaño o escrituras frecuentes, cambia el tamaño del clúster o los nodos para cumplir con las exigencias de rendimiento.
Además, utiliza nodos maestros dedicados para mejorar la estabilidad y la resiliencia de los clústeres, especialmente en despliegues más grandes. Esta configuración elimina las responsabilidades de administración de clústeres de los nodos de datos.
Optimización de las consultas
Las agregaciones pesadas, las consultas con caracteres comodín, como los caracteres comodín iniciales, y las consultas con expresiones regulares pueden provocar picos de utilización de la CPU. Para diagnosticar estas consultas, comprueba los registros lentos de OpenSearch.
Información relacionada
¿Cómo puedo mejorar el rendimiento de indexación en mi clúster de OpenSearch Service?
¿Cómo puedo resolver los rechazos de búsqueda o escritura en OpenSearch Service?
- Idioma
- Español

Contenido relevante
- preguntada hace 2 meses
- Respuesta aceptadapreguntada hace 10 meses
- preguntada hace 7 meses
- preguntada hace 10 meses
- preguntada hace 3 meses