有时我的pg_restore或mongorestore卡住了

时间:2012-06-25 19:38:34

标签: python postgresql mongodb popen

print 'restore db1'
run_command('pg_restore -i -h localhost -p 5432 -U postgres -d db1 -v "/var/lib/project/backup/db1.backup" -c')
print '--- wait 3 seconds'
time.sleep(3)

print 'restore db2'
run_command('pg_restore -i -h localhost -p 5432 -U postgres -d db2 -v "/var/lib/project/backup/db2.backup" -c')
print '--- wait 3 seconds'
time.sleep(3)

print 'restoring mongodb'
run_command('/var/lib/project/bbds/mongodb-linux/bin/mongorestore /var/lib/project/backup/dump --drop')
print '--- wait 3 seconds'
time.sleep(3)

我的run_command基本上取自this

在我的控制台上:

python ignition.py --load-fixtures
For safety, this process will run for about one minute.
setup LDAP
restore db1
['pg_restore', '-i', '-h', 'localhost', '-p', '5432', '-U', 'postgres', '-d', 'db1', '-v', '/var/lib/project/backup/db1.backup', '-c']
Password: 

输入密码后卡住了。之后什么也没发生。我不确定它的资源是否繁忙。 pg_restore仍然按ps au|grep pg_restore运行,而mongorestore则不是。因此必须坚持第一次恢复。我不认为它的内存已满,因为我的虚拟机只有512mb并且它总是满的,并且总是使用交换内存。

我们怎么知道它在做什么?有时它会坚持恢复mongo。因此所有这些操作都可能导致问题。 我该如何解决这个问题?

感谢。


当我杀死这个过程时,我得到了这个追溯:http://pastebin.com/Cnv9P6HW 重启将“解决”问题。它将允许我毫无问题地运行脚本。但那不稳定。我们有时候会陷入困境。

1 个答案:

答案 0 :(得分:2)

您对pg_restoremongorestore的使用似乎是独立的。我会尝试:

  • 直接从命令行运行每个命令(即不通过Python do_command()
  • 将这些脚本放入单独的脚本中,以便您可以找出挂起的命令

您提到的只有512MB RAM且始终使用交换表明此VM上没有足够的可用内存。究竟什么“卡住”意味着什么?如果VM实际上被楔入并且需要重新启动,则很可能已经耗尽了RAM和交换。如果您仍然可以登录但恢复脚本的运行时间超过预期时间,我会尝试使用iostatvmstatperformance monitoring tools来了解资源使用情况。