JProfiler 11 Perfiles sin conexión: el disparador del temporizador para la instantánea no funciona

Intento establecer un perfil sin conexión de una aplicación Java 8 en un host remoto, no se me permite acceder directamente. (Un trabajo de Flink YARN en un clúster hadoop).

Pude exportar bibliotecas JProfiler relevantes para la depuración fuera de línea desde JProfiler para linux 64 a través de JProfiler -> Sesión -> Asistentes de integración -> Nueva integración remota -> Pasando algunos pasos y luego "Crear archivo con agente de creación de perfiles". Implementé ese archivo no extraído en / JPROFILER en todos los hosts con 755 establecidos de forma recursiva para toda la estructura de directorios.

Luego creé una sesión en mi host con 2 disparadores de temporizador. Uno activa el seguimiento después de 2 minutos, el otro detiene todo el seguimiento después de 22 minutos y guarda una instantánea. Cuando ejecuto esta sesión en la GUI de JProfiler a algún host remoto arbitrario a través de SSH con el que tengo una conexión, parece funcionar bien. En la barra de estado, veo que después de 2 minutos, se están ejecutando 3 grabaciones, y después de 22 minutos, se están ejecutando 0 registros. Pero cuando trato de usar esa sesión en perfiles sin conexión sin GUI, no funciona.

Para la creación de perfiles sin conexión en el clúster, inicié mi aplicación YARN con las opciones apropiadas y me aseguré de que las JVM iniciadas tendrían:

-agentpath:/JPROFILER/jprofiler11/bin/linux-x64/libjprofilerti.so=offline,id=123,config=/JPROFILER/jprofiler_config.xml

conjunto. Esto parece funcionar bien, de los registros de contenedores de YARN, veo en stderr:

JProfiler> Protocol version 63
JProfiler> Java 8 detected.
JProfiler> Offline profiling mode.
JProfiler> 64-bit library
JProfiler> Using config file /JPROFILER/jprofiler_config.xml (id: 123)
JProfiler> Listening on port: 8849.
JProfiler> Enabling native methods instrumentation.
JProfiler> Can retransform classes.
JProfiler> Can retransform any class.
JProfiler> Native library initialized
JProfiler> VM initialized
JProfiler> Using sampling (2 ms)
JProfiler> Time measurement: elapsed time
JProfiler> CPU profiling enabled
SLF4J: Class path contains multiple SLF4J bindings.
... Some SLF4J stuff, no more JProfiler or other messages ...

Sin embargo, el archivo de instantáneas de alguna manera nunca se guarda, tal vez ninguno de los dos activadores se activa en absoluto (no tengo forma de verificar si se inició la grabación o si el guardado de instantáneas no funciona). Traté de encontrar la instantánea en el directorio de trabajo del proceso JVM, en / tmp e incluso busqué en todo el host a través de:

find / -iname "*flink-taskmanager-snapshot*" 2>/dev/null

Pero no encontré nada. No se escribieron más mensajes en stderr, a pesar de que mis disparadores están configurados para imprimir algo en stderr.

¿Tienes alguna idea de por qué los disparadores / instantánea no funcionan? JProfiler parece inicializarse bien. Aquí está el jprofiler_config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<config version="11.1">
  <sessions>
    <session id="123" name="Flink-TaskManager-JProfiler" type="remote" remoteType="ssh" timeout="5" jvmConfigurationId="100" samplingFrequency="2" recordArrayAlloc="false" compilationMode="manual" compilationTarget="1.8">
      <filters>
        <group type="exclusive" name="Default excludes" template="none">
          <filter type="exclusive" name="$Proxy" />
          <!-- ... stripped ... -->
          <filter type="exclusive" name="workshop." />
        </group>
      </filters>
      <triggers logTarget="stderr" logFile="">
        <timer descriptionType="manual" manualDescription="Start recording" offsetTime="2" intervalTime="2" type="limited">
          <actions>
            <startRecording>
              <cpu enabled="true" />
              <allocation enabled="true" />
              <thread enabled="true" />
              <telemetry enabled="true" />
            </startRecording>
            <startCallTracer />
            <startProbeRecording name="builtin.HttpClientProbe" events="true" />
            <printMessage message="JProfiler: Start tracking" />
          </actions>
        </timer>
        <timer descriptionType="manual" manualDescription="stop recording" offsetTime="22" intervalTime="22" type="limited">
          <actions>
            <stopRecording>
              <cpu enabled="true" />
              <allocation enabled="true" />
              <thread enabled="true" />
              <telemetry enabled="true" />
            </stopRecording>
            <stopCallTracer />
            <stopProbeRecording name="builtin.HttpClientProbe" />
            <saveSnapshot file="flink-taskmanager-snapshot" number="true" />
            <printMessage message="JProfiler: stop recording and save snapshot..." />
          </actions>
        </timer>
      </triggers>
      <probes>
        <probe name="builtin.TrackingInterceptor">
          <id value="1" />
          <id value="2" />
          <id value="5" />
          <id value="7" />
        </probe>
      </probes>
      <ssh port="43490" verifyHosts="false">
        <entry hostName="some-remote-for-tests" userName="yarn" authentication="key" keyFile="C:\Users\theo\.ssh\id_rsa" />
      </ssh>
    </session>
  </sessions>
