The workflow of tuning application’s performance is acknowledged as a top-down, closed-loop approach. The top-down part explains that issues found at higher levels could “mask” the problems that originate below; so we shall always eliminate high-level issues before drilling down to address those at lower levels. The closed-loop part is to ensure that when tuning application’s performance, we shall limit our focus to avoid unnecessary investigation astray.
System Level Tuning
The objective is to understand the overall behavior of the running application disclosed by the underlying operating system. Various performance counters shall be monitored, e.g. Processor, System, Memory, Disk, Network, etc. Through interpreting their values, we can suspect the potential bottleneck and initiate our analysis.
Tools in used:
Windows Performance Monitor
Application Level Tuning
It is familiar to application programmer as it actually targets the codes. API usages, heap interaction, as well as thread model are those areas we shall pay attention to based on our investigation conducted previously in system level tuning.
Tools in used:
JProbe Profiler (commercial)
JIP (open-sourced)
Java heap dump
Java thread dump
JVM Level Tuning
Java language provides application programmer with an “automatic” mechanism to handle memory management, i.e. garbage collection. Under certain requirement, its default behavior should be adjusted to achieve better performance.
Tools in used:
Java JConsole
Micro-architecture Level Tuning
It is related to instruction efficiency, branch prediction, cache performance, etc.
Tools in used:
vTune Analyzer