Ubuntu服务器+Docker+PostgreSQL环境下CPU与内存突发峰值问题排查求助
我最近碰到个困扰我好一阵子的问题,想请大家帮忙排查下。
我有一台Google Cloud的VM,跑的是Ubuntu 18.04服务器,上面用docker-compose管理着几个容器,包括PostgreSQL服务器、Redis服务器,还有我自己开发的几个应用。
PostgreSQL里有几张表,白天会频繁执行INSERT操作,只有晚上才会进行DELETE操作。
之前我时不时会遇到CPU和内存突然飙升的情况,每次持续2-4分钟,直接影响到应用的性能。一开始我以为是自己的应用导致的,因为峰值出现时,用top或者htop这类基础监控工具观察,我的应用和PostgreSQL的活动都很高。
后来我花了不少时间优化软件,现在性能提升了不少,数据库的负载也能更均匀地分布在全天,整体CPU使用率降了下来。
不过现在还是会突然出现CPU和内存峰值,只是对优化后的软件和数据库影响没那么大了。峰值出现时,我观察到这些现象:
- 所有容器的CPU/内存使用率都很低(已经通过
docker stats、top、htop、glances这些工具确认过) - Ubuntu系统层面的CPU和内存使用率突然大幅上升
- 监控工具里找不到具体哪个进程或者日志条目能说明这种情况的原因
另外还有个小细节:偶尔会有个kworker进程占用少量CPU,但内存使用率可以忽略不计,看起来和这些峰值没有直接关联。
我想请大家帮忙找出这个问题的原因,还有有没有什么特定的命令可以用来监控,而不是只看整体的内存/CPU使用率?现在我实在搞不清到底是哪个组件出问题了,有点头疼。
我还确认了几个点:IO方面没什么异常,毕竟查询都很轻量,插入操作也是白天持续稳定进行的;另外也没有正在运行的VACUUM操作。附上的CPU与内存行为图表显示:第一张图中绿色代表总可用内存,第二张图展示CPU使用率的变化情况。
谢谢大家的帮忙!
备注:内容来源于stack exchange,提问作者user586883

