0

背景

当用户访问我的 Kentico 网站的几页时,我最近遇到了内存不足的异常。快进 - 我发现分配的内存(系统 > 常规)超过 2 GB!然后我去调试>清除缓存,然后注意到分配的内存大约在 400 MB 左右(呸..)。现在,当用户访问该页面时,它可以正常工作而不会出现任何内存不足的异常。

在此处输入图像描述

问题

有没有办法通过代码(最好是 C#)获取这些内存统计信息?我正在考虑能够定期监视这些内存统计信息并在分配的内存过高时触发警报(从我的 C# 代码向 webhook 发送电子邮件/帖子)。

附加信息

  • Kentico 版本 9.0.42,托管在 Azure 中,扩展到 2 个实例。
  • 应用服务计划(在 Azure 中)的内存使用量大约为 50% - 这排除了在该级别设置警报。

谢谢!

4

4 回答 4

1

您可以使用SystemHelper类来获取统计信息和内存数据。它仍然主要依赖于 .NET Process及其属性。如果您使用的是 azure,则可以将上述信息与 PerformanceCounters 一起使用,将您自己的信息集记录到应用程序洞察中,并根据这些计数器创建您自己的警报。

于 2020-01-23T07:37:50.190 回答
1

如果您查看系统页面上的代码,您会找到答案。转到/CMSModules/System/Controls/System.ascx.cs文件并搜索Memory.Text. 您会找到几种SystemHelper方法来为您获取值。

SystemHelper.GetVirtualMemorySize()
SystemHelper.GetWorkingSetSize()
SystemHelper.GetPeakWorkingSetSize()

于 2020-01-23T14:27:55.513 回答
0

Kentico 建议每 24 小时重新启动一次您的应用程序。我建议您安排在夜间某个时间一个接一个地重新启动您的实例。

于 2020-01-23T22:11:33.163 回答
-1

Kentico API 中似乎没有任何东西可以访问内存统计信息,但也许这个答案会对您有所帮助。

于 2020-01-22T23:34:44.847 回答