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

评论

“ RHCE 6.2”?您是说“ RHEL 6.2”吗?我认为postgress是postgres,而您只是手工复制了它。

#1 楼

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

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

评论


这是确切的查询吗,我对db不太熟悉,因为我是从事siem的第二个人,您的select语句,我是否必须从top命令提供pid?

–asadz
2013年6月7日在21:02

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

–voretaq7
13年6月7日在21:11

当我执行此查询时,我不必怀疑任何PID

– Fendi Tri Cahyono
19年3月14日在23:28

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

–姚
19年8月26日在9:51

#2 楼

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

我检查了查询运行时间最长的时间,得知某些查询由于超过3个而被卡住并正在运行-4个小时。要检查查询运行了多少时间,请运行以下命令:

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


如果超过一个小时,那么这就是问题所在。终止长期运行的连接并从应用程序端限制连接的最长期限。

#3 楼

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

否则,请详细说明。 top -b -n 1的完整输出开始。

评论


这是有道理的;由于分析师使用siem来回查询大量数据;有什么方法可以检查锁定状态吗?或归因于此的条件; ?

–asadz
2013年6月9日上午7:01

#4 楼

您可以使用pg_stat_statements
https://www.postgresql.org/docs/current/pgstatstatements.html。

首先,pg_stat_activity(来自其他答案)是很好的建议-我认为有时还不够?它仅显示当前活动,但是如果有很多快速查询,而这些查询持续的时间不足以使它们在pg_stat_activity中看起来很有趣,该怎么办?但是,当它们很多时,它们仍然可能会导致CPU使用率过高?

那么您可以使用pg_stat_statements


pg_stat_statements记录运行的查询针对您的数据库,从其中剔除许多变量,然后保存有关查询的数据,例如花费了多长时间以及基础读/写所发生的情况。


(从此博客文章:最有用的Postgres扩展:pg_stat_statements)

在这里我用它来找出为什么我自己的CPU使用率异常高的原因:

\x

select 
  (total_time / 1000 / 3600) as total_hours,
  (total_time / 1000) as total_seconds,
  (total_time / calls) as avg_millis, 
  calls num_calls,
  query 
from pg_stat_statements 
order by 1 desc limit 10;


-[ RECORD 1 ]-+-------------------------
total_hours   | 0.128210291016666
total_seconds | 461.557047659998
avg_millis    | 9.06506889111474
num_calls     | 50916
query         | select p.site_id, p.page_id, p.version current_version, h.page_version cached_version from  ...
-[ RECORD 2 ]-+------------------------
total_hours   | 0.0586912504452778
total_seconds | 211.288501603
avg_millis    | 4.14966517279101
num_calls     | 50917
query         | select p.site_id, p.page_id ... from ...
:
:


你在上面注意到了吗? —热门查询很快:0.009和0.004秒。但是他们被打了很多遍。