如何测试我的java应用程序能否成功处理Tomcat服务器上的低内存/CPU资源?

如何测试我的java应用程序能否成功处理Tomcat服务器上的低内存/CPU资源?,java,tomcat,load-testing,apm,Java,Tomcat,Load Testing,Apm,我想测试我的java应用程序在只有512M RAM的Tomcat服务器上的行为。换句话说,我需要进行内存负载测试,以检查我的应用程序是否可以在这种受限环境中运行 使用哪些工具以及如何实现这一点 我听说过APM软件,包括Stackify Prefix、New Relic APM、JMeter、JVisualVM、JVM Monitor、JBenchX,但我不确定是否需要为我的特定目的继续使用它们中的任何一种 CPU资源非常有限也存在同样的问题。在部署到内存/CPU有限的Jelast云之前,我想在桌

我想测试我的java应用程序在只有512M RAM的Tomcat服务器上的行为。换句话说,我需要进行内存负载测试,以检查我的应用程序是否可以在这种受限环境中运行

使用哪些工具以及如何实现这一点

我听说过APM软件,包括Stackify Prefix、New Relic APM、JMeter、JVisualVM、JVM Monitor、JBenchX,但我不确定是否需要为我的特定目的继续使用它们中的任何一种


CPU资源非常有限也存在同样的问题。在部署到内存/CPU有限的Jelast云之前,我想在桌面PC上测试我的应用程序。

您可以通过修改定义tomcat服务器将使用的最大堆空间来人为限制分配给tomcat的JVM堆

如果您只想测试低堆大小,那么就足够了

您还可以将Tomcat服务器绑定到单个CPU核心(或有限数量的核心)


如果您想更进一步,您可以使用创建一个虚拟机,即复制部署后将拥有的所有预期硬件/软件

关于测试,我建议如下:

  • -将您的系统置于预期负载下,以查看是否能够处理它
  • -基本上与负载测试相同,但持续时间较长(即过夜或周末)-这将允许您识别
  • -从负载测试开始,逐渐增加负载,直到响应时间开始超过可接受的阈值或开始出现错误(无论先发生什么)-它将让您了解应用程序/配置的限制,并了解将要突破的内容和方式

使用诸如或之类的探查器工具对代码进行微调也将是有益的

最好的方法是使用虚拟机。您可以选择自己的技术,但一个简单的选择是使用Oracle VirtualBox,它可免费用于许多平台。只需在虚拟机中安装一个最小的操作系统,然后添加Java、应用程序等,然后对其运行负载测试

网络正常工作,因此您可以使用现有的负载测试框架,并将其指向VM的IP地址

还有其他更有趣的方法,例如使用Docker或其他什么,但这将完成烟雾测试


我不建议尝试使用具有大量RAM的服务器,然后尝试在不使用虚拟机的情况下“综合”低RAM的情况(顺便说一句,Docker在内部使用VM)。

512M并不多。老实说,我想找一个更好的主机提供商。我想亚马逊会以每月15美元的价格给你四倍的回报。但我认为现在最好的办法是将JVM设置为这些内存限制,在PC上运行一个真实的实例,并运行一个大型功能测试至少4到8小时,最好是24小时,以确保您能够处理大量负载。这不是一个很好的建议,因为512M的jada堆空间和512M的总系统RAM之间存在很大的差异。请记住,操作系统也必须适应512M的系统RAM,Java虚拟机也使用大量非堆内存。我提到过512Mb的堆吗?没有,但最初的海报明确要求。您提到了使用
-Xmx
,它只限制堆。您可以用任何值替换我的注释中的
512M
,但将JVM限制在有限的总内存(而不仅仅是堆内存)中仍然是无效的。