Tuve un problema similar. Se debió a que algunas transacciones se atascaron y se ejecutaron durante mucho tiempo. Por lo tanto, la utilización de la CPU estuvo al 100% todo el tiempo. El siguiente comando ayudó a encontrar las conexiones que se ejecutan durante más tiempo:
SELECT max(now() - xact_start) FROM pg_stat_activity
WHERE state IN ('idle in transaction', 'active');
Este comando muestra el tiempo transcurrido desde que se está ejecutando una conexión. Este tiempo no debe ser mayor a una hora. Entonces, matar la conexión que se estaba ejecutando desde hace mucho tiempo o se atascó en cualquier punto, funcionó para mí. Seguí esta publicación por monitorear y resolver mi problema. Publicar incluye muchos comandos útiles para monitorear esta situación.