在 EC2 上运行的 Postgres 服务器每隔一段时间就会关闭。无法在此处隔离问题

Posted

技术标签:

【中文标题】在 EC2 上运行的 Postgres 服务器每隔一段时间就会关闭。无法在此处隔离问题【英文标题】:Postgres server running on EC2 closing every once in while. Unable to isolate the issue here 【发布时间】:2017-12-27 20:31:50 【问题描述】:

我在我的 Django 应用程序上配置了一个到 Postgres 服务器的数据库连接。 此服务器在 EC2 实例上运行。 每隔一段时间(这篇文章的 3 次)我在运行我的 django 应用程序时会看到这个

  Is the server running on host "xx.com" (13.xx.xx.xx) and accepting
        TCP/IP connections on port 5432?

当我运行这个时:sudo service postgresql status 我明白了

postmaster dead but pid file exists

当我运行sudo service postgresql restart 时,我得到了

Stopping postgresql service:                               [FAILED]
Starting postgresql service:                               [  OK  ]

我尝试删除 /var/lib/pgsql9/data 中的 postmaster.pid 文件 但这似乎并不能解决问题。

当我重新启动服务器时,它似乎工作正常。但那是我正在使用的 Windows 用户 类型的解决方案。

-- 我对使用 postgres 还是很陌生。

这是服务器宕机时日志文件(在 /var/lib/pgsql9/data/pg_log 中)的内容:

sh: line 46: kill: (5102) - No such process
sh: line 46: kill: (5103) - No such process
sh: line 46: kill: (5105) - No such process
sh: line 46: kill: (5106) - No such process
sh: line 46: kill: (5126) - No such process
sh: line 46: kill: (5127) - No such process
sh: line 46: kill: (5130) - No such process
sh: line 46: kill: (5150) - No such process
sh: line 46: kill: (5151) - No such process
sh: line 46: kill: (5154) - No such process

【问题讨论】:

可能是任何东西:硬件/维护故障、配额、OOM,...您有权访问 PG 日志文件吗? 是的,我可以访问机器中的 root 用户。在我的问题中添加了日志。 提供完整的pg日志,查看系统日志。也许 pg 崩溃会费 oom @Anton 请告诉我要查找哪些日志,这对科技树的这一部分有点新。赞赏。 【参考方案1】:

您的应用程序显然无法访问服务器。 该错误表明应用程序/客户端正在尝试在 xx.com 上查找服务器,但无法找到在端口 5432 上运行并接受连接的 postmaster 服务。

从您提供的其他信息来看,后端的 postmaster 似乎有什么东西在杀死,当这种情况发生时, postmaster.pid 文件不会被删除。并且只要有 postmaster.pid 文件,服务状态就会显示这条消息postmaster dead but pid file exists

尝试查看数据库日志 (/pg_log) 以获取有关崩溃部分的更多信息。

【讨论】:

嗨,当服务器崩溃时,我从日志文件中添加了 sn-p。希望这可以帮助。让我知道可能有助于我更好地理解这一点的任何其他日志。 您附加的日志可能是从您执行“sudo service postgresql restart”时开始的,因为它正在寻找要终止的服务,但是,它们都不存在。检查这些行之前的日志或操作系统日志以检查导致服务器终止/崩溃的原因。

以上是关于在 EC2 上运行的 Postgres 服务器每隔一段时间就会关闭。无法在此处隔离问题的主要内容,如果未能解决你的问题,请参考以下文章

启动 AWS EC2 实例时如何使用 bash 脚本运行 postgres?

UnauthorizedError:没有授权令牌——EC2/RDS Postgres

在EC2上使用docker-compose的用户“postgres”密码验证失败

使用 Sequelize 从 ec2 连接到 postgres RDS

从本地节点服务器到Postgres DB的连接被拒绝

将Rstudio与PostgreSQL在AWS EC2中连接