AI智能
改变未来

【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:002022-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 $AzcoypFileWrite-Host \"AzCopy exists:\" $AzCopyExists# Download AzCopy.zip and unzip if it doesn\'t existIf ($AzCopyExists -eq $False){Write-Host \"AzCopy not found. Downloading...\"#Download AzCopyInvoke-WebRequest -Uri \"https://aka.ms/downloadazcopy-v10-windows\" -OutFile AzCopy.zip -UseBasicParsing#unzip azcopywrite-host \"unzip azcopy.zip\"Expand-Archive ./AzCopy.zip ./AzCopy -Force# Copy AzCopy to current dirGet-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.

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 【Azure 应用服务】Azure Function (PowerShell) 执行时报错 "out of memory"