我在尝试开始JFR录制时收到 private void print()
{
string dest = @"C:\Users\bwilliams\Desktop\balltest1.pdf";
string src = @"C:\Users\bwilliams\Desktop\BallTags.pdf";
Rectangle[] columns = new Rectangle[]
{
new Rectangle(100,500,150,200),
new Rectangle(250,500,150,200),
new Rectangle(400,500,150,200),
new Rectangle(550,500,150,200)
};
PdfWriter writer = new PdfWriter(dest);
PdfDocument pdf = new PdfDocument(new PdfReader(src), writer);
Document doc = new Document(pdf,PageSize.A4.Rotate());
doc.SetRenderer(new ColumnDocumentRenderer(doc, columns));
doc.Add(new Paragraph("Ebonite").SetPaddings(150, 60, 0, 0).SetFontSize(24).SetFont(Arial).SetFixedLeading(24));
doc.Add(new Paragraph("GB2 MVP").SetPaddings(150, 0, 0, 0).SetFontSize(24).SetFixedLeading(24));
doc.Add(new Paragraph("$114.95").SetPaddings(150, 0, 0, 0).SetFontSize(24).SetFixedLeading(24));
doc.Add(new Paragraph("").SetPaddings(0, 0, 0, 0).SetFontSize(24));
doc.Add(new Paragraph("").SetPaddings(0, 0, 0, 0).SetFontSize(24));
doc.Add(new Paragraph("").SetPaddings(0, 0, 0, 0).SetFontSize(24));
doc.Add(new Paragraph("").SetPaddings(0, 0, 0, 0).SetFontSize(24));
doc.Add(new Paragraph("").SetPaddings(0, 0, 0, 0).SetFontSize(24));
doc.Add(new Paragraph("").SetPaddings(0, 0, 0, 0).SetFontSize(24));
doc.Add(new Paragraph("").SetPaddings(0, 0, 0, 0).SetFontSize(24));
doc.Close();
}
。
它一直正常工作,直到现在。
AttachNotSupportedException
输出:
jcmd 3658 JFR.start maxsize=100M filename=jfr_1.jfr dumponexit=true settings=profile
可能会发生什么?
SO:Oracle Linux Server版本6.7
3658:
com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded
at sun.tools.attach.LinuxVirtualMachine.<init>(LinuxVirtualMachine.java:106)
at sun.tools.attach.LinuxAttachProvider.attachVirtualMachine(LinuxAttachProvider.java:63)
at com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:208)
答案 0 :(得分:4)
其中一个可能的原因是/tmp/.java_pid1234
文件已被删除(其中1234是Java进程的PID)。
依赖于动态连接机制(jstack,jmap,jcmd,jinfo)的工具通过在/tmp
创建的UNIX域套接字与JVM进行通信。
如果指定-XX:+StartAttachListener
标志,则此套接字在第一次附加尝试时由懒惰的JVM创建,或者急切地在JVM初始化时创建。
删除与套接字对应的文件后,工具无法连接到目标进程,遗憾的是,如果不重新启动JVM,则无法重新创建通信套接字。
有关动态附加机制的说明,请参阅this answer。
答案 1 :(得分:0)
凭借个人经验......在将开发环境划分为分区,并且操作系统所在的分区与操作系统分区不同的情况下,也会出现此问题。例如,操作系统分区是EXT4,开发环境分区是NTFS(JVM所在的位置)。出现问题是因为您无法创建文件&#34; /tmp/.java_pid6024" (其中6024是java进程的PID)。 要在JVM或应用程序服务器的开头添加-XX:+ StartAttachListener进行故障排除。
答案 2 :(得分:0)
另一种可能性:您的应用在systemd下使用'PrivateTmp = yes'运行。这可以防止找到/tmp/.java_pid1234文件。