Optymalizacja Minecraft oraz Java – więcej fps, mniej zacięć

Trzeba przyznać, że Java nie najlepiej radzi sobie z zarządzaniem pamięcią, a już całkowicie kuleje w aplikacjach typowo interaktywnych, natomiast Ci co korzystają z takich modów jak FTB lub po prostu mają 100 dodatków – wymagania wzrastają o całe GB ramu! a to powoduje ze Garbage Collector nie wyrabia. Poniższy artykuł postara się namówić Javę do lepszego zarządzania sobie z pamięcią i śmieciami w niej. Skupiamy się na optymalizacji pod “Low Pause” i lepszym GC, domyślnie Java skonfigurowana jest pod przepustowość. Zobaczmy więc czy optymalizacja minecraft lub innej aplikacji przyniesie skutek.

Prolog

Zmusimy javę do lepszego zarządzanie śmieciami w pamięci, postaramy się użyć eksperymentalnych rozwiązań, wdrożymy mody które lepiej kominukują się z serwerem, kartą graficzną.Wysoka kompatybilność Javy z systemami wymusza używanie podstawowych nie zawsze dobrych poleceń przez twórców dlatego dalej musimy radzić sobie sami9.

Poniższy poradnik także pomaga rozwiązać problemy z błędem java.lang.OutOfMemoryError: PermGen space

Szybkie i konkretne rozwiązania bez gadania

Najważniejszy i najlepszy: FastCraft (client oraz server) – usprawnia wiele mechanik samej gry, np. zmniejsza częstotliwość przeliczania świateł z kilkunastu na sekundę do
1 na sekundę, a my sami nie dostrzegamy wizualnych zmian

później Optifine – ale ten może powodować problemy z teksturami niektórych modów (np. Chisel), więc, zanim zaczniecie grać, potestujecie, natomiast sa mod usprawnia silnik renderatora grafik i sposób zarządzania teksturami

