在运行的Java应用程序中查找问题的更好方法?

在运行的Java应用程序中查找问题的更好方法?,java,debugging,runtime,Java,Debugging,Runtime,我们有一些java应用程序(JAR)作为本地主机上的后端服务器应用程序运行。这些程序位于虚拟机箱(RHEL 6.2)中。 其中一个罐子运行了5天后,就停止工作了。未引发异常(未看到任何可能在catch块中捕获的错误输出)。为了找出原因,我们输入了一些println,并使用shell脚本在命令行上使用操作符将输出重定向到文本文件。 大约4到5天后,我们遇到了这样一种情况:我们可以看到jar仍在运行,但它没有向文本文件或应用程序应该向其写入条目的数据库输出任何内容。 也许文本文件变得太大,虚拟框无法

我们有一些java应用程序(JAR)作为本地主机上的后端服务器应用程序运行。这些程序位于虚拟机箱(RHEL 6.2)中。
其中一个罐子运行了5天后,就停止工作了。未引发异常(未看到任何可能在catch块中捕获的错误输出)。为了找出原因,我们输入了一些
println
,并使用shell脚本在命令行上使用
操作符将输出重定向到文本文件。
大约4到5天后,我们遇到了这样一种情况:我们可以看到jar仍在运行,但它没有向文本文件或应用程序应该向其写入条目的数据库输出任何内容。
也许文本文件变得太大,虚拟框无法处理,但基本上我们想知道:

这些运行时问题在Java中是如何定位的?在C++中,我们有ValGRN,Purvices等,但是
1。Java中有这样的工具吗?

2.您建议我们如何输出println,而不面临超大文本文件问题?或者有更好的方法吗?

而不是打印到系统中。使用log4j之类的工具怎么样。Log4J允许调整日志文件大小、版本控制和清除

您可能还需要重新考虑您的服务器体系结构

这些运行时问题在Java中是如何定位的?在C++中,我们有 磨谷、净化等,但1。Java中有这样的工具吗

有很多可用的java分析器,很少有免费的。有一个叫做VisualVM,它是java发行版附带的。您可以使用探查器附加进程,但探查器只会帮助您发现一些问题,如内存泄漏、cpu意向性任务等

  • 您建议我们如何输出println,而不面临超大文本文件问题?还是有更好的方法

  • Sysout不是处理这个问题的好方法。log4j等记录器提供了非常健壮且易于使用的API。Log4j还提供了配置日志文件的简单方法,etc功能

    日志记录是输出应用程序状态的最佳方法。请参阅
    Log4J
    SLF4J
    日志库,它们还支持滚动日志文件,以避免日志文件变得过大。此外,在应用程序中,如果文件大小增加超过阈值,则应执行滚动。还应尝试使用
    JProfiler
    VisualVM
    监视应用程序,以查看应用程序的当前内存和其他重要状态。这还可以帮助您查看应用程序被卡住的位置。