http://www.omh.cc/mycnf/ (a my.cnf analyzer with links to related references)
https://paragasu.wordpress.com/2008/...configuration/ (a tight fit...)
A key thing to realize about high-performance server programs is that, left to their own devisings (which you shouldn't do), they know that "memory is the fastest thing there is." So they naturally tend to favor the use of it. But
... they have no way to know what's virtual and what's not. They also don't know what other applications are in the same box with them; they don't know how their activities are affecting others.
In the case of an Amazon cloud (virtual machine ...)
server, you also don't know anything about their silicon except that it's "beefy." You can naturally assume that Amazon has moderately over-committed their servers (this is a pragmatic fact, not a slam...) but you don't know by how much.
Therefore, you need to configure your total-deployment of software within your server so that, (a)
the various players are "good, friendly companions" with one another, and (b)
the virtual-machine they all live in is "a good, friendly companion" with all the other VM's in the same (unknown to you...) box.
Therefore, decide how much RAM you're going to use (a less-than-100% percentage of what you've been promised), and carve that space up among the various processes assuming that all of them are going "hell-bent to leather" processing the biggest orders you've ever had, for five of the most important customer you've ever dreamed of. Configure each server process so that it knows "the honest-to-stars truth" about what it's allowed to have use of, such that it can
be guaranteed the use of those resources on a continuous basis under aggressive loads (without significant swap activity).