The preventive maintenance is very useful to improve effectively the service availability for software systems with service degradation. In this paper, we present a stochastic model to describe an operational software system, which consists of one operating system and multiple applications and provides a service in continuous time. Two kinds of rejuvenation strategies are taken, namely reconfiguration of applications as a corrective maintenance and reinstallation of an operating system as a preventive maintenance. We derive the optimal preventive rejuvenation schedules maximising the steady-state service availability and maximising the expected reward per unit time, by means of semi-Markov decision processes. Illustrative numerical examples are presented to give decision tables on the optimal software rejuvenation policies.