Postgresql产生了一个荒谬的数量的postmaster进程

出于某种原因,postgres产生了> 700个postmaster进程来处理数据库请求,postgres日志文件如果在客户端连接上有'意外的EOF','不完整的启动包'和'抱歉,已经有太多的客户'。 netstat告诉我,所有打开的连接都是本地的,我很确定从内部来自postgres。 这个特定的实例在过去230天左右一直运行良好,没有任何改变configuration的明智之举。 任何想法,我应该试图解决这个问题?

这是我第一次诊断这样的问题,所以如果有什么步骤可以帮助我们缩小问题的范围。

更新:原来有一个远程机器上运行的tomcat实例,试图通过ssh隧道连接到postgres导致所有地狱摔打。

Postgres为每个连接产生一个postmaster。 这是它应该工作的方式。 如果你正在产生大量的postmaster进程,你就会发起大量的连接,如果这不是你所期望的,你可能会有一个坏的/坏的应用程序创build一个混乱(一个常见的例子:一个不断重新初始化数据库连接,但从来没有closures它,你会泄漏每个连接初始化会话)。

如果这是最近的话,从“什么改变?”开始 如果没有,开始查看与Postgres交谈的所有应用程序(大致按照使用量),然后查看是否可以find坏苹果。

Re:你的日志消息 –

  • unexpected EOF on client connection
    有些东西导致build立的Postgres连接在没有正确closures的情况下死亡(postmaster可能会暂停一会儿,清理由此产生的混乱)。 找出导致连接死机的原因(进程是否启动了它的崩溃?应用程序是否在清理其DB句柄之前编写并退出?)并修复它
  • incomplete startup packet
    有些东西连接到Postgres,并没有启动适当的Postgres握手/启动。 通常由此产生的邮局主任几秒钟后离开。
    find这是做什么,并修复它 。 (这可能是您的监控系统,某人在您的networking上进行端口扫描,或者某处写入的应用程序写得不好)
  • sorry, too many clients already
    我认为这个是不言自明的。 修复上面的问题,它可能会消失,否则考虑在postgresql.conf增加m ax_connections