我正在考虑如何在生产环境中以低开销的方式完成JVM内存监视,甚至在繁忙时间内也是如此。
假设我在生产中有两个tomcat应用服务器,在它们后面设置负载平衡。如果我能看到jvm内存统计信息,我可以告诉负载平衡停止将请求发送到服务器,这将遇到OOM问题。这有道理吗?Jconsole或VisualVM消耗更多的性能资源不是我的选择。
发布于 2012-04-19 22:21:29
JMX将是答案(Jolokia是JMX接口)。
您可能还想看看- https://stackoverflow.com/questions/242958/best-tools-to-monitor-tomcat。
发布于 2014-03-22 06:24:31
其他人就如何监控内存使用情况提供了建议..。
假设我在生产中有两个tomcat应用服务器,在它们后面设置负载平衡。如果我能看到jvm内存统计信息,我可以告诉负载平衡停止将请求发送到服务器,这将遇到OOM问题。这有道理吗?
说大也大吧。但这并不一定是解决问题的最佳方法。
让我们回到问题的根源..。海洋海洋生态系统。就Tomcat而言,OOME很可能是由下列之一引起的:
为了解决你的问题,你首先需要找出其中的一个.因为他们每个人的解决方案是不同的。
1)要查看这是否是内存泄漏,需要使用内存分析工具来检查长期内存使用模式。这可能会显示锯齿图案..。这是正常的。你需要寻找的是,随着时间的推移,“牙齿”底部的水平呈上升趋势。这表示正在产生无法回收的垃圾;即内存泄漏。
如果您有内存泄漏,那么最好的解决方案是找出代码的哪个部分负责,并修复它。任何其他的..。包括负载平衡..。是一种绷带解决方案,可能会导致更严重的问题。
2)在消除了内存泄漏之后,您需要弄清楚问题是否在于您一次处理太多请求。我不确定实现这一目标的最佳方法,但是如果这是问题所在(或者您怀疑是这样),那么有几种可能的解决方案:
3)如果问题是某些请求占用了太多内存,那么您需要弄清楚如何在处理这些请求之前检测到这些请求。检测和处理这些请求都很困难.如果没有您的申请的详细信息,就很难提供建议。但有几个务实的解决办法是:
总之,为了避免OOME,我建议你弄清楚为什么你要得到OOME。并试图直接处理OOME的原因。
发布于 2013-03-14 10:52:54
也许jvmtop值得你看看。
它以“顶级”的方式向您展示了基于每个jvm的监视指标,如内存消耗、cpu利用率、线程计数等。
https://softwareengineering.stackexchange.com/questions/145219
复制相似问题