Posts

Performance Engineering Series – Tuning for Performance - Case Study – 5

Image
  JDK Nuances JDK upgrades is one of the most discussed topics as it is something that just cannot be changed without looking in to the code. This problem becomes more evident for large enterprise class applications. Despite the advances in JDK releases providing various optimizations / newer features, JDK8 we can still find JDK8 in being widely used.   This can perhaps be related to the development effort needed to upgrade the underlying code.   Even after taking the step of upgrading   / recompiling the code on newer JDK’s like JDK11, there still come some issues which arise due to the enhancements and we will look at one such instance today in this brief blog post.   To give a brief background this application is used for Indexing / Searching and uses Lucene to perform this task as I have described in the previous blog posts.    But one change from the previous posts was that the JDK was upgrade to JDK11 from JDK8 after which this particular problem started to surface. I h

Performance Engineering Series – Tuning for Performance - Case Study – 4

Image
 ActiveMQ Crash Introduction In this article let us look at an interesting case of ActiveMQ crashing and the symptoms it showed up and how it was resolved.   ActiveMQ is a widely used message broker that talks via a wide range of sources.   In the current context, its used for the purpose of sending email notifications where the test application places a message on the queue for it to be consumed by other interfacing applications for email notification delivery.   The ActiveMQ runs in redundant mode with active standby.   If a node goes down for any reason, the other node immediately picks up the processing and continues until it goes down.   ActiveMQ is initiated using a wrapper which was designed off a community release version and not the regular commercial deployment version.   The limitation of this would be explained later in the article.   Problem It was observed that the ActiveMQ queue fills up due to pending messages (or) the messages that cannot be delivered and end u

Performance Engineering Series – Tuning for Performance - Case Study – 3

Image
A curious case of continuous Full GC’s with G1GC Introduction Continuing on the previous articles where I had explained about tuning a JVM and the parameters involved, this article specifically deals with a curious case of the same JVM dumping out some unexpected messages in the logs during internal tests, the investigation and the final outcome.  Readers are expected to browse through the previous articles to get a better context of what is being discussed here.  The performance test environment consists of a replica of the entire setup in an exact similar architecture to what is deployed in production.  The test engineers do extensive tests in different conditions to simulate production conditions and to understand the behavior of the application in various conditions.  For first time readers let me (re)introduce the application under discussion -  This particular application is responsible for Indexing and Search for the entire data that lives in the system.  The design

Performance Engineering Series – Tuning for Performance - Case Study - 2

Image
  Introduction After all the comments and the feedback from the community which has been much encouraging, this is the second article in the engineering series also aimed at tuning the JVM.  In the first one we had delved deep in to tuning G1GC which can get complex at times depending on the application design and its intended usage.   Background In this article today, we will try to look at simple case of an application running Parallel GC which is primarily used for UI navigation of a complex micro service based system.   Here we are using the terms simple and complex which might sound contradicting, but just to give a birds eye view, this application is primarily used for UI side navigation with internal API based communication with all the supporting micro services.   So, this design is light weight and the heavy lifting is done by the services themselves, so the throughput is quite high and responsiveness is very important. In this context, the immediate thought that would cro

Performance Engineering Series – Tuning for Performance - Case Study - 1

Image
Introduction This series of articles will introduce the reader to explore more about Performance Engineering, specifically how to deal with actual issues of the product in a production deployment scenario.   This is the most discussed area and most of the people I have interacted with look forward to getting in to this role and deal with actual issues and make their contribution.   This work requires knowledge and understanding from a multitude of aspects like –        The product design         Usage profile of the product         CPU and Memory and Disk configuration of the platform         Software configuration – Memory settings         Connected software components and their impact The reader is expected to look at the problem holistically to make the best use of the resources being deployed and then tune the application to obtain the required performance.   As this spans a multitude of areas, extensive knowledge of all the areas is necessary and this comes mostly by experie

Performance Testing Series – Load Test

Image
Introduction This series of articles will introduce the reader to the arena of Performance Engineering.   After my first two blog articles which provided a 35000 feet of what is Performance Engineering is all about, I am sure most of you would be intrigued to understand more about it.   This series of articles should help you get started (in case you would want to take a dive) or would act as a refresher to many who are already in to this domain.   This series aims to discuss the testing aspect of Performance Engineering, how it is done, why it is done and what are the key take away points. Let’s race away by trying to answer the relevant questions What is a load test and why is it needed? After the advent of the internet and specifically the dotcom revolution bought the entire world close to being online.   Applications which were erstwhile desktop started getting connected via the internet.   With extensive development and advancements in the connection technologies, the idea of