skip to main content
10.1145/1449764.1449776acmconferencesArticle/Chapter ViewAbstractPublication PagessplashConference Proceedingsconference-collections
research-article

QVM: an efficient runtime for detecting defects in deployed systems

Published:19 October 2008Publication History

ABSTRACT

Coping with software defects that occur in the post-deployment stage is a challenging problem: bugs may occur only when the system uses a specific configuration and only under certain usage scenarios. Nevertheless, halting production systems until the bug is tracked and fixed is often impossible. Thus, developers have to try to reproduce the bug in laboratory conditions. Often the reproduction of the bug consists of the lion share of the debugging effort.

In this paper we suggest an approach to address the aforementioned problem by using a specialized runtime environment (QVM, for Quality Virtual Machine). QVM efficiently detects defects by continuously monitoring the execution of the application in a production setting. QVM enables the efficient checking of violations of user-specified correctness properties, e.g., typestate safety properties, Java assertions, and heap properties pertaining to ownership.

QVM is markedly different from existing techniques for continuous monitoring by using a novel overhead manager which enforces a user-specified overhead budget for quality checks. Existing tools for error detection in the field usually disrupt the operation of the deployed system. QVM, on the other hand, provides a balanced trade off between the cost of the monitoring process and the maintenance of sufficient accuracy for detecting defects. Specifically, the overhead cost of using QVM instead of a standard JVM, is low enough to be acceptable in production environments.

We implemented QVM on top of IBM's J9 Java Virtual Machine and used it to detect and fix various errors in real-world applications.

