有哪些Java工具可用于测试计算机的CPU、内存、磁盘和网络I/O性能?

13

我需要解释为什么我的应用在远程位置表现不佳。安装分析器会很麻烦。我怀疑机器的配置不当,但我需要一些简单的方法来显示标准应用在他们的机器上遭受了损失,因此可以证明我的应用程序无问题并将重点转移到他们的系统管理员身上。

理想情况下,我想建议他们安装一个简单的Java应用程序来测试主机环境的性能。如果它可以返回CPU、磁盘、网络等方面的规格说明,那就再好不过了。

我希望在网上找到这样的工具,但目前尚未成功。


1
你认为可能是什么原因导致了问题?你的应用程序有大量数据吗?它有华丽的图形吗?连接到数据库?你可能只想测试你认为引起问题的部分。 - Michael Laffargue
表现不佳的是什么?它是访问数据库缓慢,启动时间长,屏幕绘制慢吗?它总是表现不佳还是性能不稳定? - Peter Lawrey
你可以使用 jstackkill -3 命令来进行线程转储,作为一种简易的性能分析工具。 - Frank Pavageau
1
在我看来,更好的计划是查看您的应用程序中运行缓慢的部分。使用某个随机程序来展示系统管理员的无能最好的情况是他们会说“这证明不了什么”。最糟糕的情况是您选择的应用程序实际上运行良好,而您看起来像是无能的人。而且谁知道,您的应用程序可能真的存在问题。 - parsifal
我认为问题在于目标平台是Sun T5240架构,而我的应用程序更喜欢较少但更快的“处理器”,而不是这么多慢的处理器。你们都提出了很好的观点。然而,日志似乎表明一切都很慢,也许有一个共同的根本原因。 - Paul Jackson
1个回答

18
"就“简单的Java应用程序”而言,我之前做过类似的事情。我的工作重点是对Java虚拟机(虚拟机 - “JVM”)进行分析,而不是测试特定Java应用程序的性能。重点是测试托管操作系统的功能 - 包括:

  • CPU
  • 内存
  • 操作系统
  • 如果虚拟化,则服务器VM(而不是JVM)本身 - 包括上述所有虚拟化和物理组件。
  • 主要忽略外部因素,例如磁盘和网络。

我考虑的解决方案包括:

"
SciMark是一个综合的Java基准测试,用于衡量在科学和工程应用中出现的数值代码的性能。它由五个计算核心组成:FFT、高斯-赛德尔松弛法、稀疏矩阵乘法、蒙特卡罗积分和密集LU分解。这些核心被选择为提供指示底层JVM/JIT在利用这些类型的算法的应用程序上表现如何的指标。问题的规模有意选择小,以便隔离内存层次结构的影响并关注内部JVM/JIT和CPU问题。基准测试的较大版本(SciMark 2.0 LARGE)处理了超出缓存问题大小的内存子系统性能。它测量多个计算核心,并报告近似Mflops(每秒百万浮点运算次数)的综合得分。
虽然有点过时(2004年),但SciMark仍然似乎非常有效。
每个测试运行需要约30秒执行。
来自http://www.spec.org/jvm2008/
SPECjvm2008(Java虚拟机基准测试)是一个基准测试套件,用于衡量Java运行时环境(JRE)的性能,包含多个真实应用程序和基准测试,重点关注核心Java功能。该套件专注于JRE执行单个应用程序的性能;它反映了硬件处理器和内存子系统的性能,但对文件I / O的依赖性较低,并且不涉及跨计算机的网络I / O。 SPECjvm2008负载模仿各种常见的通用应用程序计算。这些特征反映出这个基准测试将适用于在各种客户端和服务器系统上测量基本Java性能的意图。 SPEC还发现Java的用户体验很重要,因此套件包括启动基准测试,并有一个必需运行类别称为base,必须在不调整JVM以提高开箱即用性能的情况下运行。 SPECjvm2008基准测试亮点: - 利用真实的应用程序(如derby、sunflow和javac)和面向区域的基准测试(如xml、序列化、加密和scimark)。 - 还在执行JRE的上下文中测量操作系统和硬件的性能。
与SciMark不同,SPECjvm2008需要较长时间才能完全执行一套测试——大约需要2个多小时

为了测试网络,我会使用类似 iperf 这样的工具,它适用于 Linux/Windows 等操作系统。

对于测试磁盘性能,这是一个完整的科学领域。由于不知道你使用的操作系统是什么,我无法给出具体答案。不过,例如如果你使用的是 Linux 操作系统,我会查看 this


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接