首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以适当的方式监视JVM内存?

如何以适当的方式监视JVM内存?
EN

Software Engineering用户
提问于 2012-04-19 15:11:14
回答 3查看 19.8K关注 0票数 9

我正在考虑如何在生产环境中以低开销的方式完成JVM内存监视,甚至在繁忙时间内也是如此。

假设我在生产中有两个tomcat应用服务器,在它们后面设置负载平衡。如果我能看到jvm内存统计信息,我可以告诉负载平衡停止将请求发送到服务器,这将遇到OOM问题。这有道理吗?Jconsole或VisualVM消耗更多的性能资源不是我的选择。

EN

回答 3

Software Engineering用户

发布于 2012-04-19 22:21:29

JMX将是答案(Jolokia是JMX接口)。

您可能还想看看- https://stackoverflow.com/questions/242958/best-tools-to-monitor-tomcat

票数 3
EN

Software Engineering用户

发布于 2014-03-22 06:24:31

其他人就如何监控内存使用情况提供了建议..。

假设我在生产中有两个tomcat应用服务器,在它们后面设置负载平衡。如果我能看到jvm内存统计信息,我可以告诉负载平衡停止将请求发送到服务器,这将遇到OOM问题。这有道理吗?

说大也大吧。但这并不一定是解决问题的最佳方法。

让我们回到问题的根源..。海洋海洋生态系统。就Tomcat而言,OOME很可能是由下列之一引起的:

  • 应用程序中的内存泄漏(可能是Tomcat本身),
  • 试图在每个Tomcat上并行处理太多请求,或者
  • 在处理过程中需要过多内存的单个请求。

为了解决你的问题,你首先需要找出其中的一个.因为他们每个人的解决方案是不同的。

1)要查看这是否是内存泄漏,需要使用内存分析工具来检查长期内存使用模式。这可能会显示锯齿图案..。这是正常的。你需要寻找的是,随着时间的推移,“牙齿”底部的水平呈上升趋势。这表示正在产生无法回收的垃圾;即内存泄漏。

如果您有内存泄漏,那么最好的解决方案是找出代码的哪个部分负责,并修复它。任何其他的..。包括负载平衡..。是一种绷带解决方案,可能会导致更严重的问题。

2)在消除了内存泄漏之后,您需要弄清楚问题是否在于您一次处理太多请求。我不确定实现这一目标的最佳方法,但是如果这是问题所在(或者您怀疑是这样),那么有几种可能的解决方案:

  • 调整Tomcat服务器配置以减少工作线程的数量。
  • 如果您的请求是I/O绑定的,那么另一种可能是查看Servlet规范的最新版本中提供的异步请求处理支持--参见http://docs.oracle.com/javaee/7/tutorial/doc/servlets012.htm。但这将是更多的工作。

3)如果问题是某些请求占用了太多内存,那么您需要弄清楚如何在处理这些请求之前检测到这些请求。检测和处理这些请求都很困难.如果没有您的申请的详细信息,就很难提供建议。但有几个务实的解决办法是:

  • 将异常请求转发给另一个具有大堆的服务器.OOME不会干扰“正常”请求的地方。
  • 增加堆大小。如果您有足够的物理内存,使用更大的堆运行实际上可以提高Tomcat服务器的效率.同时也避免了海洋海洋生态系统。

总之,为了避免OOME,我建议你弄清楚为什么你要得到OOME。并试图直接处理OOME的原因。

票数 1
EN

Software Engineering用户

发布于 2013-03-14 10:52:54

也许jvmtop值得你看看。

它以“顶级”的方式向您展示了基于每个jvm的监视指标,如内存消耗、cpu利用率、线程计数等。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/145219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档