References

  1. GOIM: Gamers own instant messenger. available at http://goim.us/wiki/show/GOIM.Google ScholarGoogle Scholar
  2. Aftandilian, E., and Guyer, S. Z. GC assertions: Using the garbage collector to check heap properties. In MSPC (2008), ACM. Google ScholarGoogle ScholarDigital LibraryDigital Library
  3. Allan, C., Avgustinov, P., Christensen, A. S., Hendren, L., Kuzins, S., Lhoták, O., de Moor, O., Sereni, D., Sittampalam, G., and Tibble, J. Adding trace matching with free variables to aspectj. In OOPSLA '05: Proceedings of the 20th annual ACM SIGPLAN conference on Object oriented programming, systems, languages, and applications (2005), ACM, pp. 345--364. Google ScholarGoogle ScholarDigital LibraryDigital Library
  4. Arnold, M., and Ryder, B. G. A framework for reducing the cost of instrumented code. In PLDI '01: Proceedings of the ACM SIGPLAN 2001 conference on Programming language design and implementation (New York, NY, USA, 2001), ACM, pp. 168--179. Google ScholarGoogle ScholarDigital LibraryDigital Library
  5. Arnold, M., and Ryder, B. G. Thin guards: A simple and effective technique for reducing the penalty of dynamic class loading. In Proceedings of the Sixteenth European Conference on Object-Oriented Programming (Málaga, Spain, June 2002), B. Magnusson, Ed., vol. 2374 of Lecture Notes in Computer Science, pp. 498--524. Google ScholarGoogle ScholarDigital LibraryDigital Library
  6. Auerbach, J., Bacon, D., Cheng, P., Grove, D., Biron, B., Gracie, C., McCloskey, B., Micic, A., and Sciampacone, R. Toshio suganuma and toshiaki yasue and motohiro kawahito and hideaki komatsu and toshio nakatani. In Proceedings of the International Conference on Embedded Software (New York, NY, USA, 2008), ACM.Google ScholarGoogle Scholar
  7. Avgustinov, P., Tibble, J., and de Moor, O. Making trace monitors feasible. In OOPSLA '07: Proceedings of the 22nd annual ACM SIGPLAN conference on Object oriented programming systems and applications (2007), ACM, pp. 589--608. Google ScholarGoogle ScholarDigital LibraryDigital Library
  8. Azureus - Java BitTorrent client. http://azureus.sourceforge.net/.Google ScholarGoogle Scholar
  9. Bodden, E., Hendren, L. J., Lam, P., Lhoták, O., and Naeem, N. A. Collaborative runtime verification with tracematches. In 7th International Workshop on Runtime Verification (RV) (2007), vol. 4839 of Lecture Notes in Computer Science, pp. 9--21. Google ScholarGoogle ScholarDigital LibraryDigital Library
  10. Bodden, E., Hendren, L. J., and Lhoták, O. A staged static program analysis to improve the performance of runtime monitoring. In ECOOP (2007), pp. 525--549. Google ScholarGoogle ScholarDigital LibraryDigital Library
  11. Bond, M. D., and McKinley, K. S. Bell: bit-encoding online memory leak detection. SIGOPS Oper. Syst. Rev. 40, 5 (2006), 61--72. Google ScholarGoogle ScholarDigital LibraryDigital Library
  12. Chen, F., and Roşu, G. MOP: An Efficient and Generic Runtime Verification Framework. In Object-Oriented Programming, Systems, Languages and Applications(OOPSLA'07) (2007). Google ScholarGoogle ScholarDigital LibraryDigital Library
  13. Chilimbi, T. M., and Ganapathy, V. Heapmd: identifying heap-based bugs using anomaly detection. vol. 34, ACM, pp. 219--228.Google ScholarGoogle Scholar
  14. Chilimbi, T. M., and Hirzel, M. Dynamic hot data stream prefetching for general-purpose programs. In PLDI '02: Proceedings of the ACM SIGPLAN 2002 Conference on Programming language design and implementation (New York, NY, USA, 2002), ACM, pp. 199--209. Google ScholarGoogle ScholarDigital LibraryDigital Library
  15. DeLine, R., and Fahndrich, M. Enforcing high-level protocols in low-level software. In PLDI '01: Proceedings of the ACM SIGPLAN 2001 conference on Programming language design and implementation (New York, NY, USA, 2001), ACM Press, pp. 59--69. Google ScholarGoogle ScholarDigital LibraryDigital Library
  16. DeLine, R., and Fähndrich, M. Adoption and focus: Practical linear types for imperative programming. pp. 13--24.Google ScholarGoogle Scholar
  17. Dillig, I., Dillig, T., Yahav, E., and Chandra, S. The closer: Automating resource management in java. In ISMM (2008). Google ScholarGoogle ScholarDigital LibraryDigital Library
  18. Eclipse. Standard widget toolkit (swt). http://www.eclipse.org/swt/.Google ScholarGoogle Scholar
  19. Fink, S., Yahav, E., Dor, N., Ramalingam, G., and Geay, E. Effective typestate verification in the presence of aliasing. In ISSTA '06: Proceedings of the 2006 international symposium on Software testing and analysis (New York, NY, USA, 2006), ACM Press, pp. 133--144. Google ScholarGoogle ScholarDigital LibraryDigital Library
  20. Fink, S. J., and Qian, F. Design, implementation and evaluation of adaptive recompilation with on-stack replacement. In International Symposium on Code Generation and Optimization (CGO 2003) (2003), pp. 241--252. Google ScholarGoogle ScholarDigital LibraryDigital Library
  21. Foster, J. S., Terauchi, T., and Aiken, A. Flow-sensitive type qualifiers. pp. 1--12.Google ScholarGoogle Scholar
  22. Hauswirth, M., and Chilimbi, T. M. Low-overhead memory leak detection using adaptive statistical profiling. SIGPLAN Not. 39, 11 (2004), 156--164. Google ScholarGoogle ScholarDigital LibraryDigital Library
  23. Heine, D. L., and Lam, M. S. A practical flow-sensitive and context-sensitive c and c++ memory leak detector. In PLDI '03: Proceedings of the ACM SIGPLAN 2003 conference on Programming language design and implementation (New York, NY, USA, 2003), ACM, pp. 168--181. Google ScholarGoogle ScholarDigital LibraryDigital Library
  24. Jump, M., and McKinley, K. S. Cork: dynamic memory leak detection for garbage-collected languages. SIGPLAN Not. 42, 1 (2007), 31--38. Google ScholarGoogle ScholarDigital LibraryDigital Library
  25. Lau, J., Arnold, M., Hind, M., and Calder, B. Online performance auditing: using hot optimizations without getting burned. SIGPLAN Not. 41, 6 (2006), 239--251. Google ScholarGoogle ScholarDigital LibraryDigital Library
  26. Lev-Ami, T., and Sagiv, M. TVLA: A framework for Kleene based static analysis. In Saskatchewan (2000), vol. 1824 of Lecture Notes in Computer Science, Springer-Verlag, pp. 280--301. Google ScholarGoogle ScholarDigital LibraryDigital Library
  27. Liblit, B. Cooperative Bug Isolation (Winning Thesis of the 2005 ACM Doctoral Dissertation Competition), vol. 4440 of Lecture Notes in Computer Science. Springer, 2007. Google ScholarGoogle ScholarDigital LibraryDigital Library
  28. Livshits, V. B. Turning Eclipse against itself: Finding bugs in Eclipse code using lightweight static analysis. Eclipsecon '05 Research Exchange, Mar. 2005.Google ScholarGoogle Scholar
  29. Microsystems, S. Jvmtm tool interface, version 1.0. In http://java.sun.com/j2se/1.5.0/docs/guide/jvmti/jvmti.html.Google ScholarGoogle Scholar
  30. Mitchell, N. The runtime structure of object ownership. In ECOOP (2006), D. Thomas, Ed., vol. 4067 of Lecture Notes in Computer Science, Springer, pp. 74--98. Google ScholarGoogle Scholar
  31. Mitchell, N., and Sevitsky, G. The causes of bloat, the limits of health. In OOPSLA '07: Proceedings of the 22nd annual ACM SIGPLAN conference on Object oriented programming systems and applications (2007), pp. 245--260. Google ScholarGoogle ScholarDigital LibraryDigital Library
  32. Müller, P., and Rudich, A. Ownership transfer in universe types. In OOPSLA '07: Proceedings of the 22nd annual ACM SIGPLAN conference on Object oriented programming systems and applications (New York, NY, USA, 2007), ACM, pp. 461--478. Google ScholarGoogle ScholarDigital LibraryDigital Library
  33. Qian, F., and Hendren, L. An adaptive, region-based allocator for java. In Proceedings of the third international symposium on Memory management (Jun 2002), ACM Press, pp. 127--138. Google ScholarGoogle ScholarDigital LibraryDigital Library
  34. Ramalingam, G., Warshavsky, A., Field, J., Goyal, D., and Sagiv, M. Deriving specialized program analyses for certifying component-client conformance. In PLDI '02: Proceedings of the ACM SIGPLAN 2002 Conference on Programming language design and implementation (New York, NY, USA, 2002), ACM, pp. 83--94. Google ScholarGoogle ScholarDigital LibraryDigital Library
  35. Shaham, R., Yahav, E., Kolodner, E., and Sagiv, M. Establishing local temporal heap safety properties with applications to compile-time memory management. In Static Analysis Symposium (2003). Google ScholarGoogle ScholarDigital LibraryDigital Library
  36. Strom, R. E., and Yemini, S. Typestate: A programming language concept for enhancing software reliability. IEEE Trans. Software Eng. 12, 1 (1986), 157--171. Google ScholarGoogle ScholarDigital LibraryDigital Library
  37. Suganuma, T., Yasue, T., Kawahito, M., Komatsu, H., and Nakatani, T. A dynamic optimization framework for a Java just-in-time compiler. In OOPSLA '01: Proceedings of the 16th ACM SIGPLAN conference on Object oriented programming, systems, languages, and applications (New York, NY, USA, 2001), ACM, pp. 180--195. Google ScholarGoogle ScholarDigital LibraryDigital Library
  38. Yahav, E., and Ramalingam, G. Verifying safety properties using separation and heterogeneous abstractions. In Proceedings of the ACM SIGPLAN 2004 conference on Programming language design and implementation (2004), ACM Press, pp. 25--34. Google ScholarGoogle ScholarDigital LibraryDigital Library

Index Terms

  1. QVM: an efficient runtime for detecting defects in deployed systems

      Recommendations

      Comments

      Login options

      Check if you have access through your login credentials or your institution to get full access on this article.

      Sign in

      PDF Format

      View or Download as a PDF file.

      PDF

      eReader

      View online with eReader.

      eReader
      About Cookies On This Site

      We use cookies to ensure that we give you the best experience on our website.

      Learn more

      Got it!