Using jstat to report custom JVM metric sets

I've always been missing possibility to configure custom headers in JStat. Of course there are a lot of predefined data sets, but it'll be nicer if we could create our own data set. And as you probably already devised I'm writing this post because such functionality is of course available :) Unfortunately I haven't found it in any documentation so now I'll try to fill this gap.

First thing we have to do is to provide custom descriptor with possible JStat options. This descriptor is just a text file containing something we'll call "jstat specification language". To make this custom file available to JStat we should place it in the following path: $HOME/.jvmstat/jstat_options
If you want to view the bundled options please refer to file in OpenJDK repository.

The specification language is pretty similar to json files, and it contains the group of option elements. Each option should be threaten as a set of columns that can be shown in single jstat execution. Just to name some of the predefined options: gcnew, gccause or printcompilation.

Each option element consists of several column segments. I think it's quite obvious what column means :) And whats the most important in this descriptor is just a column specification.

Each column must contain at least two nodes: header and data. Header is used to describe the column and can be aligned using special char ^ which I'll call "the grip". Grip means that it sticks the header with particular side of the column, so:
  • ^Name will be aligned to the left,
  • ^Name^ will be centered,
  • Name^ will be aligned to the right.
The next important node is the data column. It uses PerfCounter metrics and is able to make some basic arithmetic operations - like add, minus, divide and multiply as well as use parenthesis to group operations . You can also group If you want to see all metrics that are available via this mechanism just can invoke
$jcmd <PID> PerfCounter.print
and see the output values.

Sample minimum file content can be like that:
option customgc {
  column {
    header "Tenuring"
    data sun.gc.policy.tenuringThreshold
  }
}
When we'll invoke it using
$jstat -customgc <PID> 1s 3
we'll see something like:
Tenuring
6
4
5

We can also use the operations to show for example joint young generation usage:
option customgc {
  column {
    header "YoungC"
    data sun.gc.generation.0.space.0.used + sun.gc.generation.0.space.1.used + sun.gc.generation.0.space.2.used
  }
}

There are also four additional columns that are used to setup layout for our column.
  1. First is for alignments setting. We can choose if we want to align our data to left, center or right by setting align element to one of above values. 
  2. In the case of number metrics we can specify string used as DecimalFormat input by entering it in the format node.
  3. We're also able to specify the size of the column by adding width element with particular length.
  4. Last but not least is a scaling functionality. Because most of the metrics contain just raw output from JVM we need to transform it a little bit to make if useful for human eye. This can be done with the use of scale attribute set to one of the below values (token column).
    tokenfactordesc
    raw1no scaling
    percent1/100convert to percentage
    K1024kilo
    M1024*1024mega
    G1024*1024*1024giga
    n10^-9nano
    u10^-6micro
    m10^-3milli
    us10^-6microseconds
    ms10^-3milliseconds
    s1seconds
    min1/60minutes
    h1/3600hour

Now let's see the polished example that will show how we can use additional properties:
option customgc {
  column {
    header "YoungC^"
    data sun.gc.generation.0.space.0.used + sun.gc.generation.0.space.1.used + sun.gc.generation.0.space.2.used
    align right
    scale M
    width 7
    format "0.0"
  }
  column {
    header "OldC^"
    data sun.gc.generation.1.space.0.used
    align right
    scale M
    width 7
    format "0.0"
  }
}
Which produces
 YoungC    OldC
   67.7   161.0
   37.8   165.4
   92.2   182.8

End of topic :) Good luck!

Comments

Unknown said…
If you are looking for getting the best data scientist than this activewizards.com/ is available for you to get you hire the best data scientist, these data scientists are highly professional and skilled and they can easily solve your all data related problems in a few days or hour it depends on the data size and complexity.
priya said…
Wow it is really wonderful and awesome thus it is very much useful for me to understand many concepts and helped me a lot. it is really explainable very well and i got more information from your blog.
Data Science training in chennai
Data Science training in OMR
Data Science training in chennai
Data Science Training in Chennai
Data Science training in Chennai
Data science training in bangalore
Aditi Ray said…
Thank you so much for sharing this article.
check out the best furniture sale
deepika said…
thanks for this post it really helped me alot
block chain training in bangalore
Tech Guy said…
Nice Blog.
For the Best Python training in Bangalore, Visit:
Python training in Bangalore
Unknown said…
This blog are more informative contents step by step. I here by attached mt site would you see this blog.

7 tips to start a career in digital marketing

“Digital marketing is the marketing of product or service using digital technologies, mainly on the Internet, but also including mobile phones, display advertising, and any other digital medium”. This is the definition that you would get when you search for the term “Digital marketing” in google. Let’s give out a simpler explanation by saying, “the form of marketing, using the internet and technologies like phones, computer etc”.

we have offered to the advanced syllabus course digital marketing for available join now

more details click the link now.

https://www.webdschool.com/digital-marketing-course-in-chennai.html
Unknown said…
Amazing blog useful information.

Web designing trends in 2020

When we look into the trends, everything which is ruling today’s world was once a start up and slowly begun getting into. But Now they have literally transformed our lives on a tremendous note. To name a few, Facebook, Whats App, Twitter can be a promising proof for such a transformation and have a true impact on the digital world.

we have offered to the advanced syllabus course web design and development for available join now.

more details click the link now.

https://www.webdschool.com/web-development-course-in-chennai.html
offpageseo70 said…

Nice blog,I understood the topic very clearly,And want to study more like this.
Data Scientist Course
nikhil reddy said…
I found a lot of information here to create this actually best for all newbie here. Thank you for this information.
Artificial Intelligence Training In Hyderabad

Artificial Intelligence Course In Hyderabad
lionelmessi said…
Hi, Thanks for sharing wonderful stuff...

For More:

AI Training In Hyderabad
lionelmessi said…
Hi, Thanks for sharing nice articles...

DevOps Training In Hyderabad
lionelmessi said…
Hi, Thanks for sharing nice articles...

AI Training In Hyderabad
I feel very grateful that I read this. It is very helpful and very informative and I really learned a lot from it.

data science course
reshma said…
thanks for sharing nice information....
more : https://www.kellytechno.com/Hyderabad/Course/AI-Training-In-Hyderabad
nikhil reddy said…
Hi, Thanks for sharing wonderful articles...

Machine Learning Training In Hyderabad
Great writing! You have a flair for informational writing. Your content has impressed me beyond words. I have a lot of admiration for your writing. Thank you for all your valuable input on this topic.
SAP training in Mumbai
Best SAP training in Mumbai
SAP training institute Mumbai
I'm not one of those readers that comments on articles often, but yours really compelled me. There's a lot of interesting content in this article that is interesting and bold.
SAP training in Kolkata
Best SAP training in Kolkata
SAP training institute in Kolkata
reshma said…
thanks for sharing nice information.....
python Training in Hyderabad
Anebellyliza said…
Thank you so much for this incredible guide. This has given me so much information
AI Training in Hyderabad
Anonymous said…
Hey, i liked reading your article. You may go through few of my creative works here
Marhabapilates
Poppriceguide
nikhil reddy said…
Hi, Thanks for sharing excellent content...

Data Science Training in Hyderabad

Popular posts from this blog

Understanding the first level JPA cache

Including Java agent in standalone Spring Boot application

Understanding Spring Web Initialization