Distributed programs are particularly hard to write and to reason about their correctness. The idea of checking an expected property in a given distributed program run (i.e. runtime verification) has recently been attracting a great deal of attention for analyzing distributed programs. Runtime verification verifies the implementation of the system directly rather than verifying a model of it as is done in model checking. It is also based on formal logics and provides formalism, which is lacked in testing. Due to concurrency, the number of global states of a distributed program run tends to grow exponentially with respect to the number of program statements executed. As a result, checking the satisfaction of a property in a given distributed program run can incur significant overhead. In this book, we investigate various ideas to reduce the cost of runtime verification. These include the use of atoms, exploiting the notion of serialization and finally proposing a methodology that exploits the concept of atoms and partial order semantics to specify and to check properties of distributed programs.