Performance problems take many forms. The customer may report that in a sequence of copy operations, a particular copy takes an inordinate amount of time to complete. For example, copying a file of a certain size takes 10 seconds per copy for 5 iterations and then the next file copy operation takes 5 minutes. The next series of copies are then completed in an average of 10 seconds per copy.
The system may hang. Specifically, an operation stops or appears to stop and the process or thread becomes uninterruptible. Process or thread hangs can be caused by improper locking operations, faulty logic such as a bit set to the wrong position, or the process or thread simply doesn't wake up when a condition or signal that it is waiting for has occurred. On occasion, an apparent hang is more accurately the result of the process or thread making extremely slow progress.
Other performance problems can result when system resources are either inadequate or depleted. Some causes of system resource starvation are memory leaks, hardware failures or lack of capacity.
Some performance problems can be resolved by studying a forced crash of the operating system and reviewing the relevant code for logic errors. In other cases additional performance monitoring tools are used to profile the execution of the code. The problem solver looks for code that is called more often than expected or which takes longer to complete than it should. Performance data can be collected over time and analysis may show that system resource depletion has resulted in the poor performance.