Невозможно запустить регистратор полета через JMC 6 в кислородном затмении (4.7) - PullRequest
0 голосов
/ 17 мая 2018

У меня ошибка, которую я не понимаю. Если я попытаюсь использовать JFR с помощью плагина JMC eclipse, произойдет сбой, за исключением

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.invokeM2(StandardMBeanIntrospector.java:112)
    at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:46)
    at com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:237)
    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)
Caused by: java.io.FileNotFoundException: recording.jfr (Access denied)
    at java.io.FileOutputStream.open0(Native Method)
    at java.io.FileOutputStream.open(FileOutputStream.java:270)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:162)
    at java.io.FileWriter.<init>(FileWriter.java:90)
    at oracle.jrockit.jfr.Recording.setDestination(Recording.java:464)
    at oracle.jrockit.jfr.Recording.setOptions(Recording.java:481)
    at oracle.jrockit.jfr.FlightRecorder.setRecordingOptions(FlightRecorder.java:219)
    ... 39 more

но если я использую JMC и JFR, поставляемые с самим jdk (8_162), это работает как charme. Это также тот же самый jdk, который я использую для затмения. Исключение указывает на то, что существует какая-то проблема с доступом к файлу, поэтому я пробовал разные места, но пока ничего не получалось.

Я также пытался использовать ...jmxremote.access.file с ролями, описанными в документации. Но все еще в затмении это не сработало.

Примечание: параметр, который я сейчас использую

-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=3614 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false

Все остальные вопросы, которые я нашел до сих пор, не помогли мне больше, так что другие идеи?

Спасибо Christian

1 Ответ

0 голосов
/ 26 мая 2018

Когда вы начинаете запись, JVM записывает файл-заполнитель, в который запись будет записана после ее завершения.

 FileWriter fw = new FileWriter("recording.jfr"); 
 fw.close();

ОС отказывает пользователю, владельцу процесса приложения Java, которое выподключение к, разрешение на запись в этот каталог.Если путь не указан, то есть «recording.jfr», файл обычно попадает в каталог, в котором был запущен процесс.

...