【问题标题】:DotNetZip performance issue, but only on one specific serverDotNetZip 性能问题,但仅在一台特定服务器上
【发布时间】:2015-05-07 07:15:07
【问题描述】:

我在使用 DotNetZip 库时遇到了一个奇怪的性能问题。

在应用程序(在 asp.net 下运行)中,我从数据库中读取一组文件,并将它们即时打包成一个 zip 文件供用户下载。

在我的开发笔记本电脑上一切正常。一个大约 10MB 的 zip 文件,默认压缩率大约需要 5 秒才能完成。但是,在客户的开发服务器上,压缩同一组文件大约需要 1-2 分钟。我什至经历了更长的时间,长达几分钟。压缩运行时 CPU 利用率为 100%,否则保持在 0% 左右,因此不是由于过载。

更有趣的是,在生产服务器上,大约需要 20 秒才能完成。

我应该从哪里开始寻找?

一些硬件规格:

我的笔记本电脑

在具有 2 个内核和 4GB 专用 RAM 的虚拟机上运行的开发环境。

  • 酷睿 i5 M540 2.5GHz
  • 8 GB 内存
  • Win7

开发服务器

根据我的电脑上的属性对话框(可能是虚拟化的)

  • 英特尔至强 5160 3GHz
  • 540MB 内存
  • Windows 2003 服务器

任务管理器报告单核

生产服务器

根据我的电脑上的属性对话框(可能是虚拟化的)

  • 氙气 5160 3GHz
  • 512MB 内存
  • Windows 2003 服务器

任务管理器报告双核

更新 服务器在 VMWare 主机上运行。找到隐藏在任务栏中的 VMWare 图标。

【问题讨论】:

  • 两台服务器都在运行病毒扫描程序,我的笔记本电脑也是如此。
  • 不同病毒扫描程序? :-) 其他选项:服务器上的非本地文件(这些文件实际上并不在服务器上,它们可以从服务器访问并且它们在 LAN 中)
  • 有多少个文件? 10? 100? 1000? 10,000? 1,000,000?
  • 少于 100 个文件。在测试包中大约有 60 个。顺便说一句,现在意识到在开发服务器上相同的包包含大约 20 个文件并且大小只有一半......
  • 尝试在 .NET 4.5+ 中使用 msdn.microsoft.com/en-us/library/…

标签: dotnetzip


【解决方案1】:

正如米奇所说,病毒扫描程序可能是您最好的选择。结合开发服务器只是单核机器和生产服务器是双核(可能没有病毒扫描程序)可能会解释延迟。了解这些机器中磁盘的类型也很有价值。例如,如果生产服务器和您的笔记本电脑有 SSD,而开发服务器有一个非常旧的低 rpm 标准硬盘,这也可以解释延迟。尝试查看开发服务器和生产服务器的 zip 文件夹的 I/O 读/写,您可以使用 SysInternals tools,如果您有病毒扫描程序或任何其他意外进程正在运行,您可能会在那里看到不同。 SysInternals 工具在快速找到罪魁祸首方面可能很有价值。

更新:因为您评论说 zip 是在内存中创建的,所以我想补充一下,您还可以使用这些工具更好地了解内存中发生的情况。由于开发服务器和生产服务器非常相似,延迟几分钟,您会期望得到几乎相同的结果,这让我想到了页面文件。看看开发服务器上是否有其他进程占用了大量内存.如果没有足够的空间用于 zip 操作,开发服务器将开始使用页面文件,这非常昂贵。

【讨论】:

  • 压缩文件是在内存中创建的,所以它应该与硬盘类型无关。
  • 正如您在硬件规格中看到的那样,开发服务器出于某种原因有更多的专用内存。任务管理器还显示(在 PF 图中)开发服务器已提交约 550MB 的内存,生产服务器已提交约 1.2GB 的内存。压缩文件时,数量不会增加超过几 MB。
【解决方案2】:

硬件似乎是这里的问题。

客户的 IT 人员现已升级运行虚拟化开发服务器的服务器硬件,我现在看到压缩时间约为 6 秒,与我的本地计算机上相同的包大小和文件数量。

现在可以在“我的电脑”属性窗口中找到的规格:

  • AMD 飞鸿 II X6 1100T
  • 3.83GHz 1.99 GB 内存

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    相关资源
    最近更新 更多