Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What are the main skills to be a performance consultant? [closed]

If I want to become a performance consultant for Java applications and systems, what are the main skills I need?

  • long experience with Java itself
  • using a profiler (or stack shots)
  • database knowledge (to avoid/detect common performance mistakes: indexes, etc.)
  • Caching library
  • Java concurrency

Do you agree on the importance of these? What else would you add?


UPDATED from answers:

Additional Skills:

  • Garbage collection, and tuning
  • Efficient Java code
  • Design (high-level vision)
  • UI technologies (JavaScript, DOM, CSS, Swing, SWT)
  • Networking understanding (also used for Ajax)
  • Algorithmics, Big O
  • Hardware understand for scaling

Mindset (offered by several answers, although I didn't ask for it):

  • Analytical (really measure)
  • Pressure-resistant
  • People/political skills
like image 538
KLE Avatar asked Oct 14 '09 14:10

KLE


2 Answers

I think the most important skill is an analytical mind able to follow the evidence and not the "gut feel" and really break down and measure the issues.

After that, it would take some creative ways to understand measuring. When someone hires a performance consultant they are often stuck, which most likely means they have real users doing real things, which means Java won't be the only thing in the stack (as you noted databases, but there may be JavaScript and networking issues and who knows what else as well).

In addition to all of that, in terms of the laundry list, the big thing missing is garbage collection. Understanding how that works and how to tweak that is critical. Many cases will involve problems with stop-the-world garbage collection just stopping an important process for too long.

You really need to have an extensive toolkit of potential solutions, as each client will need different things. Some will need an object pool for their immutable objects, some will need to introduce immutable objects to reduce synchronization, some will need to introduce mutable objects to prevent excessive object creation, etc.. Performance is really a case-by-case thing, and you need to have a range of experience and knowledge to pull from to help with each case.

like image 87
Yishai Avatar answered Sep 29 '22 09:09

Yishai


I think that depending upon the particular client and problem at hand, you'll need to have excellent skills in algorithmic analysis and optimization. Is your problem at the math-algorithmic level, or is it at the Java-algorithmic level?

You'll also need to be very familiar with the implementations of JVM you'll be working with. Knowing the language and API isn't good enough: you'll have to know in intimate detail which language constructs to use in certain situations, and this can vary depending upon the specific JVM you are using. A profiler won't always reveal JVM-specific performance issues. As others have noted, the same JVM can behave differently on disparate harware.

like image 31
San Jacinto Avatar answered Sep 29 '22 09:09

San Jacinto