我有一个运行 postgresql 9.1.8-0ubuntu12.04 的 12.04 机器,它为 Java webapp(Atlassian Confluence wiki)提供服务。我正在尝试利用 powernap 的 IOMonitor 功能。但是,如果我取消注释相应的行/etc/powernap/config
:
[IOMonitor]
postgres-io = "postgres"
... powernap 永远不会让盒子进入睡眠状态,日志(DEBUG=3)显示以下内容:
Looking for [postgres-io] IOMonitor
Activity found, reset absent time [0/60]
我注意到的一件事是,postgres 似乎每 2-3 分钟就会重生一次进程(即使没有任何用户针对 wiki 的活动);每次发生这种情况时,powernap 都会打印:
<powernap.monitors.IOMonitor.IOMonitor instance at 0xXXXX> - adding new PID 16783 to list.
有问题的 PID 似乎是为我的 wiki DB 提供服务的 PID,例如:
postgres 16783 1067 0 11:05 ? 00:00:00 postgres: confluence confluence 127.0.0.1(50689) idle
我猜这是个障碍吧?这是 Postgres 的问题吗(它是否应该经常重生进程,即使没有活动?)。任何关于如何调试这个问题的指示都将不胜感激(也许从 powernap 如何推断 I/O 活动开始 - 因为有许多 postgres 进程,也许我可以找到一个正则表达式来针对正确的进程?)。
附言:如果我注释掉 Postgres IOMonitor,powernap 可以正常工作,但是在使用 Wiki 时它会暂停该盒子……
答案1
根据以上评论 - 感谢@craig-ringer 让我走上正确的道路!
- Postgresql 不适合通过 I/O 监控来确定其是否处于空闲状态
- 相反,如果可能的话,最好监视与前端应用程序的 TCP 连接
- 然而,请注意错误 1070695如果您的连接是通过 IPv6 建立的。错误单上有一个补丁,对我很有用。