kubernetes pod与python脚本占用太多内存

wtlkbnrh  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(370)

我编写了一个python脚本来转储数据库,gzip并将其移动到云存储。
本地一切工作顺利,基本上没有消耗内存(最大20mb内存,cpu是相当高的,i/o是在最大)。
当我在kubernetes集群中将它作为一个作业运行时,内存使用量累积到大约1.6gb。
这差不多是我的gzip转储文件的大小。
我的逻辑是:

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 ,没有效果。
我试过这个逻辑,但更糟
我试着先创建一个转储文件,然后gzip它,这是我所有实验中最糟糕的
还有什么想法吗?
谢谢!

rta7y2nd

rta7y2nd1#

我复制了你的设置和转储仍然与更严格的限制工作。
我只是在my-job.yml中设置了ressource caps,它不再消耗太多内存:

resources:
  limits:
    memory: "100Mi"
  requests:
    memory: "50Mi"
8qgya5xd

8qgya5xd2#

你可以使用gurutux写的pydump。至于bufer limit,构造应该如下所示 subprocess.popen(args, bufsize=-1) 有关更详细的用法,请查看python子流程文档。
你也可以做一个远程mysql转储,只需拉.gz文件就可以省去麻烦。

相关问题