Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Profiling Java application in kubernetes

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:

  1. Image is built on ubuntu latest
  2. 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"
    
  3. My Image has apt-get install -y visualvm

  4. I do kubectl port-forward <Container> 1098
  5. Open VisualVM, And I don't see the process.

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...

like image 949
Gleeb Avatar asked Jan 18 '17 13:01

Gleeb


People also ask

What is profiling in Kubernetes?

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.

What is profiling Java application?

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.


2 Answers

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.

like image 79
Hiroki Matsumoto Avatar answered Sep 21 '22 08:09

Hiroki Matsumoto


You have to add the rmi port option too -Dcom.sun.management.jmxremote.rmi.port=1098

like image 35
Fabián Avatar answered Sep 19 '22 08:09

Fabián