【问题标题】:Impact of memory footprint on performance内存占用对性能的影响
【发布时间】:2013-09-20 03:44:58
【问题描述】:

我们有一个 .Net (VS 2012) 64 位应用程序,在 Windows Server 2012 上运行,它会在内存中加载大量数据,以便在接下来的 24 到 48 小时内使用它。根据我们的设计,我们更喜欢通过连接到数据源来预先加载数据。进程的净内存占用高达 7-8 GB,这是因为我们为代表并行客户端的 4 个独立线程复制数据,因此每个客户端需要 2 GB 的数据。

我们使用的硬件有 128 GB 的 RAM,4 个 CPU(24 核)处理器

我想知道内存占用是否会影响进程的净性能,例如执行速度、处理器利用率等

即使我们有这么好的 RAM 并且净使用率从不超过 60%,当它连续使用 48 小时时,仍然会出现进程页面交换到 HD 的情况,从而使其变慢。是否有一些服务器设置或 .Net c# 代码 API,这将帮助我们处理由于内存占用而发生的性能问题。我们可以明确告诉系统我们的进程需要大量内存。

我还要补充一点,每个并行客户端都会产生多个线程池线程。要完成 Sub 任务,现在进程的平均 CPU 使用率在 50 - 60% 之间,对于我们拥有的良好配置,这是否意味着我们需要采取措施找出可能影响性能的磁盘 IO 瓶颈

【问题讨论】:

  • 你的硬件很好,但你还是要找出瓶颈在哪里。真的是内存使用吗?还是磁盘 I/O?

标签: .net multithreading memory memory-management


【解决方案1】:

内存消耗很重要的第一种情况是处理大量数据的 CPU 密集型应用程序。典型的 PC 可以在不到半纳秒 (0.5 ns) 的时间内执行一条指令。 (某些)内存消耗很重要的第二种情况是在应用程序的冷启动期间。操作系统试图通过在主内存中缓存磁盘中的数据来缓解这种情况。这就是应用程序在第二次启动时速度更快的原因,在所谓的热启动期间(数据缓存在更快的内存中)。

【讨论】:

  • 在我们的例子中,应用程序肯定是 CPU 密集型的,因为每个父线程/客户端产生的每个父线程/客户端都会调用多个 Thrapool 线程来完成子任务,因此平均 CPU 使用率在 50 - 60% 之间,这很好对于我们拥有的那种服务器来说已经足够了。现在是否有任何服务器设置可以帮助我们提高净性能,或者我仍然需要寻找挥之不去的瓶颈,这可能会导致大量磁盘 IO
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
  • 2016-10-22
  • 2022-08-07
  • 2013-08-30
  • 2021-03-09
  • 2011-06-08
  • 1970-01-01
相关资源
最近更新 更多