Ubuntu 服务器 + Docker + PostgreSQL 上随机 CPU + 内存峰值问题

Ubuntu 服务器 + Docker + PostgreSQL 上随机 CPU + 内存峰值问题

我遇到了一个困扰我有一段时间的问题。

我有一台 Google Cloud VM,运行着一台 Ubuntu 18.04 服务器,里面有几个容器,包括一个 PostgreSQL 服务器、一个 Redis 服务器和几个我自己的应用程序。这些都是通过 docker-compose 设置进行管理的。

在 PostgreSQL 中,有几个表在白天频繁发生 INSERT,而 DELETES 只在晚上发生。

我会定期注意到 CPU 和内存出现持续 2-4 分钟的显著峰值,这会影响我的应用程序的性能。最初,我以为这是由我的应用程序引起的,因为我在这些峰值期间使用 top 或 htop 等基本监控命令观察到我的应用程序和 PostgreSQL 中的活动很高。

在投入时间优化我的软件之后,它现在的性能好多了,并且数据库上的负载随着时间的推移更加均匀地分布,从而降低了整体 CPU 使用率。

但是,我仍然会遇到这些突然的 CPU 和内存峰值,尽管对我优化的软件和数据库的影响并不大。在这些峰值期间,我观察到:

  • 我的任何容器的 CPU/内存使用率都很低(通过 docker stats 或 top、htop 和 gaze 等监控工具验证)
  • Ubuntu 内存和 CPU 使用率快速增加
  • 监控工具中没有具体流程或线路表明行为的原因

此外,偶尔会出现 kworker 进程消耗一小部分 CPU,但内存使用量却可以忽略不计的情况,这似乎与这些峰值没有直接关系。

我将非常感激任何帮助,以确定此行为的原因,并确定是否有办法使用特定命令来监控它,而不完全依赖整体内存/CPU 使用率。遗憾的是,我无法确定哪个组件有问题。

我附上了一个 CPU 行为/内存行为的示例,在所有选择都非常轻量且 INSERTS 在一天内以恒定速率完成之后,IO 似乎并没有真正影响这一点。此外,我可以确认没有正在进行的 VACUUM。在第一个图表中,绿色表示总可用内存。在第二个图表中,CPU 使用率。

谢谢

统计图像链接:https://i.stack.imgur.com/Ub1XT.png

相关内容