使用Python脚本的Kubernetes Pod占用过多内存

时间:2018-07-04 14:04:00

标签: python mysql memory kubernetes

我编写了一个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压缩,这是我所有实验中最糟糕的

还有其他想法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

我复制了您的设置,转储仍然具有更严格的限制。

我只是在my-job.yml中设置资源上限,它不再消耗太多内存:

'DRIVER={SQL Server Native Client 11.0};SERVER=servername;DATABASE=databasename;Trusted_Connection=yes'

答案 1 :(得分:0)

您可以使用pydump编写的GuruTux。 至于缓冲区限制,请参见Python subprocess文档,以更详细地使用该结构,SAPvsSH如下。

此外,您可以执行远程mysql转储,只需拉出.gz文件即可保存麻烦。