Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Eclipse中强制线程转储?_Java_Eclipse_Memory Leaks_Weblogic - Fatal编程技术网

Java 如何在Eclipse中强制线程转储?

Java 如何在Eclipse中强制线程转储?,java,eclipse,memory-leaks,weblogic,Java,Eclipse,Memory Leaks,Weblogic,我正在通过BEA Weblogic Server v9.2运行时环境在Eclipse内部启动Weblogic应用程序。如果这是直接从命令行运行的,我会按ctrl键来强制执行线程转储。在Eclipse中有什么方法可以做到这一点吗?您是否尝试使用java.exe来启动Eclipse,而不是在Eclipse中使用javaw.exe 这可能会为您提供所需的控制台,如和中所述 java选项方面的其他想法也可以从中衍生出来。确实感谢VonC指出了SO线程,Dustin在对其消息的评论中指出 我在Eclips

我正在通过BEA Weblogic Server v9.2运行时环境在Eclipse内部启动Weblogic应用程序。如果这是直接从命令行运行的,我会按ctrl键来强制执行线程转储。在Eclipse中有什么方法可以做到这一点吗?

您是否尝试使用java.exe来启动Eclipse,而不是在Eclipse中使用javaw.exe

这可能会为您提供所需的控制台,如和中所述


java选项方面的其他想法也可以从中衍生出来。

确实感谢VonC指出了SO线程,Dustin在对其消息的评论中指出

我在Eclipse中运行了一个带有GUI的Java应用程序,我可以在Windows的process manager中看到相关的javaw.exe及其PID,7088,当然在Unix中更简单

如果在命令提示符下键入jstack 7088,则每个线程都会有所需的堆栈转储。 酷


如果我们可以直接从Eclipse中执行此操作会更好,但这已经很有用了。

您可以在调试模式下执行此操作:转到“调试”透视图中的“调试”视图,单击已启动的进程并单击“暂停”,您将获得所有进程的图形堆栈

注意:这在使用远程调试时也有效,您不需要从eclipse启动weblogic,您可以自己启动它,打开调试端口并为其创建远程java应用程序调试配置。

检查SendSignal:

是您可以尝试的另一个选项。从这些功能中:

运行Java进程的线程转储 例如,像Tomcat这样的Windows服务 例如,从javaw.exe开始, 在任何浏览器或浏览器中运行的小程序 嵌入到另一个进程中的JVM。 StackTrace在Windows、Linux和 MacOSX


EclipseWiki:列出在Eclipse中创建线程转储的所有可能选项。根据具体情况,一个或另一个可能工作得更好-我个人最喜欢的Windows工具是Adaptej Stacktrace。

您可以通过JVisualVM连接并获得线程转储。只需在应用程序树中右键单击应用程序节点,并在linux上选择Thread dump(线程转储)

,至少您可以执行ps-ef | grep java来获取PID,然后执行kill-3 PID,它将输出到Eclipse控制台。

如果您喜欢基于UI的解决方案,这可能是一个不错的选择。它的优点还在于它是用JDK分发的

要在visualvm中获取线程转储,请执行以下操作:

连接到远程或本地进程并 转到线程选项卡->线程转储按钮
警告:我们不知道用于启动eclipse/weblogic的平台:如果是windows,则java1.5不支持jstack,而1.6仅部分支持jstack。直接从eclipse启动外部工具很容易:菜单运行->外部工具或运行按钮旁边的工具栏按钮添加一个字符串提示以显示PID,但是您需要将它添加到JVM中:set JAVA_OPTS=%JAVA_OPTS%-Xdebug-Xrunjdwp:transport=dt_socket,address=8001,server=y,suspend=nOh my gosh!我不敢相信直到现在我才知道Ctrl-Break!!!!!!!!!!!!!!!!!!谢谢你的这篇文章,让mt做到了这一点!!!!!!!!!!值得一提的是,用户必须启动java机器提供的jvisualvm。在我的linux机器上,它位于:/usr/lib/jvm/java-7-oracle/bin/jvisualvm中