You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Eclipse Oxygen(4.7)中通过JMC 6启动Flight Recorder失败求助

解决Eclipse Oxygen中JMC启动Flight Recorder时的权限拒绝错误

我之前在使用Eclipse Oxygen(4.7)搭配JMC插件启动Flight Recorder时也遇到过完全一样的问题,先把你碰到的异常贴出来方便大家定位:

com.oracle.jmc.rjmx.services.jfr.FlightRecorderException: Could not start the recording! 
at com.oracle.jmc.rjmx.services.jfr.internal.FlightRecorderServiceV1.start(FlightRecorderServiceV1.java:149) 
at com.oracle.jmc.flightrecorder.controlpanel.ui.jobs.StartRecordingJob.run(StartRecordingJob.java:76) 
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:56) 
Caused by: java.io.IOException: javax.management.openmbean.OpenDataException: recording.jfr (Access denied) 
at com.oracle.jmc.rjmx.services.jfr.internal.FlightRecorderCommunicationHelperV1.invokeOperation(FlightRecorderCommunicationHelperV1.java:62) 
at com.oracle.jmc.rjmx.services.jfr.internal.FlightRecorderServiceV1.start(FlightRecorderServiceV1.java:137) 
... 2 more 
Caused by: javax.management.MBeanException: javax.management.openmbean.OpenDataException: recording.jfr (Access denied) 
at com.sun.jmx.mbeanserver.MBeanIntrospector.unwrapInvocationTargetException(MBeanIntrospector.java:313) 
at com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:239) 
at com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:138) 
at com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:252) 
at javax.management.StandardMBean.invoke(StandardMBean.java:405) 
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) 
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801) 
at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468) 
at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76) 
at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309) 
at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1401) 
at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829) 
at sun.reflect.GeneratedMethodAccessor41.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:361) 
at sun.rmi.transport.Transport$1.run(Transport.java:200) 
at sun.rmi.transport.Transport$1.run(Transport.java:197) 
at java.security.AccessController.doPrivileged(Native Method) 
at sun.rmi.transport.Transport.serviceCall(Transport.java:196) 
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568) 
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826) 
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683) 
at java.security.AccessController.doPrivileged(Native Method) 
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
at java.lang.Thread.run(Thread.java:748) 
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:283) 
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:260) 
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:161) 
at com.sun.jmx.remote.internal.PRef.invoke(Unknown Source) 
at javax.management.remote.rmi.RMIConnectionImpl_Stub.invoke(Unknown Source) 
at javax.management.remote.rmi.RMIConnector$RemoteMBeanServerConnection.invoke(RMIConnector.java:1020) 
at com.oracle.jmc.rjmx.internal.MCMBeanServerConnection.invoke(MCMBeanServerConnection.java:224) 
at com.oracle.jmc.rjmx.ConnectionToolkit.invokeOperation(ConnectionToolkit.java:152) 
at com.oracle.jmc.rjmx.services.jfr.internal.FlightRecorderCommunicationHelperV1.invokeJfrOperation(FlightRecorderCommunicationHelperV1.java:69) 
at com.oracle.jmc.rjmx.services.jfr.internal.FlightRecorderCommunicationHelperV1.invokeOperation(FlightRecorderCommunicationHelperV1.java:56) 
... 3 more 
Caused by: javax.management.openmbean.OpenDataException: recording.jfr (Access denied) 
at oracle.jrockit.jfr.FlightRecorder.setRecordingOptions(FlightRecorder.java:221) 
at oracle.jrockit.jfr.FlightRecorder.setRecordingOptions(FlightRecorder.java:230) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71) 
at sun.reflect.GeneratedMethodAccessor27.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275) 
at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invoke

核心原因

这个错误的关键信息是recording.jfr (Access denied)——JFR默认尝试在当前工作目录生成录制文件,但你的Eclipse或目标JVM进程没有该目录的写入权限。

解决办法

  • 指定有写入权限的自定义路径:
    在Eclipse的JFR启动控制面板里,找到「Recording File」选项,手动输入一个你有权限读写的路径,比如:

    • Windows:C:\Users\你的用户名\Documents\JFR_Recordings\my_app_recording.jfr
    • Linux/macOS:/home/你的用户名/jfr_recordings/my_app_recording.jfr
      注意:如果路径里的文件夹不存在,得先手动创建好,JFR不会自动生成文件夹。
  • 使用系统临时目录(快速测试用):
    临时目录一般默认开放读写权限,你可以直接填:

    • Windows:%TEMP%\test_recording.jfr
    • Linux/macOS:/tmp/test_recording.jfr
  • 检查进程权限:
    如果是监控本地Java程序,确保启动Eclipse的用户对目标路径有读写权限;如果是远程JVM,要确认远程服务器上的JVM运行用户有权限写入你指定的远程路径(或者先录制到远程临时目录,再下载到本地)。

额外提醒

别把录制路径设为系统级目录(比如C:\Windows、/usr),这些目录普通用户通常没有写入权限,很容易触发权限拒绝错误。

内容的提问来源于stack exchange,提问作者Christian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:19:44