</config>

Y aquí están los resultados sobre mi versión de Java:

$ /usr/java/jdk1.8.0_181-cloudera/bin/java -XshowSettings:properties -version
Property settings:
    awt.toolkit = sun.awt.X11.XToolkit
    file.encoding = ANSI_X3.4-1968
    file.encoding.pkg = sun.io
    file.separator = /
    java.awt.graphicsenv = sun.awt.X11GraphicsEnvironment
    java.awt.printerjob = sun.print.PSPrinterJob
    java.class.path = .
    java.class.version = 52.0
    java.endorsed.dirs = /usr/java/jdk1.8.0_181-cloudera/jre/lib/endorsed
    java.ext.dirs = /usr/java/jdk1.8.0_181-cloudera/jre/lib/ext
        /usr/java/packages/lib/ext
    java.home = /usr/java/jdk1.8.0_181-cloudera/jre
    java.io.tmpdir = /tmp
    java.library.path = /usr/java/packages/lib/amd64
        /usr/lib64
        /lib64
        /lib
        /usr/lib
    java.runtime.name = Java(TM) SE Runtime Environment
    java.runtime.version = 1.8.0_181-b13
    java.specification.name = Java Platform API Specification
    java.specification.vendor = Oracle Corporation
    java.specification.version = 1.8
    java.vendor = Oracle Corporation
    java.vendor.url = http://java.oracle.com/
    java.vendor.url.bug = http://bugreport.sun.com/bugreport/
    java.version = 1.8.0_181
    java.vm.info = mixed mode
    java.vm.name = Java HotSpot(TM) 64-Bit Server VM
    java.vm.specification.name = Java Virtual Machine Specification
    java.vm.specification.vendor = Oracle Corporation
    java.vm.specification.version = 1.8
    java.vm.vendor = Oracle Corporation
    java.vm.version = 25.181-b13
    line.separator = \n
    os.arch = amd64
    os.name = Linux
    os.version = 3.10.0-1062.4.1.el7.x86_64
    path.separator = :
    sun.arch.data.model = 64
    sun.boot.class.path = /usr/java/jdk1.8.0_181-cloudera/jre/lib/resources.jar
        /usr/java/jdk1.8.0_181-cloudera/jre/lib/rt.jar
        /usr/java/jdk1.8.0_181-cloudera/jre/lib/sunrsasign.jar
        /usr/java/jdk1.8.0_181-cloudera/jre/lib/jsse.jar
        /usr/java/jdk1.8.0_181-cloudera/jre/lib/jce.jar
        /usr/java/jdk1.8.0_181-cloudera/jre/lib/charsets.jar
        /usr/java/jdk1.8.0_181-cloudera/jre/lib/jfr.jar
        /usr/java/jdk1.8.0_181-cloudera/jre/classes
    sun.boot.library.path = /usr/java/jdk1.8.0_181-cloudera/jre/lib/amd64
    sun.cpu.endian = little
    sun.cpu.isalist =
    sun.io.unicode.encoding = UnicodeLittle
    sun.java.launcher = SUN_STANDARD
    sun.jnu.encoding = ANSI_X3.4-1968
    sun.management.compiler = HotSpot 64-Bit Tiered Compilers
    sun.os.patch.level = unknown
    user.country = US
    user.dir = /var/lib/hadoop-yarn
    user.home = /root
    user.language = en
    user.name = root
    user.timezone =

java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
Respuesta 1

Creé una clase separada para JFrame y JPanel, luego dibujo (fillOval en una clase JFrame) y draw (fillOval en una clase JPanel), y un botón que solo animará los componentes de JPanel. Pero el ...

¿Hay alguna manera de averiguar el tamaño de la imagen (en bytes, en cualquier formato de imagen comprimido en el que estén almacenados) en PDImageXObject sin extraerlo en BufferedImage?

Esto es lo que he intentado. varOne largo = 902621492492L; double varTwo = (double) varOne * 0.0001; System.out.println (varTwo); Salida: 9.02621492492E7. ¿Por qué no es 90262149.2492 y cómo lo soluciono? ...

Todo parece estar funcionando bien. Puede encontrar mi ubicación, pero no llamará al método onLocationChanged () y creará un marcador para mí. ¿Algunas ideas? clase pública MainActivity extiende ...