개발하자

파이썬 스크립트가 있는 Kubernetes Pod가 메모리를 너무 많이 사용함

Cuire 2022. 11. 25. 16:57
반응형

파이썬 스크립트가 있는 Kubernetes Pod가 메모리를 너무 많이 사용함

나는 내 데이터베이스를 덤프하고 gzip을 해서 클라우드 저장소로 옮기기 위해 파이썬 스크립트를 작성했다.

로컬에서는 모든 것이 원활하게 작동하며 기본적으로 메모리를 사용하지 않습니다(최대 20MB RAM, CPU가 상당히 높음, I/O가 최대임).

내 쿠버네티스 클러스터에서 작업으로 실행하면 메모리 사용량이 약 1.6GB까지 쌓인다.

그것은 내 gziped 덤프 파일 크기에 가깝다.

제 덤핑 논리는 이렇습니다.

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()

나는 노력했다:

  • 설정, 효과 없음.
  • 나는 노력했지만 그것은 훨씬 더 나빴다.
  • 나는 먼저 덤프를 파일로 만들고 그 후에 gzip을 해봤는데, 내 모든 실험 중 최악이었다.

다른 생각은 없나요?




당신은 에 의해 쓰여진 것을 사용할 수 있습니다. 버퍼 제한에 대해서는 구조가 다음과 같이 되어야 합니다. 더 자세한 사용을 위해서는 문서 내부를 살펴보십시오.

또한 원격 mysql 덤프를 수행하고 .gz 파일을 풀어서 번거로움을 줄일 수 있습니다.




설정을 재현했는데 덤프는 여전히 제한적으로 작동합니다.

my-job.yml에 리소스 캡을 설정했는데 더 이상 메모리를 많이 사용하지 않습니다.

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

반응형