• 【Azure 应用服务】Azure Function (PowerShell) 执行时报错 "out of memory"


    问题描述

    在Azure Function App服务中,创建一个PowerShell脚本的函数,遇见了OOM(Out Of Memory)的异常报错:

    2022-01-10T07:44:37  Welcome, you are now connected to log-streaming service. The default timeout is 2 hours. Change the timeout with the App Setting SCM_LOGSTREAM_TIMEOUT (in seconds).
    2022-01-10T07:44:39.879 [Information] Executing 'Functions.BlobTrigger1' (Reason='New blob detected: Exception of type 'System.OutOfMemoryException' was thrown.', Id=xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx)
    2022-01-10T07:44:39.883 [Information] Trigger Details: MessageId: xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx, DequeueCount: 5, InsertionTime: 2022-01-10T07:41:29.000+00:00, BlobCreated: 2022-01-10T07:41:28.000+00:00, BlobLastModified: 2022-01-10T07:41:28.000+00:00
    2022-01-10T07:44:39.911 [Error] Executed 'Functions.BlobTrigger1' (Failed, Id=xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx, Duration=11084ms)Exception of type 'System.OutOfMemoryException' was thrown.

    运行的脚本就是执行 AzCopy Copy 文件

    param([byte[]] $InputBlob, $TriggerMetadata)
    Write-Host "PowerShell Blob trigger function Processed blob! Name: $($TriggerMetadata.Name) Size: $($InputBlob.Length) bytes"
    
    $AzcoypFile = "azcopy.exe"
    $AzCopyExists = Test-Path $AzcoypFile
    Write-Host "AzCopy exists:" $AzCopyExists
    # Download AzCopy.zip and unzip if it doesn't exist
    If ($AzCopyExists -eq $False)
    {
        Write-Host "AzCopy not found. Downloading..."
        
        #Download AzCopy
        Invoke-WebRequest -Uri "https://aka.ms/downloadazcopy-v10-windows" -OutFile AzCopy.zip -UseBasicParsing
    
        #unzip azcopy
        write-host "unzip azcopy.zip"
        Expand-Archive ./AzCopy.zip ./AzCopy -Force
        # Copy AzCopy to current dir
        Get-ChildItem ./AzCopy/*/azcopy.exe | Copy-Item -Destination "./AzCopy.exe"
    }
    
    # Run AzCopy from source blob to destination blob  (Single Direction)
    Write-Host "copy new content"
    ./azcopy.exe sync "https://xxxxxxxxxxxxxxxxx..............

    问题分析

    因为默认创建Azure Funciton Windows环境时,平台默认使用的是32 Bit,所以存在内存上限问题。所以最快方法就是查看平台的位数,修改为64 Bit。让系统有更多的内存空间可用。

    参考资料

    I see the message "Worker Process requested recycle due to 'Percent Memory' limit." How do I address this issue? 

    https://docs.microsoft.com/en-us/azure/app-service/faq-availability-performance-application-issues#i-see-the-message--worker-process-requested-recycle-due-to--percent-memory--limit---how-do-i-address-this-issue-

    The maximum available amount of memory for a 32-bit process (even on a 64-bit operating system) is 2 GB. By default, the worker process is set to 32-bit in App Service (for compatibility with legacy web applications).

    Consider switching to 64-bit processes so you can take advantage of the additional memory available in your Web Worker role. This triggers a web app restart, so schedule accordingly.

    Also note that a 64-bit environment requires a Basic or Standard service plan. Free and Shared plans always run in a 32-bit environment.

  • 相关阅读:
    java简单计算器,只能鼠标点击数字
    可以掉落和滑动的星星
    servlet生成数字验证码
    web服务器底层-http请求与相应
    Codeforces 990D Graph And Its Complement 【构造】【性质】
    2018美团CodeM编程大赛 Round A Problem 2 下棋 【贪心】
    Codeforces 988F Rain and Umbrellas 【dp】
    Codeforces 988D Points and Powers of Two 【性质】【卡常】
    Codeforces 981D Bookshelves 【dp】【性质】
    POJ 2104 K-th Number 【主席树】【不带修改】
  • 原文地址:https://www.cnblogs.com/lulight/p/15853941.html
Copyright © 2020-2023  润新知