I want to profile my play application on my Kubernetes cluster.
I am using VisualVM, and the steps that I have taken are as follows:
Running my play application with the following args:
"-Dcom.sun.management.jmxremote",
"-Dcom.sun.management.jmxremote.ssl=false",
"-Dcom.sun.management.jmxremote.authenticate=false",
"-Dcom.sun.management.jmxremote.port=1098"
My Image has apt-get install -y visualvm
kubectl port-forward <Container> 1098
I am not sure what I am doing wrong here. When running the application on localhost (not via IDE, straight from the startup script) everything works fine.
Update 1, deployment and service
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: myApp labels: name: myApp spec: replicas: 1 strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 0 type: RollingUpdate template: metadata: name: myApp labels: name: myApp spec: containers: - name: myApp image: ... args: ["-Dcom.sun.management.jmxremote", "-Dcom.sun.management.jmxremote.ssl=false", "-Dcom.sun.management.jmxremote.authenticate=false", "-Dcom.sun.management.jmxremote.port=1098"] ports: - containerPort: 9000 env: ...
apiVersion: v1
kind: Service
metadata:
name: myApp
labels:
name: myApp
spec:
selector:
name: myApp
ports:
- port: 80
targetPort: 9000
Update 2 @marcospereira
File->Add JMX connection-> localhost:1098
Cannot connect to localhost:1098 using service jmx:rmi...
Profiling is the act of analyzing the performance of applications in order to improve poorly performing sections of code. One of the most popular ways to visualize a profile and quickly identifying performance issues is by generating a Flame Graph.
Profiling is the process of examining an application to locate memory or performance-related issues. When profiling a Java application, you can monitor the Java Virtual Machine (JVM) and obtain data about application performance, including method timing, object allocation and garbage collection.
It can be executed in the same form as QA below.
multiple app nodes how to expose jmx in kubernetes?
Please set java.rmi.server.hostname
System Property.
"-Dcom.sun.management.jmxremote",
"-Dcom.sun.management.jmxremote.ssl=false",
"-Dcom.sun.management.jmxremote.authenticate=false",
"-Dcom.sun.management.jmxremote.port=1098"
"-Djava.rmi.server.hostname=127.0.0.1" #add
Jmx connect to localhost:1098
.
I confirmed that I could connect.
You have to add the rmi port option too -Dcom.sun.management.jmxremote.rmi.port=1098
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With