2005 Volume 27 Issue 7 Pages 425-438
During the last decade, many studies have examined "software aging", the phenomenon that long-running software systems show an increasing occurrence rate of hang/crash failures, progressive performance degradation, or both. This paper deals with the question how software can age even if no additional faults are introduced into the code. We discuss several categories of software "bugs" and clarify their definitions as well as their mutual relationships. We then show how those bugs responsible for software aging fit into this framework. To counteract software aging, a proactive technique called "software rejuvenation" has been proposed, which essentially involves stopping the running software and restarting it after removing the accrued error conditions. Due to the overhead incurred by software rejuvenation, an optimal timing of its initiation should be sought. We give an overview of approaches developed for dealing with this important question.