Wszystko wrzucamy do foleru /mods, mogą działać jednocześnie

  1. Fastcraft (client oraz serwer)
  2. Optifine 
  3. BetterFps
  4. Przejdź na Jave-64 bit (http://filehippo.com/pl/search?q=java);
    Sprawdź swoją wersję z CMD polceniem Java -version, powinien być dopisek X64

Polcenie lini komend dla launchera

1
-Xmx5120m -Xms2560m -XX:+TieredCompilation -Xincgc -XX:+UseBiasedLocking -XX:+UseCodeCacheFlushing  -XX:+UseStringCache -XX:+OptimizeStringConcat -XX:-UseFastEmptyMethods -XX:-UseFastAccessorMethods -XX:+UseConcMarkSweepGC -XX:MaxHeapFreeRatio=25 -XX:MinHeapFreeRatio=20 -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=4 -XX:MaxPermSize=512 -XX:UseSSE=4 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=4 -XX:+UnlockExperimentalVMOptions -XX:+UseCompressedOops -XX:ObjectAlignmentInBytes=16
-Xmx5120m -Xms2560m -XX:+TieredCompilation -Xincgc -XX:+UseBiasedLocking -XX:+UseCodeCacheFlushing  -XX:+UseStringCache -XX:+OptimizeStringConcat -XX:-UseFastEmptyMethods -XX:-UseFastAccessorMethods -XX:+UseConcMarkSweepGC -XX:MaxHeapFreeRatio=25 -XX:MinHeapFreeRatio=20 -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=4 -XX:MaxPermSize=512 -XX:UseSSE=4 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=4 -XX:+UnlockExperimentalVMOptions -XX:+UseCompressedOops -XX:ObjectAlignmentInBytes=16

Rezultatem powinien być ogromny wzrost wydajności MC który potwierdzam. I może sprawa pomijalna co dla niektórych – powyższe optymalizacje zmniejszają zużycie prądu, co przy wielogodzinnych rozgrywkach przynosi faktyczne oszczędności.

Przygotowanie minimalne

  • Nie posiadam launcherów, mam czystego MC

Optifine + Forge

  1.  wduś win+r
  2. wpisz %appdata%/.minecraft/bin/
  3. otwórz przez WinRar plik minecraft.jar
  4. Umieść wszystkie pliki
  • Posiadam gotowe paczki

Pobrać mody z sekcji “szybkie rozwiązania” i umieścić w folderze /mods.

Gotowe rozwiązania typu FTB czy ATLauncher mogą zawierać własne rozwiązania optymalizacyjne które bardzo polecam dla każdego początkującego, pozbędziecie się problemów z manualną konfiguracją modów i rozpoczniecie rozgrywkę industrialną w 10min, zamiast w 1h.

Mody mogące wpływać nagatywnie na wydajność

MineFactory Reloaded – dotyczy to launchera FTB i ATLauncher oraz samego moda, powoduje/może powodować/niekoniecznie ogromne problemy z płynnością FPS. Połaczenie tego moda z fastcraftem powinno pomóc i moda można zostawić.

Przykładowe polecenia do rozruchu

Przykładowy command line który sam stosuję w cliencie oraz serwerze

Kod z 24.08.2015 : usunięto niepotrzebne logi wykorzystania z konsoli, rozbudowano o kolejne polecenia,optymalizacyjne. Uwaga jezeli gra crashuje, wyłacza się, to prawdopodobnie serwer (dedykowany) używa innych poleceń, zalecane jest ich użycie po obu stronach 

1
-Xmx5120m -Xms2560m -XX:+TieredCompilation -Xincgc -XX:+UseBiasedLocking -XX:+UseCodeCacheFlushing  -XX:+UseStringCache -XX:+OptimizeStringConcat -XX:-UseFastEmptyMethods -XX:-UseFastAccessorMethods -XX:+UseConcMarkSweepGC -XX:MaxHeapFreeRatio=25 -XX:MinHeapFreeRatio=20 -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=4 -XX:MaxPermSize=512 -XX:UseSSE=4 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=4 -XX:+UnlockExperimentalVMOptions -XX:+UseCompressedOops -XX:ObjectAlignmentInBytes=16
-Xmx5120m -Xms2560m -XX:+TieredCompilation -Xincgc -XX:+UseBiasedLocking -XX:+UseCodeCacheFlushing  -XX:+UseStringCache -XX:+OptimizeStringConcat -XX:-UseFastEmptyMethods -XX:-UseFastAccessorMethods -XX:+UseConcMarkSweepGC -XX:MaxHeapFreeRatio=25 -XX:MinHeapFreeRatio=20 -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=4 -XX:MaxPermSize=512 -XX:UseSSE=4 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=4 -XX:+UnlockExperimentalVMOptions -XX:+UseCompressedOops -XX:ObjectAlignmentInBytes=16

Kod z 01.01.2015 : podstawowy kod optymalizacyjny

1
-Xmx5120m -Xms2560m -XX:+UseConcMarkSweepGC -XX:MaxHeapFreeRatio=25 -XX:MinHeapFreeRatio=20 -XX:SurvivorRatio=10 -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:MaxTenuringThreshold=4 -XX:MaxPermSize=512 -XX:UseSSE=4 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=4
-Xmx5120m -Xms2560m -XX:+UseConcMarkSweepGC -XX:MaxHeapFreeRatio=25 -XX:MinHeapFreeRatio=20 -XX:SurvivorRatio=10 -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:MaxTenuringThreshold=4 -XX:MaxPermSize=512 -XX:UseSSE=4 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=4

Jeden ze sposobów wystartowania

1
2
"C:\Windows\System32\javaw.exe" -Xmx2048M -Xms2048M -jar "Minecraft.exe"
(pomiędzy  java.exe" ... a ... -jar należny wkleić przykładowy cmd)
"C:\Windows\System32\javaw.exe" -Xmx2048M -Xms2048M -jar "Minecraft.exe"
(pomiędzy  java.exe" ... a ... -jar należny wkleić przykładowy cmd)

lub

1
javaw -Xmx2048M -Xms2048M -jar "Minecraft.exe"
javaw -Xmx2048M -Xms2048M -jar "Minecraft.exe"

lub

jeżeli używamy FTBLauncher bądź ATLauncher, opcja wprowadzenia parametrów dostępna jest z ustawień pod polem “Java arguments”. Należy pamiętać z launchery już z góry mają większość argumentów predefiniowanych, nie widzimy tego od razu. Dla zapewnienia dostępności gry większości z tych parametrów się normalnie nie stosuje, bo mogą więcej zaszkodzić dla starszego sprzętu niż mu pomóc, dlatego musimy sami rozpracować wiele parametrów i dostosować je do własnego środowiska. Domyślnie MC jest nastawiony na stabilność niżeli na szybkość, ten artykuł pomija kwestię stabilności.

Podsumowanie

Użycie modów z sekcji szybkich rozwiązań Optifine + BetterFps + Fastcraft (client/server)+ polecenia optymalizacyjne wraz z 200 modami dało naprawdę zauważalne rezultaty w optymalizacji wbijające w krzesło i chociaż wiem że to nie koniec zabawy z javą i sama mechaniką gry, to rozbudowa tego artykułu będzie trwać nadal.

Opis poleceń

Uruchomić grę z dodatkowymi parametrami dodając parametry do skrótu lub do specjalnego pola w wybranym launcherze

Screenshot_320

Użyjemy trybu CMS, jest wielowątkowy i asynchroniczny więc nie powinien wpływać na całą grę jednym wielkim szarpnięciem jak by to robił Parallel.

Znak -XX:+ oznacza AKTYWACJĘ a -XX:- DEZAKTYWACJĘ parametru

  • -XX:+UseConcMarkSweepGC (rodzaj garbage collectora, tzw LOW PAUSE czyli CMS, częsty, szybki, małe szarpnięcia)
  • -XX:+UseParNewGC (parametry powyższego GC, próba zapewnienia responswyności aplikacji, mniejsza agresja GC, wielowątkowy, najwydajniejszy przy wielordzeniach, automatycznie dodawana przy UseConcMarkSweepGC )
  • -XX:ParallelGCThreads=2 (można dopisać więcej, zależne od rdzeni w naszym pc, domyślnie jest 1)
  • -XX:UseSSE=4 (używać wtedy kiedy nasz CPU wspiera polecanie SSE 4 – do sprawdzenia z Aida64)
  • -XX:+AggressiveOpts (zezwolenie na parametry optymalizacyjne)
  • -XX:MaxPermSize=128m (miejsce na większą część kodu gry, klasy, metody które sa prawie zawsze potrzebne – garbage collector omija to miejsce, mowa o błędzie z porologu)
  • -XX:PermSize=128m (tak jak wyżej, ale żeby nie męczyć JVM analizą)
  • -Xmn128m (rozmiar pamięci dla młodych obiektów które garbage collector pomija przez jakiś czas)
  • -Xmx5120m (maksymalna pamieć przydzielona, dążąca)
  • -Xms1024m (minimalna pamięć – zarezerwowana od razu po uruchomieniu)
  • -XX:+UnlockExperimentalVMOptions – (zezwolenie na nieoficjalne parametry testowe)
  • -XX:-UseFastEmptyMethods
  • -XX:-UseFastAccessorMethods
  • -XX:+UseStringCache
  • -XX:+UseCompressedStrings
  • -XX:+OptimizeStringConcat – próba uproszczenia i zoptymalizowania łączenia/tworzenia łańcuchów tekstowych ,przykład poniżej. Bez optymalizacji : 15 sek, Z optymalizachją: 5 sek (w przykładowym algorytmie)
  • -XX:+UseNUMA – uruchomienie wsparcia dla NUMA [Non-Uniform Memory Access] pozwala na lepsze zarządzanie pamięcią procesora i zależy od aktualnej architektury Twojego systemu, stara się przenosić mniejsze kawałki zaalokowanej pamięci, raczej testowe użycie
  • -XX:+UseLargePages
  • -XX:+UseG1GC – alternatywa dla CMS, można próbować 

Dla porównania, używanie XX:UseParallelOldGC powoduje opóźnienia z powodu czyszczenia na poziomie  750ms gdzie przy CMS te opóźnienie wacha się w granicy 65ms, natomiast dla G1 może spać nawet do 50ms. (brak testów z mojej strony).

Jeżeli chcecie dokonać własnych analiz GC to wystarczy dodać -XX:+PrintGCTimeStamps -Xloggc:/analizy/gc-test.log -XX:+PrintGCDetails

 

Types-of-Java-Garbage-Collectors3_th_thumb

Zasady działań Garbage Collectorów

Konfiguracje

Użycie 2GB RAM
javaw -Xmx2048m -Xms1024m -jar “C:\<ścieżka>\Minecraft.exe”

Użycie 3GB RAM
javaw -Xmx3072m -Xms1536m -jar “C:\<ścieżka>\Minecraft.exe”

Użycie 4GB RAM
javaw -Xmx4096m -Xms2048m -jar “C:\<ścieżka>\Minecraft.exe”

Użycie 8GB RAM
javaw -Xmx8192m -Xms4096m -jar “C:\<ścieżka>\Minecraft.exe”

Polecane, industrializacja i automatyzacja rozgrywki

Żaden inżynier, fanatyk automatyzacji i procesów nie ma prawa obejść się bez poniższych modów, te zmieniają całkowicie opinię na temat samego minecrafta która bywa różna i raczej negatywna, nakręcana przez dzieciaków grających w wersje podstawową robiących niepotrzebny smród w sieci . Programowanie w grze, układy logiczne, optymalizacje, zarządzanie – to to czego brakowało nam w tej grze, wszystkie te potrzeby zapewniają poniższe mody które polecam wszystkim szukających rozrywki na co najmniej 3 miesiące rozwoju technologicznego, a które gdybym mógł to bym stosował do nauki :)

FTB  – Feed The Beast –  jako zlepek wielu modów industrialnych, logicznych bez konieczności ręcznej konfiguracji, wypromowana przez gracza Direwolf20
Resonant Rise, ATLauncher – Kolejny mod na fundamentach FTB ale o jeszcze większym natężeniu modów (przekraczającym 200!).  Z powodu ekstremalnej rozbudowy możliwości będziesz potrzebował lepszego sprzęu i masy czasu na opanowanie chociaż połowy możliwości.

 

industrial minecraft

9161221877_14e20fc5ab_o

cYByGBG

Zasoby

Dyskusja na temat optymalizacji mc : http://www.sk89q.com/2013/03/improving-your-minecraft-servers-performance/

Figure-4

przykład pracy GC

Ten wpis został opublikowany w kategorii Ideas i oznaczony tagami , , , . Dodaj zakładkę do bezpośredniego odnośnika.

4 odpowiedzi na „Optymalizacja Minecraft oraz Java – więcej fps, mniej zacięć

  1. hadew pisze:

    Fajanie że jest ktoś taki jak ty . Napisałeś jak ustawić mc na max fps i fajnie.niedawno kupiłem sobie procka z xeona ale zapomniałem że Mc chodzi na jednym rdzeniu a tu piszesz że mozna to ustawić wielkie dzięki :D

  2. mrmucha pisze:

    Ciesze się, że udało mi się pomóc chociaż trochę :)

  3. H_Brunner pisze:

    Rewelacja, po prostu brak mi słów! W pełni zgadzam się również ze stwierdzeniem, że Minecraft jest najbardziej niedocenianą grą na świecie. Jego potencjał, nawet bez modów jest olbrzymi… i absolutnie nieznany 99% graczy.

  4. Remq pisze:

    -Xmx5G -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:-UseAdaptiveSizePolicy -Xmn128M -XX:PermSize=1G -XX:ParallelGCThreads=4 -Xms4G Na 8 gb ram wystarcza (Argumenty pod HUSBOX 4)

    Dla mnie bez optifine gra laguje :(
    Na tych argumentach ale HUSBOX 4 max 70 fps min 30 fps (Chyba dobrze co nie?

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Rozwiąż zagadkę aby kontynuować * Time limit is exhausted. Please reload CAPTCHA.