Generell kannst du (zumindest grob) herausfinden, ob es wirklich am Server liegt, wenn du beim Herumfliegen die Debugausgabe (F3) aktivierst und einen Blick auf die 10. Zeile (4. Zeile vom 2. Absatz) wirfst. Dort sind Requested Chunks: x (LOD: x, CA: x) angegeben. Das gibt die Anzahl der Chunks an (die Zahlen hinter LOD und CA sind ebenfalls relevant), die vom Client angefordert, aber noch nicht vom Server geliefert wurden. Unter normalen Bedingungen sollten sich diese Werte - wenn sie größer als 0 sind - rasch wieder reduzieren. Auch wenn es mal 1-2 Sekunden dauert, bis die Zahl "abgearbeitet" werden, ist das i.O. Problematisch wird es aber, wenn sich diese Zahl ewig nicht reduziert.
Die Serverperformance hängt nicht nur von der CPU um vom RAM ab, sondern auch von der Geschwindigkeit der Festplatte. Es spielt auch eine Rolle, ob SQLite oder MySQL verwendet werden (und im Falle von MySQL spielt die Geschwindigkeit des MySQL Servers eine Rolle). Und natürlich ist auch die Bandbreite von Relevanz, da recht viele Daten übertragen werden müssen (umso mehr, je stärker und detailreicher die Welt bebaut und je mehr Bilder platziert wurden).
Handelt es sich bei deinem Server um einen eigenen Server (also ein vServer oder Rootserver), oder um einen Gameserver (also zB explizit ein RW Server)? Leider erleben wir bei manchen Gameserver-Hostern (ohne Namen nennen zu wollen) immer wieder, dass die angebotenen RW Server viel zu wenig Leistung bieten. Wir haben schon Fälle gesehen, dass "gute" und relativ teure Gameserver teilweise langsamer waren als so mancher 2€ vServer
Das betrifft natürlich nicht alle Hoster und ich will damit auch nicht sagen, dass das zwangsläufig auf deinen Hoster zutrifft (ich weiß ja nichtmals, wer dein Hoster ist), aber alleine solche Sachen können schon zu einer Menge Ärger führen...
Was den RAM Verbrauch angeht: Der RAM, der von Java reserviert wurde, wird - solange der RW Server läuft - nicht mehr für andere Anwendungen freigegeben (auch wenn der reservierte RAM nicht verwendet wird). Von "außerhalb" des RW Servers ist es schwierig, genaue Aussagen über den tatsächlichen RAM Verbrauch zu treffen, da Java direkt von Anfang an - je nach Auslegung des Betriebssystems - mehr RAM reserviert als verwendet wird.
Um den tatsächlichen RAM Verbrauch festzustellen, kannst du den Ingamebefehl getserverinfo memory verwenden. Dort siehst du bei "Used memory" wieviel RAM in Wirklichkeit verbraucht wird. Ggf. ist es sinnvoll, den Befehl mehrmals hintereinander einzugeben, da sich die Zahl in manchen Fällen zügig ändern kann 
Die Meldung Connection reset by peer besagt prinzipiell nur, dass die Verbindung vom Client unerwartet unterbrochen wurde. In den meisten Fällen wird diese Meldung vmtl. nicht die Ursache, sondern die Folge davon sein, dass der Client den Ladevorgang abgebrochen hat. Wenn der Spieler nicht auf den Server kommt kann das natürlich viele Gründe haben. Wenn der Server scheinbar Probleme mit dem Generieren und dem Senden der Welt hat, kann das sogar schon die Ursache dafür sein...
Wegen dem Motorboot: Das ist leider ein Bug. Wenn das Motorboot schneller als die Weltgenerierung ist, wird es ungewollterweise nicht an der Stelle "gefreezed", sondern fährt ungehindert weiter und verlässt den Bereich, der eine "Kollision" hat. Als Folge fällt das Boot durch die Welt 
Eventuell kannst du mir einen Serverlog zusenden (von einer möglichst langen Spielsession, in welcher die Probleme auftraten)? Entweder hier im Thread posten, oder mir direkt via PN senden. Vielleicht enthält das ein paar weitere Informationen darüber, was da in Wirklichkeit los ist 