A performance engineer is a little bit of a jack-of-all-trades. Rather than focusing on small technological niche, performance testers must have a very wide range of technical skills to understand the inner working of a complex system under test.
As far as skill go, Scott Barber has said that you need to be a "mid-level everything":
"Become a "Mid-Level Everything" – Developer, DBA, Network Admin, Systems Admin, Architect, Business Analyst, etc."
If you want to become proficient in analyzing system performance and scalability, there are many technical areas you should study. Here are some skills I have found to be invaluable in my success as a performance engineer:
Performance Concepts:
- Methodology
- Load Generation Tools
- User/Workload Modeling
- Results Analysis (Latency, Throughput, Metrics)
- Bottleneck Detection
- Code Profiling
- Scalability
- Concurrency
- Charting/Graphing
- Statistics
Operating Systems and Servers:
- Monitoring (CPU/Network/Mem/Disk/etc)
- System Tuning
- Web/Application/Middleware Server Tuning
- System Administration
- Virtualization
- OS Concepts (CPU Scheduling, Memory Management, etc)
Database:
- SQL
- Stored Procedures
- Monitoring
- Tuning
Network:
- Topology
- Monitoring
- Load Balancing
- TCP/IP
- HTTP
- Packet Sniffing and Protocol Analysis
- Caching
- OSI Model
Programming:
- Proficiency in at least on general programming language. Preferably a dynamic scripting language (Python/Perl/Ruby/etc)
- Code/Algorithm Analysis
(Note: There are lots of "soft skills" a performance tester would need to be successful. This post focuses only on technical skills)