The document discusses various issues that can occur in multi-threaded applications and how thread dumps can help identify and diagnose them. It describes problems that can arise from I/O blocking, inefficient algorithms, lock contention, deadlocks, and non-thread-safe code. It provides examples like a HashMap causing 100% CPU usage. It also covers thread dump formats, tools for analyzing thread dumps, and questions that thread dumps may help answer about sporadic application behavior and performance problems.
In this document
Powered by AI
Introduction to real-life situations, thread dump formats, tools for analysis, and additional resources.
Exploration of I/O problems, algorithmic issues, and lock/synchronization challenges impacting threads.
Definition and implications of deadlocks, noting their rarity and detection through thread dumps.
Explanation of lock contention, its prevalence in multi-threaded applications, and approaches for detection.
Discussion on unpredictable application behavior related to non-thread safe code and required analysis.
Insight into varying thread dump formats across JVMs and application servers, highlighting readability.
Description of various thread states in Java, including NEW, RUNNABLE, BLOCKED, WAITING, and TERMINATED.
Methods to take thread dumps using various tools and analysis tools available for assessing dumps.
Details about an upcoming training course on JVM Internals, including topics covered and registration information.
Problems with I/O
Threadsmaybe blocked or perform slowly during access to I/O resources:
File system
Network
Database
Single or multiple thread dumps may help understading the problem
4.
Problems with
algorithms
Algorithm complexity is not suited well for the data set size
Algorithm is overusing expensive resources or memory
Algorithm is overusing locks, while it can be implemented in a lock-free manner
Single or multiple thread dumps may help noticing the problem
5.
Problems with
locks and
syncronization
No locking (not thread-safe implementations)
Deadlocks (overly syncronised)
Lock contention (overly syncronised)
Lock overhead (too many locks)
Single or multiple thread dumps may explain the situation
6.
Example:
HashMap gives
100% CPU load
Usage of not syncronised HashMap in a multi-threaded application
In certain situations it goes into infinite loop
This causes 100% CPU load
The probabilty of entering infinite loop depends on the size of the HashMap
Single thread dump reveals the problem
7.
From Wikipedia:
Deadlocks
“A deadlock is a situation in which two or more competing actions are each waiting
for the other to finish, and thus neither ever does.
8.
Deadlocks
In real life,deadlocks are pretty rare
CPU usage is usally close to 0
Single thread dump can reveal a deadlock situation
9.
Lock contention
From Wikipedia:
“This occurs whenever one process or thread attempts to acquire a lock held by
another process or thread. The more granular the available locks, the less likely one
process/thread will request a lock held by the other. (For example, locking a row
rather than the entire table, or locking a cell rather than the entire row.)
10.
Lock contention
The mostcommon problem with multi-threaded applications related to lock
handling
Sometimes easy, sometimes very hard to detect
You can only see one layer at a time
Multiple thread dumps may help to detect lock contention situations
11.
Sporadic
application
behaviour
May be related to not thread safe code
May be related to load patterns
May be related to specific data
Threads dumps may or may not help
Formats
Formats differ forvarious JVM and application server implementations
There is no tool that supports them all
Though format is usually very readble and follows same principles
Thread states II
“
WAITING- A thread that is waiting indefinitely for another thread to perform a
particular action is in this state.
TIMED_WAITING - A thread that is waiting for another thread to perform an
action for up to a specified waiting time is in this state.
TERMINATED - A thread that has exited is in this state.
JVM Internals
Training
Aestas/IT organizes "JVM Internals" training on March 25/26, 2013.
This 2–day course takes the developer on an in-depth tour of the Java Virtual Machine.
Intended for experienced JVM-based programmers, who want to get deeper with the
platform, this course will introduce the major subsystems of the JVM and practical ways
to apply this knowledge in real applications.
26.
Topics I
History ofJava and JVM
Specifications
Bytecode
Base components
Detailed architecture
JIT compilation
Garbage collection
Threads
Locks
Classloading