2017-04-10 1 views
10

비교적 작은 이미지 (2MB)를 변환 할 때 Firebase 용 Cloud Functions에서 계속 산발적 인 오류가 발생합니다. 성공했을 때,이 기능은 약 2000ms 정도 밖에 걸리지 않으며 Image Magick 문서에 따르면 어떤 문제도 볼 수 없습니다.메모리 제한으로 인해 Firebase에서 클라우드 기능이 초과되었습니다.

나는 Firebase 내에서 허용되지 않는 명령의 버퍼 크기를 늘리려고 시도했는데 쓰레기로 오버로드되고 작업 속도가 느려질 수 있으므로 .spawn()에 대한 대안을 찾으려고했습니다. 아무것도 작동하지 않습니다.

답변

15

[업데이트] 의견 제시자가 한 말처럼, firebase 기능이 이제 재배포시 설정을 유지하므로 더 이상 문제가되지 않습니다. 고마워요.

밝혀지지 않았거나 문서화되어 있지 않다면 Google Functions Console에있는 기능에 대한 메모리 할당을 늘릴 수 있습니다. 장기 실행 기능에 대한 시간 종료를 늘릴 수도 있습니다. 메모리 과부하 문제를 해결하고 모든 것이 잘되었습니다.

편집 : Firebase는 배포시 기본값을 재설정하므로 콘솔에 로그인하여 즉시 업데이트해야한다는 점에 유의하십시오. 나는 아직도 CLI를 통해 이러한 설정을 업데이트하는 방법을 찾고 있으며 찾으면 업데이트 할 것입니다.

+0

:에 다른 옵션은, 참조하시기 바랍니다 내 기능을위한 위치. 함수 콘솔에서 어디로 가야합니까? tks! – Walucas

+0

@Walucas Cloud Functions> {함수 이름}> "편집"을 클릭 한 다음 "메모리 할당"에서 숫자 편집 – Kirill

+0

기능 설정이 다시 초기화됩니다. –

2

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

+0

오, 좋은 소식이야! 나는 무너 뜨리는 것을 피하기 위해 잠시 동안 재배치하지 않았습니다. 테스트 프로젝트에서 시도해 볼 것입니다. 다시 작동하면 좋습니다! – Kirill

+0

업데이트 : 나에게 매번 재설정됩니다. 메모리 부족이 배포 시간을 초과하여 배포에 실패했습니다. 이로 인해 어색한 닭고기 및 계란 문제가 발생합니다. –

10

내가 메모리를 변경할 수있는 옵션을 찾을 수 없습니다, UI에 잃었지만, 마지막으로 발견 된이 :

구글 클라우드 플랫폼 콘솔 (안 중포 기지 콘솔)
  • 선택에
    1. 이동 Cloud Functions 메뉴에
    2. 이제 파이어베이스 기능이 올바른지 확인하십시오. 그렇지 않으면 올바른 프로젝트를 선택했는지 확인하십시오.
    3. 모든 체크 박스, 버튼 및 메뉴 항목을 무시하고이라는 이름의 을 클릭하기 만하면됩니다.
    4. 수정 (상단 메뉴)을 클릭하고 할당 된 메모리 만 변경하고 저장을 클릭하십시오.

    감사합니다, 피터

  • 0

    그것은 함수에 할당 된 실제 메모리와 일치하지 않습니다 중포 기지 클라우드 기능의 기본 ImageMagick이 자원 구성을 보인다. - 기본 ImageMagick이 인스턴스는 디스크에서 버퍼를 할당하지 않습니다 때문에 2기가바이트을 가지고 생각

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

    FCF에 할당 된 기본 메모리가 2백56메가바이트입니다 :

    중포 기지 클라우드 기능 수율의 맥락에서 identify -list resource 실행 위의 제안 쉽게 필요한 메모리를 증가 이상의 기능이 Error: memory limit exceeded. Function killed.

    한 가지 방법에 실패하는 원인 메모리를 할당하는 것입니다 시도 할 수 있습니다 - 거기에 여전히 있지만 메신저를 통해 사용 사례 및 아웃 라이어에 따라 할당하려고합니다 위험이 있습니다.

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

    IM이 메모리 제한에 도달하면 디스크에 매핑 된 버퍼와 일반 디스크 버퍼가 버퍼에 할당됩니다 .I/O 성능과 메모리 비용 간의 균형을 고려해야합니다. 당신이 당신의 FCF에 할당 메모리 사용량이 100ms를 곱 -..이 빠르게 성장할 수 있도록

    0

    여기에 또 다른 옵션은 모두 .spawn()을 사용하지 않도록하는 것입니다

    Sharp라는 노드에 대한 좋은 이미지 처리 패키지가 그 메모리 부족 공간 라이브러리 libvips을 사용합니다. Github에서 Cloud Function 샘플을 확인할 수 있습니다. .

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

    +0

    흥미 롭습니다. 날카로운 샷을 줄 것입니다. Google Cloud의 문제는 로컬에서 실제로 테스트 할 수 없으며 모든 변경 사항을 클라우드 코드 조각을 통해 밀어 넣어야한다는 것입니다. 따라서 전환 솔루션은 더 나은 솔루션 일 때도 비용이 높습니다. – Kirill

    +1

    방금 ​​추가 된 새로운 로컬 테스트 기능 중 일부를 확인해야합니다. 이제 트리거 된 함수를 로컬에서 테스트하고 단위 테스트를 실행합니다. https://firebase.google.com/docs/functions/local-emulator#invoke_storage_and_auth_functions – Kiana

    2

    최신 firebase deploy 명령은 메모리 할당을 기본 256MB로 겹쳐 쓰며 최대 60 초까지 시간 초과됩니다. gcloud 베타 함수 YourFunctionName --memory = 2,048메가바이트 --timeout = 540S

    를 배포

    : 같은

    대안

    원하는 메모리 할당과 최대 시간 제한을 지정하는 데, I는 gcloud 명령을 사용 내가 메모리 알을 높일 수있는 장소를 찾을 수 없습니다

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

    관련 문제