Alf*_*654 8 java linux dump intellij-idea
我正在编写一个使用 Pcap 库进行数据包嗅探的应用程序。为了实现这一点,我需要提供java二进制网络嗅探功能,以避免必须将其运行为root:
sudo setcap cap_net_raw,cap_net_admin=eip /path/to/bin/java
Run Code Online (Sandbox Code Playgroud)
当我运行任何程序时,每隔几秒钟,我就会得到一个完整线程转储到stdout. 这是此类完整线程转储的示例(存储库的其余部分不相关)。否则该程序似乎运行成功:除了转储之外,我找不到执行中的差异。
下面的代码足以重现该问题:
package main;
import java.io.IOException;
public class StdinTest {
public static void main(String[] args) throws IOException {
System.in.read();
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用下面的命令从二进制文件中删除功能时java,事情会恢复正常,并且我不再将完整线程转储到标准输出。
sudo setcap -r /path/to/bin/java
Run Code Online (Sandbox Code Playgroud)
我不确定这是一个问题,因为程序似乎运行良好,但看起来不正常。
我没有找到任何人似乎有类似的问题,我有点迷失......
感谢任何帮助,提前致谢!
细节:
编辑:
如果程序在命令行中运行,则无法重现:
java -classpath target/classes main.StdinTest
Run Code Online (Sandbox Code Playgroud)
我仅在从 IntelliJ Idea Ultimate 启动时才会出现症状。我还没有尝试过其他 IDE。
如果 intelliJ 认为您的软件卡住了,它将从中获取线程转储。System.in.read();使它“卡在”从标准输入读取上。
您应该能够使用-Dperformance.watcher.unresponsive.interval.ms=0VM options禁用它。更改 JVM 选项的推荐方法是通过Help | Edit Custom VM Options操作。
参考:intellij support:禁用“自动线程转储”。
| 归档时间: |
|
| 查看次数: |
1443 次 |
| 最近记录: |