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 使用率