programing

메모리 제한 초과로 인해 Firebase의 클라우드 기능이 중지되었습니다.

powerit 2023. 7. 7. 21:09
반응형

메모리 제한 초과로 인해 Firebase의 클라우드 기능이 중지되었습니다.

비교적 작은 이미지(2MB)를 변환할 때 Cloud Functions for Firebase에서 산발적인 오류가 계속 발생합니다.성공하면 기능이 완료되는 데 약 2000ms 이하밖에 걸리지 않으며 Image Magick 설명서에 따르면 문제가 발생하지 않아야 합니다.

Firebase 를 늘리려고 , Firebase의 대안을 찾으려고 ..spawn()쓰레기로 과부하가 걸려 속도가 느려질 수 있기 때문입니다.아무 것도 안 됩니다.

Firebase의 Cloud Function 파일에서 설정할 수 있습니다.

const runtimeOpts = {
  timeoutSeconds: 300,
  memory: '1GB'
}

exports.myStorageFunction = functions
  .runWith(runtimeOpts)
  .storage
  .object()
  .onFinalize((object) = > {
    // do some complicated things that take a lot of memory and time
  });

다음 문서에서 발췌: https://firebase.google.com/docs/functions/manage-functions#set_timeout_and_memory_allocation

잊지 말고 뛰세요.firebase deploy당신의 터미널에서.

UI에서 길을 잃어서 메모리를 변경할 수 있는 옵션을 찾을 수 없었지만 마침내 찾았습니다.

  1. Firebase 콘솔이 아닌 Google Cloud Platform Console로 이동합니다.
  2. 메뉴에서 클라우드 기능 선택
  3. 여기 소방 기지 기능이 제대로 작동하는지 확인할 수 있습니다.그렇지 않으면 올바른 프로젝트를 선택했는지 확인합니다.
  4. 모든 확인란, 버튼 및 메뉴 항목을 무시하고 기능 이름을 클릭합니다.
  5. 편집(맨 위 메뉴)을 클릭하고 할당된 메모리만 변경한 후 저장을 클릭합니다.

[update] 한 해설자가 제안한 것처럼, 파이어베이스 기능은 이제 재구현 시 설정을 유지하기 때문에 더 이상 문제가 되지 않습니다.소방서 감사합니다!

Google 기능 콘솔에서 기능에 대한 메모리 할당을 늘릴 수 있습니다.장기 실행 기능의 시간 제한을 늘릴 수도 있습니다.그것은 메모리 과부하 문제를 해결했고 현재 모든 것이 잘 작동하고 있습니다.

편집: Firebase는 배포 시 기본값을 재설정하므로 콘솔에 로그인하여 즉시 업데이트해야 합니다.CLI를 통해 이러한 설정을 업데이트하는 방법을 계속 찾고 있습니다. 찾으면 업데이트할 것입니다.

최신 firebase deploy 명령은 메모리 할당을 기본 256MB로 덮어쓰고 최대 60초까지 시간 초과합니다.

또는 원하는 메모리 할당 및 최대 시간 초과를 지정하려면 다음과 같은 gcloud 명령을 사용합니다.

gcloud 베타 함수는 FunctionName --memory=2048MB --module=540s를 배포합니다.

기타 옵션은 다음을 참조하십시오.

https://cloud.google.com/sdk/gcloud/reference/beta/functions/deploy

여기서 메모리를 조정할 수 있습니다.

enter image description here

UI에서 파악하는 것은 다소 까다롭기 때문에 다음과 같은 안내 스크린샷이 있습니다.
url https://console.cloud.google.com/functions/list 으로 이동합니다.

enter image description here

enter image description here

enter image description here


기본 시간 제한을 60초로 늘릴 수도 있습니다.

enter image description here

enter image description here

업데이트: 이제 클라우드 콘솔에서 메모리 할당을 안전하게 변경할 수 있도록 다시 배포할 때 설정을 유지하는 것 같습니다!

파이어베이스 기능 정의에 다음과 같은 구성을 추가할 수 있습니다.

functions.runWith({memory: '2GB', timeoutSeconds: '360'})

Firebase Cloud Functions의 기본 ImageMagick 리소스 구성이 해당 기능에 할당된 실제 메모리와 일치하지 않는 것 같습니다.

입니다.identify -list resourceFirebase Cloud Function을 통해 다음과 같은 이점을 얻을 수 있습니다.

File       Area         Memory        Map       Disk   Thread  Throttle       Time
--------------------------------------------------------------------------------
 18750    4.295GB       2GiB       4GiB  unlimited        8         0   unlimited  

FCF에 할당된 기본 메모리는 256MB입니다. 기본 ImageMagick 인스턴스는 FCF에 2GB가 있다고 생각하므로 디스크에서 버퍼를 할당하지 않으며 메모리를 쉽게 과도하게 할당하여 기능에 장애가 발생할 수 있습니다.Error: memory limit exceeded. Function killed.

한 가지 방법은 위에서 제안한 대로 필요한 메모리를 늘리는 것입니다. 사용 사례와 특이치에 따라 IM이 과도하게 할당하려고 할 위험이 여전히 있습니다.

이미지 조작 프로세스의 일부로 올바른 메모리 제한을 IM으로 설정하는 것이 더 안전합니다.-limit memory [your limit]IM 로직을 '-debug Cache'로 실행하면 대략적인 메모리 사용량을 파악할 수 있습니다. 즉, 할당된 모든 버퍼, 크기, 메모리 또는 디스크인지 여부를 보여줍니다.

IM이 메모리 제한에 도달하면 디스크에 버퍼(메모리 매핑 후 일반 디스크 버퍼)를 할당하기 시작합니다.I/O 성능과 메모리 비용 간의 균형을 고려해야 합니다.FCF에 할당하는 모든 추가 메모리 바이트의 가격은 사용량 100ms를 곱하여 빠르게 증가할 수 있습니다.

여기서 또 다른 옵션은 사용하지 않는 것입니다..spawn()다같이.

메모리 공간이 적은 라이브러리 libvips를 사용하는 Sharp라는 노드용 훌륭한 이미지 처리 패키지가 있습니다.클라우드 기능 샘플은 Github에서 확인할 수 있습니다.

또는 gm이라고 하는 ImageMagick( GraphicsMagick)용 노드 래퍼가 있습니다.리소스 제한을 IM에 보고하는 -limit 옵션도 지원합니다.

언급URL : https://stackoverflow.com/questions/43313251/cloud-functions-for-firebase-killed-due-to-memory-limit-exceeded

반응형