Why does my JVM heap size thrash from 2gigs to 8 gigs?
There is no evidence that the system is thrashing in the normal (harmful) sense. The sawtooth pattern indicates that objects are being allocated (the up slope) and the GC is then reclaiming them. The allocation rate seems a bit high, but there is every sign that the GC is running efficiently. Indeed, the fact that the heap size is always dropping back to ~2Gb is a good sign, as is the fact that the % CPU usage is low.
I have little experience with memory tuning, but it seems like MaxPermSize is out of whack with Xms and Xmx. Or is this normal?
It looks kind of normal.
Certainly, there's no need to increase the size of permGen. (PermGen is used for objects that are anticipated to never be garbage collected; typically intern'd Strings and code segments. Normal application objects are never allocated in or moved to permGen space.)
(Hypothetically, if you didn't have lots of memory, the high allocation rate might be a cause for concern. However, you cannot address that by tweaking the GC parameters. You'd need to do some profiling to see what is creating so many objects and see if it is sensible to try to reduce the creation rate. Depending on the application, it may not even be sensible to try.)