Comprehensive Guide to Java Application Performance Optimization and Troubleshooting
This article provides a detailed, step‑by‑step guide for diagnosing and fixing performance problems in Java applications, covering code‑level pitfalls, CPU and memory analysis, disk and network I/O bottlenecks, and a collection of practical command‑line tools for rapid troubleshooting.
This article provides a detailed, step‑by‑step guide for diagnosing and fixing performance problems in Java applications, covering code‑level pitfalls, CPU and memory analysis, disk and network I/O bottlenecks, and a collection of practical command‑line tools for rapid troubleshooting.
1. Code‑related checks – Verify that performance issues are not caused by simple coding mistakes such as excessive logging, inefficient loops, misuse of regular expressions, unnecessary boxing/unboxing, or improper use of String.intern(). The article lists common high‑frequency error patterns and suggests eliminating them before looking elsewhere.
2. CPU analysis – Distinguish between high CPU utilization with high load (CPU‑bound) and low CPU utilization with high load (I/O‑bound). Use jstack, profiling tools, or flame‑graphs to locate hot threads, and examine vmstat, iostat, and pidstat to understand context switches and iowait percentages.
3. Memory analysis – Focus on Java heap, metaspace, and native memory. Monitor heap usage with jstat -gc, track GC pauses, and detect memory leaks via jmap –histo:live or profilers. The guide explains common OutOfMemoryError types and how to diagnose them.
4. Disk I/O and Network I/O – Use iostat, vmstat, and pidstat to spot disk saturation, and examine lsof for open files. For network bottlenecks, check request sizes, I/O models, and RPC thread‑pool configurations.
5. Useful one‑line commands
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' jmap –histo:live $pid | sort -r -k2 | head -n 50 # Memory top 10 processes
ps axo %mem,pid,euser,cmd | sort -nr | head -10 # CPU top 10 processes
ps -aeo pcpu,user,pid,cmd | sort -nr | head -10 grep "cpu " /proc/stat | awk -F ' ' '{total=$2+$3+$4+$5} END {print "idle\tused
", $5*100/total "% ", $2*100/total "%"}' jstack $pid | grep java.lang.Thread.State:|sort|uniq -c | awk '{sum+=$1; split($0,a,":");gsub(/^[ \t]+|[ \t]+$/, "", a[2]);printf "%s: %s
", a[2], $1}; END {printf "TOTAL: %s",sum}' # Show top 10 CPU‑consuming threads
ps -eo pid,tid,pcpu,cmd | sort -k3 -nr | head -106. Summary – Performance tuning is a holistic effort that combines code review, system monitoring, GC tuning, and appropriate tooling. While the article focuses on Java backend services, the principles apply broadly to any high‑throughput server application.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
Top Architect
Top Architect focuses on sharing practical architecture knowledge, covering enterprise, system, website, large‑scale distributed, and high‑availability architectures, plus architecture adjustments using internet technologies. We welcome idea‑driven, sharing‑oriented architects to exchange and learn together.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
