Postgres 进程显示 100% CPU 但实际使用率为 6%,导致查询响应缓慢

Posted

技术标签:

【中文标题】Postgres 进程显示 100% CPU 但实际使用率为 6%,导致查询响应缓慢【英文标题】:Postgres process shows 100% CPU but actual usage is 6%, resulting in slow query response 【发布时间】:2020-10-08 04:31:25 【问题描述】:

我们使用 Postgres 作为 Grafana 仪表板的数据源。运行查询时,top 命令显示 postgres 正在使用 100% CPU,但实际 CPU 大约为 6%,这导致查询响应缓慢,因此 Grafana 显示 524 超时错误 (Cloudflare)(请参阅下面的屏幕截图)

系统配置: 操作系统:Ubuntu 16.04 内存:16GB CPU:16核Hyper-V

下面是配置文件

postgressql.conf

max_connections = 300   
unix_socket_directories = '/var/run/postgresql' 
ssl = true  
shared_buffers = 4GB
work_mem = 13981kB      
maintenance_work_mem = 1GB      
dynamic_shared_memory_type = posix  
effective_io_concurrency = 200  
max_worker_processes = 16
wal_buffers = 16MB
max_wal_size = 8GB
min_wal_size = 2GB
checkpoint_completion_target = 0.9  
random_page_cost = 1.1          
effective_cache_size = 12GB
log_line_prefix = '%t [%p-%l] %q%u@%d '     
log_timezone = 'localtime'
stats_temp_directory = '/var/run/postgresql/9.5-main.pg_stat_tmp'
datestyle = 'iso, mdy'
timezone = 'localtime'
lc_messages = 'en_US.UTF-8'         
lc_monetary = 'en_US.UTF-8'         
lc_numeric = 'en_US.UTF-8'  
lc_time = 'en_US.UTF-8' 
default_text_search_config = 'pg_catalog.english'

我是 postgre 的新手,如果我遗漏了什么或者您有任何建议,请告诉我。

更新 我的 /boot 文件夹已 100% 满,不确定这是否有什么不同。

【问题讨论】:

【参考方案1】:

您显示的top 输出中的摘要行具有累积 CPU 使用率。

您的一个核心正忙于 PostgreSQL 查询,但这只是机器中几个核心之一,因此它包含在摘要行中显示的 6.6%“用户”CPU 中。

关于该输出的警告部分是 74.3% 的“系统”CPU 时间。您机器中四分之三的内核正在执行操作系统维护工作。有什么严重的错误。也许您没有禁用透明大页面?但要在这里得出结论,还需要懂 Linux 的人来深入分析一下。

【讨论】:

我想问即使有18%的空闲cpu,为什么postgres进程显示接近100%的CPU,为什么没有使用剩余的。 @ShubhRocksGoel 我建议阅读 top 的文档,因为您似乎误解了这些数字的含义。专注于那 18% 几乎肯定是错误的起点 它使用了 95% 的单个 CPU 内核,不到可用总 CPU 功率的 6.6%。单个线程只能同时在单个内核上运行。

以上是关于Postgres 进程显示 100% CPU 但实际使用率为 6%,导致查询响应缓慢的主要内容,如果未能解决你的问题,请参考以下文章

多个 Postgres SELECT 进程(django GET 请求)卡住,导致 100% CPU 使用率

RDS postgres 从 9.4 升级到 9.5,CPU 卡在 100% 几个小时

系统压测时CPU达到100%但是QPS却很低

线上问题定位--CPU100%

linux cpu占用100%排查

Node 是不是使用 100% CPU?