如何将 jstack 输出重定向到文件?
How to redirect jstack output to a file?
我已经尝试 jstack -l <PID> >> dump.log
并且 dump.log 创建的文件没有内容。虽然我可以在 Java 应用程序是 运行 的终端中看到线程转储,但我需要文件中的线程转储。
此外,在 jstack 输出中有一条消息:无法打开套接字文件:目标进程未响应或 HotSpot VM 未加载。
我尝试了 运行 java 和 jstack 都由系统用户尝试,但仍然没有运气将 pitut 重定向到文件。 java 8 和 9 我都用过。
PS:我用谷歌搜索了这个问题,发现人们在使用 jstack 或 jmap 输出文件时遇到不一致的情况。如果您对问题有任何可行的解决方案,请告诉我。
您可以通过以下命令获取线程转储:
sudo jstack <PID> > a.txt
以上应该可行,因为您提到您可以在终端上看到线程转储。
但是你也提到jstack输出
Unable to open socket file: target process not responding or HotSpot VM not loaded.
因此,您的进程本身可能有问题,我认为它没有正确加载。解决该问题,jstack
应该适合您。
另一个问题可能是您可能已经用完了系统中打开的文件数。 运行 以下 2 个命令。
- 查找每个进程的打开文件限制:
ulimit -n
- 统计所有进程打开的文件总数:
lsof | wc -l
如果以上两个命令的输出相同,您可能已经用完了文件打开总数限制。因此,您无法将输出写入文件。关闭打开的 fd,这应该可以解决问题。
我已经尝试 jstack -l <PID> >> dump.log
并且 dump.log 创建的文件没有内容。虽然我可以在 Java 应用程序是 运行 的终端中看到线程转储,但我需要文件中的线程转储。
此外,在 jstack 输出中有一条消息:无法打开套接字文件:目标进程未响应或 HotSpot VM 未加载。
我尝试了 运行 java 和 jstack 都由系统用户尝试,但仍然没有运气将 pitut 重定向到文件。 java 8 和 9 我都用过。
PS:我用谷歌搜索了这个问题,发现人们在使用 jstack 或 jmap 输出文件时遇到不一致的情况。如果您对问题有任何可行的解决方案,请告诉我。
您可以通过以下命令获取线程转储:
sudo jstack <PID> > a.txt
以上应该可行,因为您提到您可以在终端上看到线程转储。
但是你也提到jstack输出
Unable to open socket file: target process not responding or HotSpot VM not loaded.
因此,您的进程本身可能有问题,我认为它没有正确加载。解决该问题,jstack
应该适合您。
另一个问题可能是您可能已经用完了系统中打开的文件数。 运行 以下 2 个命令。
- 查找每个进程的打开文件限制:
ulimit -n
- 统计所有进程打开的文件总数:
lsof | wc -l
如果以上两个命令的输出相同,您可能已经用完了文件打开总数限制。因此,您无法将输出写入文件。关闭打开的 fd,这应该可以解决问题。