【问题标题】:How to get Kentico's memory statistics via C# code?如何通过 C# 代码获取 Kentico 的内存统计信息?
【发布时间】:2020-05-09 04:34:59
【问题描述】:

背景

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

问题

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

附加信息

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

谢谢!

【问题讨论】:

    标签: c# memory-management out-of-memory content-management-system kentico


    【解决方案1】:

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

    【讨论】:

    • 看来我对 Kentico API 的看法是错误的。请参阅@Michal 的回答。
    【解决方案2】:

    您可以使用SystemHelper 类来获取统计信息和内存数据。它仍然主要依赖于 .NET Process 及其属性。如果您使用的是 azure,则可以使用上面的 PerformanceCounters 来记录您自己的 sets of information into application insights 并根据这些计数器创建您自己的警报。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2016-12-24
          • 1970-01-01
          • 2023-02-15
          • 2011-04-29
          • 2018-11-24
          • 1970-01-01
          • 2022-10-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多