GNU并行子进程(Postgres真空)意外终止

时间:2019-01-24 20:40:37

标签: postgresql gnu-parallel postgresql-10 sigkill

我这样运行parallel,从而抽象出一些细节:

generate_job_list | parallel -j10 -q bash -c 'echo -n "running {}" ; dostuff {}'

我注意到有时parallel产生的子进程死于收到SIGKILL的情况(我知道,因为dostuff是运行真空的psql命令,而Postgres日志告诉我命令收到SIGKILL)。我没有设置超时时间,所以我不知道该怎么做。子进程运行了几个小时后,就会发生这种情况。

parallel是否有默认超时(文档似乎没有建议超时)或其他任何可能的原因提示?

ETA :添加一些有助于我在问题正文中找到答案的内容,因为它可能会帮助遇到相同问题的其他人找到此问题。

在您的Postgres日志中,您应该找到一些类似这样的消息:

LOG:  received smart shutdown request
LOG:  autovacuum launcher shutting down
FATAL:  the database system is shutting down

即使您不要求Postgres关闭也会生成该文件。

1 个答案:

答案 0 :(得分:0)

因此,如评论中所述,问题是OOM杀手kill。我通过做几件事来解决它:

  • 分区表实际上太大而无法清理而不会遇到内存问题
  • 将内存过量使用模式更改为2,并将过量使用率设置为95
  • 将autovacuum更改为更具侵略性,因此我不必运行许多手动维护任务,这样做会更好,因为如果autovacuum失败,它将不在常规事务中运行,因此,如果autovacuum失败,则不会强制长时间恢复