Buttersniper
Lt. Junior Grade
- Registriert
- Mai 2008
- Beiträge
- 404
Hallo zusammen,
ich arbeite aktuell an einem kleinen Raspberry Pi Projekt, bei dem ich einen Minecraft-Server aufsetzen und via Hamachi-VPN Tunnel für mich und ein paar Freunde zugänglich machen will.
Begonnen hat das ganze auf Raspbian. Ich habe dort erfolgreich einen in .net geschriebenen Minecraft-Server zum laufen gebracht:
https://cuberite.org/
und konnte mich sogar mit installiertem und konfiguriertem Hamachi von meinem Windows-Rechner mit aktuellem Minecraft Client drauf verbinden. So weit so gut.
Initiales Problem
Jetzt ist der in .net geschriebene Minecraft-Server aber lange nicht auf dem stand des "offiziellen" Minecraft-Servers (Java). So kommt es z.B. dass Creeper explodieren können wenn sie außerhalb meiner Hütte heraumlaufen und ich mich bei geschlossener Tür darin befinde. Es gibt noch einige weitere Unterschiede zum Original; hauptsächlich in dem Verhalten / der Physik des Spiels.
Lösungsansatz
Also habe ich mir mal die Mühe gemacht und versucht, dass ganze unter Java zum laufen zu bringen. Tatsächlich hat man sich bei Oracle dazu überwunden eine für ARM Prozessoren (wie im Raspberry) laufende Java-Version zu entwickeln, u.a. da bereits Millionen dieser Dinger im Umlauf sind. Nach etwas gefriggel habe ich diese auch installiert und zum Laufen bekommen.
Neues Problem
Jetzt gibt es aber folgendes Problem: Minecraft ist (bekanntlicher weise) sehr CPU-lastig. Wenn ich also den Java Minecraft-Server mit der soeben installierten JRE starten möchte, klappt das, braucht aber unendlich lange. Bis man mal zu dem Punkt "Preparing spawn area: 0%" kommt, vergehen Minuten. Und dann braucht er schätzungsweise bis zu einer Stunde um den Server komplett zu starten (habe bei max. 20% abgebrochen, weil man für jedes Prozent gerne mal eine Minute oder länger wartet). Das liegt m.E. hauptsächlich daran, dass Java hier nur einen Kern verwendet (in htop ersichtlich).
Neuer Lösungsansatz
Ich habe bereits versucht mit
Java beizubringen, bitte alle Prozessorkerne zu verwenden (Markierter Befehl soll das wohl tun), hat aber nichts gebracht. Java nutzt hier immer nur einen Kern. Interessanter weise springt die Last von Kern zu Kern, es ist aber immer nur einer zu 100% ausgelastet.
Ich habe das ganze Prozedere auch mal unter Ubuntu Mate probiert, gleiches Ergebnis (liegt also nicht an Raspbian, augenscheinlich).
Offene Fragen
Meine Fragen an dieser Stelle lauten:
Ich bin für jeden Rat dankbar.
Viele Grüße
ich arbeite aktuell an einem kleinen Raspberry Pi Projekt, bei dem ich einen Minecraft-Server aufsetzen und via Hamachi-VPN Tunnel für mich und ein paar Freunde zugänglich machen will.
Begonnen hat das ganze auf Raspbian. Ich habe dort erfolgreich einen in .net geschriebenen Minecraft-Server zum laufen gebracht:
https://cuberite.org/
und konnte mich sogar mit installiertem und konfiguriertem Hamachi von meinem Windows-Rechner mit aktuellem Minecraft Client drauf verbinden. So weit so gut.
Initiales Problem
Jetzt ist der in .net geschriebene Minecraft-Server aber lange nicht auf dem stand des "offiziellen" Minecraft-Servers (Java). So kommt es z.B. dass Creeper explodieren können wenn sie außerhalb meiner Hütte heraumlaufen und ich mich bei geschlossener Tür darin befinde. Es gibt noch einige weitere Unterschiede zum Original; hauptsächlich in dem Verhalten / der Physik des Spiels.
Lösungsansatz
Also habe ich mir mal die Mühe gemacht und versucht, dass ganze unter Java zum laufen zu bringen. Tatsächlich hat man sich bei Oracle dazu überwunden eine für ARM Prozessoren (wie im Raspberry) laufende Java-Version zu entwickeln, u.a. da bereits Millionen dieser Dinger im Umlauf sind. Nach etwas gefriggel habe ich diese auch installiert und zum Laufen bekommen.
Neues Problem
Jetzt gibt es aber folgendes Problem: Minecraft ist (bekanntlicher weise) sehr CPU-lastig. Wenn ich also den Java Minecraft-Server mit der soeben installierten JRE starten möchte, klappt das, braucht aber unendlich lange. Bis man mal zu dem Punkt "Preparing spawn area: 0%" kommt, vergehen Minuten. Und dann braucht er schätzungsweise bis zu einer Stunde um den Server komplett zu starten (habe bei max. 20% abgebrochen, weil man für jedes Prozent gerne mal eine Minute oder länger wartet). Das liegt m.E. hauptsächlich daran, dass Java hier nur einen Kern verwendet (in htop ersichtlich).
Neuer Lösungsansatz
Ich habe bereits versucht mit
taskset -c 0-3 Java -Xmx700M -Xms256M -jar minecraft_server.1.11.2.jar nogui
Java beizubringen, bitte alle Prozessorkerne zu verwenden (Markierter Befehl soll das wohl tun), hat aber nichts gebracht. Java nutzt hier immer nur einen Kern. Interessanter weise springt die Last von Kern zu Kern, es ist aber immer nur einer zu 100% ausgelastet.
Ich habe das ganze Prozedere auch mal unter Ubuntu Mate probiert, gleiches Ergebnis (liegt also nicht an Raspbian, augenscheinlich).
Offene Fragen
Meine Fragen an dieser Stelle lauten:
- Gibt es andere Befehle zur Ansteuerung mehrerer Prozessorkerne, die man mal ausprobieren könnte?
- Laut Internet kann Minecraft nur einen Kern verwenden; es soll also an der Software liegen. Heißt das, das mein Vorhaben aussichtlos ist?
- Gibt es vielleicht alternative Minecraft-Server oder konfigs die mir weiterhelfen könnten, mein Ziel zu erreichen einen möglichst originalgetreuen Minecraft-Server auf meinem Pi zum Laufen zu bringen?
- Weitere Ideen...?
Ich bin für jeden Rat dankbar.
Viele Grüße