【发布时间】:2018-12-13 00:11:11
【问题描述】:
我编写了一个 python 脚本来转储我的数据库,gzip 并将其移动到云存储中。
本地一切正常,基本上不消耗内存(最大 20MB RAM,CPU 相当高,I/O 最大)。
当我在我的 kubernetes 集群中将其作为作业运行时,内存使用量会堆积到大约 1.6 GB。
这或多或少是我压缩后的转储文件的大小。
这是我的转储逻辑:
mysqldump_command = ['mysqldump', f'--host={host}', f'--port={port}', f'--user={username}',
f'--password={password}', '--databases', '--compact',
'--routines', db_name, f'--log-error={self.errorfile}']
print(f'## Creating mysql dump')
with open(self.filename_gzip, 'wb', 0) as f:
p1 = subprocess.Popen(mysqldump_command, stdout=subprocess.PIPE)
p2 = subprocess.Popen('gzip', stdin=p1.stdout, stdout=f)
p1.stdout.close() # force write error (/SIGPIPE) if p2 dies
p2.wait()
p1.wait()
我试过了:
- 设置
PYTHONUNBUFFERED=1,无效。 - 我试过this logic,但更糟
- 我尝试先将转储创建为文件,然后再对其进行 gzip,这是我所有实验中最糟糕的一次
还有什么想法吗?
谢谢!
【问题讨论】:
标签: python mysql memory kubernetes