java - 如何将jstack输出重定向到文件?
问题描述
我已经尝试过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,这应该可以解决问题。
推荐阅读
- javascript - 将单个添加到 ajax 添加的 javascript 行
- r - Capture.output 不考虑 r 中的控制台大小
- html - 使用 python urllib3 获得对网络服务器的授权访问时出现问题
- c# - 异步方法的布尔检查
- reactjs - 更改反应输入时保持 e.target
- flutter - (HttpException) => Null' 不是 '(dynamic) => dynamic' 类型的子类型!!扑
- python - Tensorflow,Keras:“模型”对象没有属性“_get_distribution_strategy”
- python - 删除停用词/标点符号,标记并应用 Counter()
- python - 登录hotmail python 3.x
- node.js - 如何在猫鼬中获取最后一条记录的一个值