This post is the first in a new blog series being launched by the WebSphere Performance Engineering Team with the goal to share information on a variety of performance related topics with the broader community.
Performance can sometimes be considered an afterthought by development teams focused on delivering new features and fixing functional bugs. In fact, performance as a discipline can often be misunderstood or underestimated with respect to the many dimensions that it has.
The performance of a WebSphere application as experienced by an end user depends on the following foundational layers (in addition to the user’s own application code):
- Application server
- Java Runtime Environment (JRE)
- Container/virtualization layer
- Operating System
IBM’s commitment to our Java customer base makes us strive for influence across all these layers. In practical terms, this is achieved in a few different ways:
- Direct investment into technologies such as traditional WebSphere Application Server, Liberty, Eclipse OpenJ9, IBM Systems
- Collaboration with our industry partners such as Red Hat and Intel
- Participation in communities such as Eclipse Adoptium, Jakarta EE, MicroProfile, and Open JDK
One of the unique value propositions that IBM offers our customers is “whole stack optimization” where we analyze and improve performance not only at all these layers, but (and this is where things get interesting) also across all these layers. This objective means that the development and performance teams responsible for WebSphere need to develop technical skills not just related to their own product, but also across other layers of the stack.
Performance is about more than just the technical skills needed to investigate and prototype fixes for performance problems though. There are fundamental aspects of the culture of a product team and how it functions on a day-to-day basis that are just as key to building a performant product.
- Design reviews: architects consider performance during feature design
- Development process: feedback loop between development and performance teams as features are being developed
- Performance testing: regular and reliable performance testing and monitoring
- Performance test creation: write new tests as well as reuse tests built by others
- Performance problem diagnosis: product capabilities as well as standalone tools developed to make it easier to diagnose performance problems
- Prioritize performance improvements: product leadership needs to recognize the value of performance features and develop a performance strategy and invest accordingly
- Build influence in the right communities: have participants, committers or project leads in the key open-source communities that your project depends on
- Competitive performance analysis: keep track of where the competing products and industry are headed and plan for and make improvements in your products
In this blog series, the WebSphere Performance Engineering Team will primarily share our experience on technical topics at all levels of the Java stack as it pertains to WebSphere or Java performance:
- Metrics: throughput, latency, response time, start up and ramp up time, memory footprint
- Application server: Java EE, Jakarta EE, MicroProfile features and their implementations
- Java Runtime Environment (JRE): GC, shared classes, JIT, JCE, locking, tools
- Container/virtualization layer: OCP, container optimizations, KVM, VMware
- Operating System: tools for problem diagnosis, huge pages, synchronization
- Hardware: General and specialized features of X86, POWER, IBM Z, AArch64
The topics mentioned above are just examples of the kinds of technical areas in which we are lining up blog posts under the core themes of tuning, problem diagnosis and education about new technologies in the coming months. We also intend to discuss the other non-technical (cultural) factors from time to time to share our experience about what worked well and what did not, as well as what may be important for a team that wants to improve their product’s performance.
We look forward to engaging with you on the topics we will blog about and hope that you find the information that we share useful. Stay tuned!
Some links relevant to Liberty and Java performance that you may find interesting:
WebSphere Application Server Performance Cookbook
Eclipse OpenJ9 Performance page
Eclipse OpenJ9 blogs
Open Liberty Performance related blogs
Brendan Gregg's blogs