Performance Engineering Using Performance Anti-Patterns
Performance analysis of software systems is complex due to the number of components and the interactions among them. Without the knowledge of experienced experts, it is futile to diagnose the performance anomaly and attempt to pinpoint the root causes in the system. Design patterns are a formal way of documenting best practice approaches in software development and system architecture design. Software performance antipatterns are similar to design patterns in that they indicate what to avoid and how to fix performance problems when they appear. Although the idea of applying antipatterns is promising, there are gaps in matching the symptoms and generating feedback solutions for redesign. In this work, we analyze performance antipatterns to extract detectable features, influential factors, and resource involvements so that we can lay the foundation to detect their presence. We propose a system abstraction layering model and suggestive profiling methods as the infrastructure in building the framework for performance antipattern detection with solution suggestions. It is used in the refactoring phase of the performance modeling process, and is synchronized with the software development life cycles. Proposed tools and utilities are implemented and have been used on real production servers with RUBiS benchmark.