<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Performance on Dhaval Shah</title><link>https://www.dhaval-shah.com/categories/performance/</link><description>Recent content in Performance on Dhaval Shah</description><generator>Hugo -- gohugo.io</generator><lastBuildDate>Wed, 01 Jan 2025 02:00:50 +0000</lastBuildDate><atom:link href="https://www.dhaval-shah.com/categories/performance/index.xml" rel="self" type="application/rss+xml"/><item><title>Parallel processing with Virtual Threads - A comparative analysis</title><link>https://www.dhaval-shah.com/parallel-processing-virtual-threads-reactor-vs-jdk/</link><pubDate>Wed, 01 Jan 2025 02:00:50 +0000</pubDate><guid>https://www.dhaval-shah.com/parallel-processing-virtual-threads-reactor-vs-jdk/</guid><description>Background My previous article focussed on comparing solutions for performing parallel execution using Spring Core Reactor and JDK 21. This article will follow my previous article where I will provide comparative analysis of Virtual Threads based execution for Spring Core Reactor and JDK 21 based implementation.
Keeping the same use case that we referred to for comparing Spring Core Reactor &amp;amp; JDK based implementation, this article will be focussing on:</description></item><item><title>Parallel processing - A comparative analysis</title><link>https://www.dhaval-shah.com/parallel-processing-reactor-vs-jdk/</link><pubDate>Fri, 13 Dec 2024 02:00:50 +0000</pubDate><guid>https://www.dhaval-shah.com/parallel-processing-reactor-vs-jdk/</guid><description>Background If you've ever had to implement business logic that involves concurrent execution along with heavy IO operations, you'll know it can be challenging! Recently, I had a chance to tackle such a use case and made some interesting discoveries about parallel execution in the Java ecosystem.
I'll keep this concise and focus on three main areas:
Understanding What part of requirements High level overview of available solutions Comparative analysis of available solutions from software &amp;amp; performance engineering standpoint 1.</description></item><item><title>Optimizing Linux's network stack</title><link>https://www.dhaval-shah.com/optimizing-linux-network-stack/</link><pubDate>Sun, 01 Sep 2024 02:00:50 +0000</pubDate><guid>https://www.dhaval-shah.com/optimizing-linux-network-stack/</guid><description>Background In today’s world of distributed computing, network is the backbone of high-performance, low-latency enterprise applications. Understanding and optimizing the Linux network stack is crucial for achieving peak system performance.
Here’s a breakdown of the key components:
Network Components:
Hardware: Includes routers, NICs, switches, and more. Software: Encompasses the OS kernel, device drivers, and protocols. Protocols:
Kernel-Level Protocols: TCP, UDP, etc. Application-Level Protocols: HTTP, WebSocket etc.</description></item><item><title>Performance Improvement Vs Performance Optimization</title><link>https://www.dhaval-shah.com/performance-improvement-vs-performance-optimization/</link><pubDate>Fri, 13 Oct 2023 06:00:50 +0000</pubDate><guid>https://www.dhaval-shah.com/performance-improvement-vs-performance-optimization/</guid><description>Background Recently I stumbled upon a tweet on my twitter timeline, that discussed about approaches / strategies that can be adopted to improve performance of enterprise applications. What struck me while going through its responses and various similar posts on Linkedin is - tons of material preaching and teaching of how to improve performance of a system is uni-dimensional. While I completely agree to the patterns / guidelines shared by our vibrant community, what IMO is getting missed out is fundamental understanding of Performance Engineering - Primary goal of Performance Engineering is to improve end user experience by reducing latency / increasing throughput.</description></item><item><title>Optimizing Kafka Producers and Consumers</title><link>https://www.dhaval-shah.com/optimizing-kafka-producers-consumers/</link><pubDate>Sat, 01 Apr 2023 06:00:50 +0000</pubDate><guid>https://www.dhaval-shah.com/optimizing-kafka-producers-consumers/</guid><description>Background In this current era, Distributed Architecture has become de-facto architectural paradigm, which necessitates implementation of loosely coupled Microservices which would talk with each other via
REST API Message Oriented Middleware As far as Message Oriented Middleware is concerned, Apache Kafka has become quite ubiquitous in today's world of Distributed Systems. Apache Kafka is a powerful, distributed, replicated messaging service platform that is mainly responsible for storing and sharing data in a scalable, robust and fault tolerant manner.</description></item><item><title>Linux tools for analyzing System Performance</title><link>https://www.dhaval-shah.com/linux-tools-4-analyzing-system-performance/</link><pubDate>Sat, 03 Sep 2022 07:00:50 +0000</pubDate><guid>https://www.dhaval-shah.com/linux-tools-4-analyzing-system-performance/</guid><description>Background In today's contemporary world of enterprise software where massively used applications are expected to scale and run seamlessly at extreme high loads e.g. Scaling Hotstar for 25.3 million users, system performance becomes one of the key tenant of architecting high throughput, low latency applications along with capability of ease in scaling as per business / end consumer needs .
System performance is a very broad term as it would encompass entire gambit of computer system i.</description></item><item><title>G1 GC - A primer from performance engineering standpoint</title><link>https://www.dhaval-shah.com/g1-gc-primer/</link><pubDate>Mon, 04 Apr 2022 07:00:50 +0000</pubDate><guid>https://www.dhaval-shah.com/g1-gc-primer/</guid><description>Background In couple of my previous articles I not only tried helping understand fundamentals of JVM memory management, but also delved deeper to understand how Garbage Collection works along with its optimization. So with this background, I am sure you would be convinced that behavior of garbage collection may have ramification on performance of an application.
With newer versions of Java, garbage collection has also evolved from Serial -&amp;gt; Parallel -&amp;gt; CMS -&amp;gt; G1 GC -&amp;gt; Z GC.</description></item><item><title>Performance Comparison - RSocket Vs Webflux</title><link>https://www.dhaval-shah.com/performance-comparison-rsocket-webflux/</link><pubDate>Sun, 12 Sep 2021 14:53:50 +0000</pubDate><guid>https://www.dhaval-shah.com/performance-comparison-rsocket-webflux/</guid><description>Background In one of my previous post we saw tangible advantages (w.r.t throughput, latency and resource utilization) of refactoring existing Microservice application from imperative to reactive constructs.
So an obvious question that comes to an inquisitive mind -
Can we apply Reactive principles to the underlying communication layer
Answer to above question is - Yes and RSocket is the way to go
What is RSocket RSocket is a binary protocol that can perform bi-directional communication via TCP.</description></item><item><title>Performant and optimal Spring WebClient</title><link>https://www.dhaval-shah.com/performant-and-optimal-spring-webclient/</link><pubDate>Mon, 15 Mar 2021 14:53:50 +0000</pubDate><guid>https://www.dhaval-shah.com/performant-and-optimal-spring-webclient/</guid><description>Background In my previous post I tried demonstrating how to implement an optimal and performant REST client using RestTemplate
In this article I will be demonstrating similar stuff but by using WebClient. But before we get started, lets try rationalizing
Why yet another REST client i.e. WebClient
IMO there are 2 compelling reasons -
Maintenance mode of RestTemplate NOTE: As of 5.0 this class is in maintenance mode, with only minor requests for changes and bugs to be accepted going forward.</description></item><item><title>REST client with desired NFRs using Spring RestTemplate</title><link>https://www.dhaval-shah.com/rest-client-with-desired-nfrs-using-springs-resttemplate/</link><pubDate>Tue, 19 May 2020 14:53:50 +0000</pubDate><guid>https://www.dhaval-shah.com/rest-client-with-desired-nfrs-using-springs-resttemplate/</guid><description>Background In this contemporary world of enterprise application development, Microservice Architecture has become defacto paradigm. With this new paradigm, an application is going to have myriad set of independent and autonomous (micro)services which will be calling each other. One of the fundamental characteristics of Microservice Architecture is
Services must be easily consumable
Hence most of the services implemented will be exposing REST APIs. In order to consume these REST APIs, each Microservice application will have to implement a REST client.</description></item><item><title>Refactoring from imperative to reactive implementation</title><link>https://www.dhaval-shah.com/refactoring-from-imperative-to-reactive-implementation/</link><pubDate>Mon, 27 Jan 2020 21:06:28 +0000</pubDate><guid>https://www.dhaval-shah.com/refactoring-from-imperative-to-reactive-implementation/</guid><description>Background As software industry is embracing the new Microservice Architecture paradigm, myriad applications have been built with Spring Boot framework. By the time organizations have got its early versions of microservice applications in production, industry has found out newer and better avenues for further optimizing microservices, so that systems can be more robust, resilient and responsive a.k.a Reactive Systems (as per Reactive Manifesto ). Thanks to Spring Reactor and Spring Webflux which can help us in building reactive systems using Spring framework.</description></item><item><title>Understanding nuances of garbage collection and ways to tune it with real world example</title><link>https://www.dhaval-shah.com/understanding-and-optimizing-garbage-collection/</link><pubDate>Sun, 17 Nov 2019 18:37:16 +0000</pubDate><guid>https://www.dhaval-shah.com/understanding-and-optimizing-garbage-collection/</guid><description>In one of my previous post I elaborated basics of JVM memory and also explained how garbage collection works. In this post we will try to understand various types of GC and how to tune and optimize them with a real world example.
GC Taxonomy 1. Minor GC When garbage is collected from Young space it is called Minor GC.
Characteristics Triggered when JVM is unable to allocate space for a new object in Eden space.</description></item><item><title>Understanding JVM Memory Management</title><link>https://www.dhaval-shah.com/understanding-jvm-memory-management/</link><pubDate>Mon, 23 Oct 2017 04:44:34 +0000</pubDate><guid>https://www.dhaval-shah.com/understanding-jvm-memory-management/</guid><description>Everyone of us as Software Engineers would have experienced memory leaks, OOM errors in our Java/JVM applications? In order to dissect such issues it is extremely important to understand the whats' and hows' of JVM memory and its management.
JVM - Memory Management One of the many strengths of the JVM is that it performs automatic memory management. As we all know memory management is the process of allocating objects, determining when those objects are no longer needed; thereby de-allocating the memory used by those objects and making it available for future allocations</description></item><item><title>The curious case of CGLIB in generating Proxies !</title><link>https://www.dhaval-shah.com/the-curious-case-of-cglib-in-generating-proxies/</link><pubDate>Tue, 02 Jun 2015 18:42:08 +0000</pubDate><guid>https://www.dhaval-shah.com/the-curious-case-of-cglib-in-generating-proxies/</guid><description>Recently I was required to identify a memory leak in one of the enterprise application running in production.
Fortunately we were able to haveheap dumpsfrom the production environment. After analyzing few heap dumps I was able to trace a uniform pattern; which I felt might be one of the potential root causes for the memory leak. Within all the heap dumps, the same object was holding almost 25 % - 35 % of heap memory.</description></item></channel></rss>