【问题标题】:Get application pool's memory usage获取应用程序池的内存使用情况
【发布时间】:2018-06-19 12:19:30
【问题描述】:

我想使用 Process 类获取我的应用程序池的内存使用情况。到目前为止,这是我的代码:

            ServerManager serverManager = new ServerManager();
            ApplicationPoolCollection applicationPoolCollection = serverManager.ApplicationPools;


            Process process = Process.GetProcessById(applicationPoolCollection.Where(p => p.Name == "mywebsite.com").First().WorkerProcesses[0].ProcessId);

我可以获得 Process 类,但我如何知道它当前使用的 RAM 量是多少?我确实看到了像PagedMemorySize64NonpagedSystemMemorySize64 这样的属性。哪一个会给我它目前占用的正确 RAM?

我不能像这样使用PerformanceCounter

PerformanceCounter performanceCounter = new PerformanceCounter();

                performanceCounter.CategoryName = "Process";

                performanceCounter.CounterName = "Working Set";

                performanceCounter.InstanceName = process.ProcessName;
 Console.WriteLine(((uint)performanceCounter.NextValue() / 1024).ToString("N0"));

ProcessName 的原因会返回 w3p,因此 PerformanceCounter 会在控制台中写入 IIS RAM 的总使用量,这不是我想要的。

我只需要应用程序池的 RAM 使用量。因此我认为我的答案在于 Process 类而不是 PerformanceCounter

感谢任何帮助。

【问题讨论】:

  • 您需要一定数量的 RAM,还是分配给进程的内存数量?

标签: c# .net iis


【解决方案1】:

如果您只需要进程可见的 ram 数量,这意味着分配给进程的 ram 数量,但不需要进程实际使用它的每一位,您可以使用:WorkingSet。 (为您的 .net 选择合适的版本)

请您注意一个事实,即进程内存诊断还有更多内容,以防您担心分配的虚拟内存、提交的内存、映射文件等等。

【讨论】:

  • 谢谢。我需要任务管理器中显示的 RAM 量,例如:如果在任务管理器中内存使用量显示为 290 MB,则代码应该给我(显然需要除以 1024 * 1024)。我尝试了您的 WorkingSet 属性,但是它与任务管理器之间存在差异。工作集通常返回比任务管理器中显示的更多的内存。知道为什么会发生这种情况吗?
  • 尝试使用PrivateMemorySize
猜你喜欢
  • 2018-01-24
  • 1970-01-01
  • 2013-09-11
  • 2013-07-19
  • 1970-01-01
  • 2012-04-03
  • 1970-01-01
  • 2017-06-03
  • 2011-06-30
相关资源
最近更新 更多