解决来自postgres和postmaster服务的高CPU使用率问题?


28

我正在使用运行SIEM软件的基于开源(RHEL 6.2)的计算机。当我运行的top命令,我看到的postgrespostmaster都与96%的CPU使用率。有没有办法查明或查看导致这些服务堆积的原因?


2
“ RHCE 6.2”?您是说“ RHEL 6.2”吗?我想postgresspostgres,您只是手工复制了它。
克雷格·林格

Answers:


30

您可以使用pg_stat_activity系统表将特定的Postgres后端ID与系统进程ID匹配。

SELECT pid, datname, usename, query FROM pg_stat_activity;可以是一个很好的起点。
一旦知道正在运行的查询,就可以进一步调查(EXPLAIN/ EXPLAIN ANALYZE;检查锁等)。


这是确切的查询吗,我对db不太熟悉,因为即时通讯专家正在处理siem,您的select语句,我是否必须从top命令中获取pid?
asadz

1
@asadz不,它已被截断(现在已修复)-如果您具有特定的PID,并且想要查看它们正在运行,则可以使用WHERE子句将其隔离,但是如果您没有大量的PID,则就像易于搜索全部输出。Postgres手册还详细介绍了您可以从中获得的信息pg_stat_activity以及其他统计信息收集器表(如果您的问题不是用户查询,则可以为您提供帮助)。
voretaq7

当我执行此查询时,没有任何我需要怀疑的PID
Fendi Tri Cahyono

感谢您提供的线索,最近我遇到了类似的问题,并通过使用SELECT * FROM pg_stat_activity;

14

我有同样的问题。PostgreSQL是在AWS RDS上设置的,即使增加实例后,CPU利用率仍为100%。我使用此处显示的方法进行了调试,其中一种方法对我有用。

我检查了查询运行时间最长的时间,发现某些查询自3-4个小时以来一直处于阻塞状态并正在运行。要检查查询运行了多少时间,请运行以下命令:

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

如果超过一个小时,那就不是问题了。终止长时间运行的连接,并从应用程序一侧限制连接的最长期限。


8

如果这确实是使用所有CPU的邮局主管,则可能是由于极高导致的锁争用问题max_connectionsmax_connections在这种情况下,请考虑降低并使用连接池。

否则:请提供详细信息。的完整输出top -b -n 1开始。


这是有道理的; 由于分析师使用siem来回查询大量数据;有什么方法可以检查锁定状态吗?或归因于此的条件;?
asadz 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.