Skip to content

Instantly share code, notes, and snippets.

@fforbeck
Forked from kevin-lee/JProfiler-with-Docker.md
Created August 14, 2020 16:08
Show Gist options
  • Select an option

  • Save fforbeck/9a249b5870c631206ad1bf31432ffac7 to your computer and use it in GitHub Desktop.

Select an option

Save fforbeck/9a249b5870c631206ad1bf31432ffac7 to your computer and use it in GitHub Desktop.

Revisions

  1. @kevin-lee kevin-lee created this gist Aug 10, 2016.
    62 changes: 62 additions & 0 deletions JProfiler-with-Docker.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,62 @@
    # JProfiler with Docker

    ## Docker

    ### DockerFile
    DockerFile should have JProfiler installation.
    ```docker
    RUN wget <JProfiler file location> -P /tmp/ && \
    tar -xzf /tmp/<JProfiler file> -C /usr/local && \
    rm /tmp/<JProfiler file>
    EXPOSE <port>
    ```

    e.g.)
    ```docker
    RUN wget http://download-aws.ej-technologies.com/jprofiler/jprofiler_linux_9_2.tar.gz -P /tmp/ && \
    tar -xzf /tmp/jprofiler_linux_9_2.tar.gz -C /usr/local &&\
    rm /tmp/jprofiler_linux_9_2.tar.gz
    EXPOSE 8849
    ```

    ### Run
    ```
    docker run -p <port>:<port> your-docker
    ```

    e.g.)
    ```
    docker run -p 8849:8849 your-docker
    ```

    ## JProfiler
    ### Run Application with JProfiler Agent
    ```
    java -jar my-app.jar -agentpath:/usr/local/jprofiler9/bin/linux-x64/libjprofilerti.so=port=<port>
    ```

    e.g.)
    ```
    java -jar my-app.jar -agentpath:/usr/local/jprofiler9/bin/linux-x64/libjprofilerti.so=port=8849
    ```

    So in the `DockerFile`, it looks like

    ```
    ENTRYPOINT ["java -jar","my-app.jar",
    "-agentpath:/usr/local/jprofiler9/bin/linux-x64/libjprofilerti.so=port=8849"]
    ```

    1. Select '`Profile an application server, locally or remotely`'.
    2. If the target application is running on any specific server listed, select it. Otherwise, choose `Generic application`.
    3. Select `Linux X86/AMD64` for `Platform of the remote computer` on a remote computer.
    4. Select the JVM used in the Docker instance.
    5. To make JProfiler to wait for the application to start and send data, select `Wait for a connection from the JProfiler GUI`.
    6. Enter the remote address to the `Remote address`. If it's Docker for Mac, it is `localhost`. If Docker Machine is used, use the IP of the Docker Machine.
    7. Add the path to the JProfiler on the Docker where the jar file metioned above is using to the `Remote installation directory`. It looks like `/usr/local/jprofiler<version>`. e.g.) /usr/local/jprofiler9
    8. Set the port number or use the default (i.e. 8849).

    52 changes: 52 additions & 0 deletions VisualVM-with-Docker.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,52 @@
    VisualVM with Docker
    =====================
    ## Installation
    VisualVM comes with the JDK so it doesn't require any extra installation or payment if JDK is already installed.

    ## DockerFile
    The following options should be added to java executable command.
    ```
    -Dcom.sun.management.jmxremote=true
    -Dcom.sun.management.jmxremote.port=<port>
    -Dcom.sun.management.jmxremote.authenticate=false
    -Dcom.sun.management.jmxremote.ssl=false
    -Dcom.sun.management.jmxremote.local.only=false
    -Dcom.sun.management.jmxremote.rmi.port=<port>
    -Djava.rmi.server.hostname=<docker ip>
    ```
    ***

    So it should be like
    ```
    ENTRYPOINT ["java -jar", "app.jar",
    "-Dcom.sun.management.jmxremote=true",
    "-Dcom.sun.management.jmxremote.port=<port>",
    "-Dcom.sun.management.jmxremote.authenticate=false",
    "-Dcom.sun.management.jmxremote.ssl=false",
    "-Dcom.sun.management.jmxremote.local.only=false",
    "-Dcom.sun.management.jmxremote.rmi.port=<port>",
    "-Djava.rmi.server.hostname=<docker ip>"]
    ```

    e.g.)
    ```
    ENTRYPOINT ["java -jar", "my-app.jar",
    "-Dcom.sun.management.jmxremote=true",
    "-Dcom.sun.management.jmxremote.port=8849",
    "-Dcom.sun.management.jmxremote.authenticate=false",
    "-Dcom.sun.management.jmxremote.ssl=false",
    "-Dcom.sun.management.jmxremote.local.only=false",
    "-Dcom.sun.management.jmxremote.rmi.port=8849",
    "-Djava.rmi.server.hostname=localhost"]
    ```

    * **Docker for Mac** uses **Hyperkit** instead of **Docker Machine** through VirtualBox so the host location can be just **`localhost`** rather than the IP of the Docker Machine. If you're using Docker Machine, use the IP of the machine.

    ## VisualVM
    Run `jvisualvm` which is located at `$JAVA_HOME/bin`.

    1. File -> `Add JMX Connection...`
    2. Enter the `host` and `port` (e.g. `localhost:8849`).