我们在 Azure 中有一个 D11(2 核,14GB RAM)大小的虚拟机来托管我们公司的新 Web ERP 系统,该系统由安装在 CentOS 7 上的 jboss 和 Postgresql 组成,只有 14 个用户同时登录。
我们有时会遇到响应缓慢的情况,用户需要等待一分钟甚至几分钟才能加载页面。使用 free -h 检查内存,有超过 8GB 的可用空间,检查 Azure 门户中的 CPU 使用率,它始终低于 10%。但是,在延迟响应期间,负载平均值会增加。
当平均负载低于 1.0 时,Web 应用程序响应很快,而当平均负载高于 1.0 时,响应会变得非常迟钝。我检查了 iotop,发现 Web 应用程序不响应通常发生在高 postgresql 更新和提交期间。我可以知道 IO> for Postgres: jboss wsemp 127.0.0.1(40291) COMMIT 下的 99.99% 是什么意思吗?瓶颈是否发生在这里?引起我注意的另一个 99.99% 是 Postgres: checkpointer process i.imgur.com/XINJhwN.png
答案1
是的,这听起来很容易就是检查点活动。配置 PostgreSQL 以执行扩展检查点。请参阅:
- http://www.postgresql.org/docs/current/static/wal-configuration.html
- http://www.postgresql.org/docs/current/static/runtime-config-wal.html#GUC-CHECKPOINT-COMPLETION-TARGET
确保该值checkpoint_segments
足够高,可以满足您的工作量要求,并设置checkpoint_completion_target
为 0.8 左右,以鼓励尽早完成大部分检查点工作。这会通过减少可以进行的写入组合量来降低整体性能,但会使活动更加平稳,从而减少停顿。