Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes吊舱,python脚本占用太多内存_Python_Mysql_Memory_Kubernetes - Fatal编程技术网

Kubernetes吊舱,python脚本占用太多内存

Kubernetes吊舱,python脚本占用太多内存,python,mysql,memory,kubernetes,Python,Mysql,Memory,Kubernetes,我编写了一个python脚本来转储我的数据库,gzip并将其移动到云存储 在本地,一切工作都很顺利,基本上不消耗内存(最大20MB RAM,CPU相当高,I/O最大) 当我在kubernetes集群中将其作为作业运行时,内存使用量累积到大约1.6GB。 这差不多就是我的gzip转储文件的大小 以下是我的转储逻辑: mysqldump_command = ['mysqldump', f'--host={host}', f'--port={port}', f'--user={username}',

我编写了一个python脚本来转储我的数据库,gzip并将其移动到云存储

在本地,一切工作都很顺利,基本上不消耗内存(最大20MB RAM,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,这是我所有实验中最糟糕的一次
还有其他想法吗

谢谢

您可以使用writeby。 至于bufer limit,构造应该如下所示
subprocess.popen(args,bufsize=-1)
有关更详细的用法,请查看文档内部


此外,您还可以进行远程mysql转储,只需拉取.gz文件即可省去麻烦。

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

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

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