- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个如下所示的 Azure 应用服务计划,该计划应该有 7 GB 内存。
P2V2
420 total ACU
7 GB memory
Dv2-Series compute equivalent
83.22 USD/Month (Estimated)
我使用它来托管具有单个连续 WebJob 的单个应用程序。当然,该应用程序本身有一个网站,但我根本不使用它。
此外,我的服务计划中只有 1 个应用程序实例,因此这并不是因为多个实例共享总共可用的 7 GiB 内存。
服务计划有 2 个部署槽,1 个用于生产,1 个用于暂存。两个应用程序(生产中和暂存)都已关闭,因为 WebJob 可以在应用程序本身关闭时继续运行。
这是我所看到的令人费解的地方。从应用服务计划概述页面来看,它显示我正在使用大约 45% 的可用总内存。
但有时我会遇到 OutOfMemoryException,因此我开始检查我的 WebJob 实际使用了多少内存。
事实证明,它使用了 2 GiB 可用物理内存中的 1.6 GiB,而不是我预期的 7 GiB。
我获取当前内存的方式是通过以下代码
var currentMemory = Process.GetCurrentProcess().PrivateMemorySize64;
var totalMemory = GC.GetGCMemoryInfo().TotalAvailableMemoryBytes;
This property value will be the value of the COMPlus_GCHeapHardLimit environment variable, or the Server.GC.HeapHardLimit value in runtimeconfig.json, if either is set.
If the program is run in a container, this value is an implementation-defined fraction of the container's size.
Otherwise, the value of the property is the physical memory on the machine that was available for the garbage collector to use when the last garbage collection occurred.
由于我没有设置环境变量、runtimeconfig.json 并且它不是容器,所以我认为 GC.GetGCMemoryInfo().TotalAvailableMemoryBytes
正确返回虚拟机上我的 WebJob 可用的总物理内存,即 2 GiB。
感谢下面 Vova 的评论,我还找到了这篇文章。 https://learn.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-
确实有道理;同时,在我看来,这篇文章是针对应用服务本身的。 WebJob 作为独立于网站的进程运行。虽然症状是一样的。看来我的 WebJob 是 JIT 到 32 位而不是 64 位。
我的 WebJob 构建配置
.NET 6 Console Application
Platform: Any CPU
我试图了解我做错了什么,因为我认为 Azure 在这里做的是正确的事情。
我正在使用 Azure 应用服务来运行 WebJob,因此我的目标是通过可用的最小/最便宜的 SKU 最大限度地提高 WebJob 的可用内存。
最佳答案
我发现问题在于我如何通过在 ADO 管道中创建的 run.cmd
启动脚本运行 WebJob。
dotnet MyWebJob.dll
导致 GC.GetGCMemoryInfo().TotalAvailableMemoryBytes
返回 2 GiB 作为我的 WeJob 的总可用内存,而我的 WebJob 本身 Process.GetCurrentProcess ().PrivateMemorySize64
仅消耗 1.5 GiB 内存。
由于我的 ADO 管道还生成特定于 Windows 平台的可执行文件,因此我还有一个可以运行的 EXE。通过调用 EXE MyWebJob.exe
启动我的 WebJob,GC.GetGCMemoryInfo().TotalAvailableMemoryBytes
返回 5.5 GiB 作为我的 WeJob 的总可用内存,而我的 WebJob 本身 Process.GetCurrentProcess().PrivateMemorySize64
内存膨胀至 3.5 GiB。
出现这两种不同行为的原因是 Path
环境变量同时包含 dotnet SDK x86 和 x64,并且在值中 dotnet x86 位于 dotnet x64 之前。因此,当我执行 dotnet MyWebJob.dll
时,系统正在使用 x86 dotnet 运行时,如调试控制台所示。
C:\home>dotnet --info
.NET SDK (reflecting any global.json):
Version: 6.0.100
Commit: 9e8b04bbff
Runtime Environment:
OS Name: Windows
OS Version: 10.0.14393
OS Platform: Windows
RID: win10-x86
Base Path: C:\Program Files (x86)\dotnet\sdk\6.0.100\
Host (useful for support):
Version: 6.0.0
Commit: 4822e3c3aa
我修改了负责为 WebJob 生成启动脚本的 ADO 任务,以显式使用 x64 版本的 dotnet。 [01/07/2022 00:21:06 > 52cb62:信息] C:\local\Temp\jobs\Continuous\MyWebJob\n04q3opt.krt>“C:\Program Files\dotnet\dotnet.exe”MyWebJob .dll
这解决了问题。
结果与不使用 dotnet
直接运行 EXE 的结果相同,如我上面所示。
关于azure - 当应用服务计划有 7 GiB 时,WebJob 只能访问 2 GiB 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70600124/
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 Improv
PowerShell Web Access 允许您通过 Web 浏览器运行 PowerShell cmdlet。它显示了一个基于 Web 的控制台窗口。 有没有办法运行 cmdlet 而无需在控制台窗
我尝试在无需用户登录的情况下访问 Sharepoint 文件。 我可以通过以下任一方式获取访问 token 方法一: var client = new RestClient("https://logi
我目前正在尝试通过 Chrome 扩展程序访问 Google 服务。我的理解是,对于 JS 应用程序,Google 首选的身份验证机制是 OAuth。我的应用目前已成功通过 OAuth 向服务进行身份
假设我有纯抽象类 IHandler 和派生自它的类: class IHandler { public: virtual int process_input(char input) = 0; };
我有一个带有 ThymeLeaf 和 Dojo 的 Spring 应用程序,这给我带来了问题。当我从我的 HTML 文件中引用 CSS 文件时,它们在 Firebug 中显示为中止。但是,当我通过在地
这个问题已经有答案了: JavaScript property access: dot notation vs. brackets? (17 个回答) 已关闭 6 年前。 为什么这不起作用? func
我想将所有流量重定向到 https,只有 robot.txt 应该可以通过 http 访问。 是否可以为 robot.txt 文件创建异常(exception)? 我的 .htaccess 文件: R
我遇到了 LinkedIn OAuth2: "Unable to verify access token" 中描述的相同问题;但是,那里描述的解决方案并不能解决我的问题。 我能够成功请求访问 toke
问题 我有一个暴露给 *:8080 的 Docker 服务容器. 我无法通过 localhost:8080 访问容器. Chrome /curl无限期挂断。 但是如果我使用任何其他本地IP,我就可以访
我正在使用 Google 的 Oauth 2.0 来获取用户的 access_token,但我不知道如何将它与 imaplib 一起使用来访问收件箱。 最佳答案 下面是带有 oauth 2.0 的 I
我正在做 docker 入门指南:https://docs.docker.com/get-started/part3/#recap-and-cheat-sheet-optional docker-co
我正在尝试使用静态 IP 在 AKS 上创建一个 Web 应用程序,自然找到了一个带有 Nginx ingress controller in Azure's documentation 的解决方案。
这是我在名为 foo.js 的文件中的代码。 console.log('module.exports:', module.exports) console.log('module.id:', modu
我试图理解访问键。我读过https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-se
我正在使用 MGTwitterEngine"将 twitter 集成到我的应用程序中。它在 iOS 4.2 上运行良好。当我尝试从任何 iOS 5 设备访问 twitter 时,我遇到了身份验证 to
我试图理解访问键。我读过https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-se
我正在使用以下 API 列出我的 Facebook 好友。 https://graph.facebook.com/me/friends?access_token= ??? 我想知道访问 token 过
401 Unauthorized - Show headers - { "error": { "errors": [ { "domain": "global", "reas
我已经将我的 django 应用程序部署到 heroku 并使用 Amazon s3 存储桶存储静态文件,我发现从 s3 存储桶到 heroku 获取数据没有问题。但是,当我测试查看内容存储位置时,除
我是一名优秀的程序员,十分优秀!