¿Solución de problemas de uso elevado de CPU de los servicios postgres y postmaster?


28

Estoy usando una máquina basada en código abierto (RHEL 6.2) que ejecuta el software SIEM. Cuando ejecuto el topcomando, veo postgresy postmasterambos con un 96% de uso de CPU. ¿Hay alguna manera de precisar o ver qué causa la acumulación de estos servicios?


2
"RHCE 6.2"? ¿Te refieres a "RHEL 6.2"? Supongo postgressque sí postgresy lo has copiado a mano.
Craig Ringer

Respuestas:


30

Puede hacer coincidir una ID de back-end específica de Postgres con una ID de proceso del pg_stat_activitysistema utilizando la tabla del sistema.

SELECT pid, datname, usename, query FROM pg_stat_activity;Puede ser un buen punto de partida.
Una vez que sepa qué consultas se están ejecutando, puede investigar más a fondo ( EXPLAIN/ EXPLAIN ANALYZE; verificar bloqueos, etc.)


esta es la consulta exacta, no estoy muy familiarizado con db, ya que soy el chico que trabaja en siem, su declaración de selección, ¿tengo que alimentarlo pid desde el comando superior?
asadz

1
@asadz no, se truncó (se arregló ahora): si tiene PID específicos y desea ver qué están ejecutando, puede aislarlos con una WHEREcláusula, pero si no tiene una gran cantidad de PID es igual que Fácil de buscar a través de la salida completa. El manual de Postgres tiene detalles adicionales sobre lo que puede obtenerpg_stat_activity , así como las otras tablas de recopilación de estadísticas (que pueden ayudarlo si su problema no es una consulta del usuario).
voretaq7

cuando ejecuto esta consulta, no hay ningún PID que
deba

Gracias por la pista, recientemente me encontré con un problema similar y descubrí la razón usando SELECT * FROM pg_stat_activity;
Yao

14

Yo estaba teniendo el mismo problema. El postgresql está configurado en AWS RDS y tenía una utilización del 100% de la CPU incluso después de aumentar la instancia. Depuré con el método que se muestra aquí y uno de los métodos funcionó para mí.

Verifiqué la consulta que se ejecutó durante más tiempo y llegué a saber que ciertas consultas estaban bloqueadas y se ejecutaban desde hace más de 3-4 horas. Para verificar desde cuánto tiempo se ejecuta la consulta, ejecute el siguiente comando:

SELECT max(now() - xact_start) FROM pg_stat_activity
                               WHERE state IN ('idle in transaction', 'active');

Si esto es más de una hora, entonces este es el problema. Elimine la conexión de larga duración y limite la antigüedad máxima de la conexión desde el lado de la aplicación.


8

Si este es realmente el administrador de correo que usa toda esa CPU, entonces es probable que tenga problemas de contención de bloqueo, probablemente debido a que es muy alto max_connections. Considere bajar max_connectionsy usar un agrupador de conexiones si este es el caso.

De lo contrario: Detalles, por favor. Salida completa de top -b -n 1para empezar.


esto tiene sentido; dado que el analista utiliza el siem para consultar muchos datos de un lado a otro; ¿hay alguna manera de verificar el estado del bloqueo? o condiciones que se le atribuyen; ?
asadz
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.