Peršokti į turinį

Serverio kėlimas į RAMDISK ir paleidėjo kodo optimizavimas


ProGreen

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3933 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Aprašymas

Dauguma nepatyrusių žaidėjų/administratorių yra įsitikinę, jog serveris striginėti gali tik dėl kelių, kvailų priežasčių, kaip dėl prasto hostingo, ar "kreivų" įskiepių... Bet daugelis nežino, jog didžiausia dalį serverio resursų sunaudoja žemėlapis (apie 50-70%), dėl to, pakankamai galinguose serveriuose, su sutvarkytais įskiepiais, žaidžiant lyg ir ne per daugiausiai žaidėjų, pradedamas jausti striginėjimas... Taip yra dėl to, jog serveris pastoviai turi įkrauti iš HDD į RAMDISK žemėlapio dalį kurioje yra žaidėjas (-ai), o vėliau ją iškrauti, kas reikalauja labai daug serverio resursų (ypač RAM atminties), taigi, įkėlus serverį į RAMDISK, jo nebereikės pastoviai užkraudinėti ir iškraudinėti, dėl to bus sutaupoma itin daug resursų ir stiriginėjimo galimybė ženkliai sumažės. Tai pat tikriausiai irgi ne per daugiausiai kam žinoma tai, jog serverio paleidimo eilutė yra skirta ne tik paleisti serverį, bet gali būti panaudota ir jo optimizacijai, taigi, šioje pamokoje naudosime optimizuota/pagerinta serverio paleidimo eilutę... Na, tai pradedam!

Veiksmai

  • Iš pradžių susikurkite direktorija kurioje bus laikomas serveris ir ji būtų prieinama RAMDISK funkcijai, ji būtinai turi būti jūsų serverio "/home/" direktorijoje, tarkim "/home/username/minecraft_ramdisk" ir į ją įkeliame visus serverio failus iš ankstesnės jų buvimo vietos. Tai pat šalia "minecraft_ramdisk" direktorijos, sukurkite ir papildomas "minecraft" bei "minecraft_backups" direktorijas.
  • Jog prijungtumėte RAMDISK funkcija, koreguokite /etc/fstab/ failą. Tai padarysite konsolėje (PuTTy) parašę:
    nano /etc/fstab


  • Tada pridėkite eilutę, tik iš pradžių įsitikinkite jog kelias iki Minecraft serverio direktorijos yra teisingas.
    tmpfs /home/username/minecraft_ramdisk tmpfs defaults,size=512m 0 0

    Dėmesio! Serverio direktorijos dydis turi būti mažesnis už kode nurodytą direktorijos priėjimo dydį (size=512m), na ir žinoma, kode nurodyta dydį galite keisti priklausomai nuo turimo RAM kiekio.

  • Perkraukite savo VPS/DS serverį, dabar RAMDISK funkcija bus įjungta kiekviena karta paleidus VPS'ą/DS'ą. Serverį perkrauti galite parašę:
    reboot


  • Dabar eikite į "/etc/init.d/" direktorija ir sukurkite failą pavadinimu "minecraft" (jokios galūnės failas turėti neturi, tiesiog "minecraft" ir viskas) ir į sukurta failą įrašykite šį serverio paleidimo kodą:
    #Nustatymai
    JARFILE='craftbukkit-beta_1.4.6-R0.3.jar'
    USERNAME="minecraft"
    MCSTORE="/home/$USERNAME/minecraft"
    MCPATH="/home/$USERNAME/minecraft_ramdisk"
    CPU_COUNT=1
    INVOCATION="java -Xmx2048M -Xms2048M -server -jar $JARFILE -o false"
    BACKUPPATH="/home/$USERNAME/minecraft_backups/"
    WORLD=Asgarde
    
    
    as_user() {
    if [ "`whoami`" == "$USERNAME" ] ; then
    bash -c "$1"
    else
    su - $USERNAME -c "$1"
    fi
    }
    
    mc_status() {
    ps aux |grep -F -v grep|grep -F -v SCREEN|grep -F --quiet $JARFILE
    return $?
    }
    
    mc_start() {
    if mc_status; then
    echo "Bandymas paleisti nesekmingas, $JARFILE siuo metu jau veikia!"
    else
    echo "Serverio platformos $JARFILE failas siuo metu neveikia ... Serveris paleidziamas."
    if [ -d $MCSTORE/$WORLD.bak ]; then
    echo "paskutinis $WORLD.bak failas vis dar egzistuoja, galimos kritines klaidos! Patikrinkite serverio zemelapio failus!!!"
    exit 1
    fi
    cd $MCPATH
    if [ ! -f "$MCPATH/$JARFILE" ]; then
    echo "RAMDISK tuscias... pradedama."
    as_user "cp -R $MCSTORE/* $MCPATH/"
    fi
    as_user "cd $MCPATH && screen -dmS minecraft $INVOCATION"
    sleep 7
    if mc_status; then
    echo "$JARFILE jau veikia."
    else
    echo "Nepavyko paleisti $JARFILE."
    fi
    fi
    }
    
    mc_saveoff() {
    if mc_status; then
    echo "$JARFILE is running... suspending saves"
    TO_SCREEN="screen -p 0 -S minecraft -X eval 'stuff "
    as_user "$TO_SCREEN \"say PRADEDAMA ISSAUGOTI SERVERIO ATSARGINE KOPIJA. Galimas serverio striginejimas...\"\015'"
    as_user "$TO_SCREEN \"save-off\"\015'"
    as_user "$TO_SCREEN \"save-all\"\015'"
    sync
    sleep 10
    else
    echo "$JARFILE neveikia. Serverio atsargines kopijos issaugojimas neymanomas."
    fi
    }
    
    mc_saveon() {
    if mc_status; then
    echo "$JARFILE siuo metu veikia... ijungiamas pasaulio issaugojimas"
    TO_SCREEN="screen -p 0 -S minecraft -X eval 'stuff "
    as_user "$TO_SCREEN \"save-on\"\015'"
    as_user "$TO_SCREEN \"say SERVERIO ATSARGINE KOPIJA SEKMINGAI ISSAUGOTA. Serveris turetu vel veikti normaliai...\"\015'"
    else
    echo "$JARFILE neveikia. Neymanoma pratesti issaugojimo."
    fi
    }
    
    mc_stop() {
    if mc_status; then
    echo "$JARFILE siuo metu veikia... serveris sustabdomas."
    TO_SCREEN="screen -p 0 -S minecraft -X eval 'stuff "
    as_user "$TO_SCREEN \"say SERVERIS ISSIJUNGS UZ 5 SEKUNDZIU. Issaugomas zemelapis...\"\015'"
    as_user "$TO_SCREEN \"save-all\"\015'"
    sleep 5
    as_user "$TO_SCREEN \"stop\"\015'"
    sleep 5
    else
    echo "$JARFILE siuo metu neveikia."
    fi
    
    if mc_status; then
    echo "$JARFILE nepavyko isjungti... serveris vis dar veikia."
    else
    echo "$JARFILE sekmingai isjungtas."
    fi
    }
    
    
    mc_update() {
    if mc_status; then
    echo "$JARFILE siuo metu veikia! Atnaujinti veikiancio serverio NEGALIMA."
    else
    MC_SERVER_URL=http://minecraft.net/`wget -q -O - [url="http://www.minecraft.net/download.jsp"]http://www.minecraft.net/download.jsp[/url] | grep minecraft_server.jar\</a\> | cut -d \" -f 2`
    as_user "cd $MCPATH && wget -q -O $MCPATH/minecraft_server.jar.update $MC_SERVER_URL"
    if [ -f $MCPATH/minecraft_server.jar.update ]; then
    if `diff $MCPATH/$JARFILE $MCPATH/minecraft_server.jar.update >/dev/null`
    then
    echo "You are already running the latest version of $JARFILE."
    else
    as_user "mv $MCPATH/minecraft_server.jar.update $MCPATH/$JARFILE"
    echo "Serveris sekmingai atnaujintas."
    fi
    else
    echo "Serverio atnaujinimo atsiusti nepavyko."
    fi
    fi
    }
    
    mc_backup() {
    echo "Daroma atsargine serverio kopija"
    as_user "tar zcf $BACKUPPATH/MCBKUP_`date "+%Y.%m.%d-%H"`.tar.gz $MCSTORE"
    echo "Atsargine serverio kopija sekmingai padaryta"
    }
    
    mc_disksaverun() {
    if mc_status; then
    echo "Perkeliama is RAMDISK i HDD."
    if [ ! -f $MCPATH/$JARFILE ]; then
    echo "Klaida... Serveris nera RAMDISK'e"
    else
    if [ -d $MCSTORE/$WORLD.bak ]; then
    echo "last $WORLD.bak still exist, crashed warning! manual check required!!!"
    exit 1
    fi
    if [ -d $MCSTORE/$WORLD ]; then
    as_user "mv $MCSTORE/$WORLD $MCSTORE/$WORLD.bak"
    fi
    
    TO_SCREEN="screen -p 0 -S minecraft -X eval 'stuff "
    as_user "$TO_SCREEN \"save-off\"\015'"
    as_user "$TO_SCREEN \"save-all\"\015'"
    as_user "cp -R $MCPATH/* $MCSTORE/"
    as_user "$TO_SCREEN \"save-on\"\015'"
    
    if [ -d $MCSTORE/$WORLD.bak ]; then
    as_user "rm -r $MCSTORE/$WORLD.bak"
    fi
    fi
    else
    echo "Tarnyba naveikia"
    fi
    
    }
    
    mc_disksavehalt() {
    echo "Perkeliama is RAMDISK i HDD."
    if [ ! -f $MCPATH/$JARFILE ]; then
    echo "Klaida... Serveris nera RAMDISK'e"
    else
    if [ -d $MCSTORE/$WORLD.bak ]; then
    echo "last $WORLD.bak still exist, crashed warning! manual check required!!!"
    exit 1
    fi
    if [ -d $MCSTORE/$WORLD ]; then
    as_user "mv $MCSTORE/$WORLD $MCSTORE/$WORLD.bak"
    fi
    
    echo "Issaugoma, konsoles sesija isjungta"
    as_user "cp -R $MCPATH/* $MCSTORE/"
    
    if [ -d $MCSTORE/$WORLD.bak ]; then
    as_user "rm -r $MCSTORE/$WORLD.bak"
    fi
    fi
    }
    
    
    #Start-Stop here
    case "$1" in
    start)
    mc_start
    ;;
    stop)
    mc_stop
    mc_disksavehalt
    ;;
    restart)
    mc_stop
    mc_disksavehalt
    mc_start
    ;;
    update)
    mc_stop
    mc_backup
    mc_update
    mc_start
    ;;
    backup)
    mc_disksaverun
    mc_saveoff
    mc_backup
    mc_saveon
    ;;
    disksavehalt)
    mc_disksavehalt
    ;;
    disksaverun)
    mc_disksaverun
    ;;
    status)
    if mc_status; then
    echo "$JARFILE siuo metu veikia."
    else
    echo "$JARFILE siuo metu neveikia."
    fi
    ;;
    *)
    echo "Naudokite: /etc/init.d/minecraft {start|stop|update|backup|status|restart|disksaverun}"
    exit 1
    ;;
    esac


  • Padarykite failą pilnai prieinamą konsolėje įrašę:
    chmod a+x /etc/init.d/minecraft


  • Galite įjungti rsync funkcija (nebūtina), konsolėje suvedę:
    "rsync -r -t $MCPATH/ $MCSTORE/"


  • Įrašykite crontab įrašą jog jūsų serverio failai būtų išsaugoti ir prieinami, bei redaguojami.
    crontab -e

    ir tada pridėkite šias eilutes:

    */5 * * * * /etc/init.d/minecraft disksaverun
    20 */6 * * * /etc/init.d/minecraft backup


  • Dabar eikite į "root" direktorija ir susikurkite ".sh" failą, pavyzdžiui "start.sh", į jį įrašykite (šis žingsnis reikalingas tam, jog galėtumėte lengvai paleisti serverį):
    /etc/init.d/
    sh minecraft start
    screen -r


  • Na tai va, jei viską atlikote teisingai, tai viskas, baigta, serverį dabar galite paleisti vos prisijungę prie konsolės (būdami "root" direktorijoje) ir suvedę:
    sh start.sh


Dėmesio! RAMDISK'e esantys failai neišsisaugo ir po VPS'o/DS'o perkrovimo dingsta, dėl to turite daryti serverio atsargines kopijas (backup'us), jog paskiau, perkrovus VPS'a/DS'a galėtumėte sugrąžinti serverio failus atgal. Taigi, paprasčiausias, rankinis būdas darytis atsargines kopijas yra toks:

  • Susikurkite failą "root" direktorijoje pavadinimu "backup.sh" ir į jį įrašykite:
    /etc/init.d/
    sh minecraft backup
    screen -r


  • Dabar atsargine serverio kopija galite pasidaryti konsolėje, "root" direktorijoje parašę:
    sh backup.sh

    Atsarginė kopija susikurs "/home/username/minecraft_ramdisk" direktorijoje ir jog įkeltumėte atsarginę kopija turite įdėti gauta ".tar.gz" failą į "/home/username" ir jį išarhyvuoti.

Na tai va, viskas, tikiuosi ši pamoka pravers mūsų Minecraft bendražygiams! Sėkmės!

Jei turėsite kokių klausimų, ar pastebėjimų, rašykite komentaruose!

Pamoką kūrė ProGreen

Be leidimo kopijuoti draudžiama!

Nuoroda į komentarą
Dalintis per kitą puslapį

Progreenas tobuleja malaci malaci :)

Pamoka vertinga ir ne vien tik minecraft'o serverių administratoriams, bet apskritai visiems dirbantiems su didesniais VPS'ais. Good job, Progreen. ;)

O Zakeri, tu kartais nesakei, kad traukies ir važiuoji į anglus? :D :D

Ačiū už tokius gerus komentarus, maniau jau nieko nesulauksiu, o tiek krušaus kad eina **... Beje, wersai, ilgai dar reiks laukt to mcslime nulaužimo? :?

Nuoroda į komentarą
Dalintis per kitą puslapį

Tarp kitko - ne... Buvau išmestas dėl kažkokių labai neaiškių priežasčių... Taigi, jei projekto neuždarysit jūs, damušiu ir pats... Na sėkmės tada tvarkantis maitblokį, ar kas ten tau parėję...

Visiškai offtopic klausimas, Tomą Tamulevičių pažysti? :D

Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3933 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Prisijungti prie diskusijos

Palikti atsakymą galite iš karto, o užsiregistruoti vėliau. Jeigu jau turite paskyrą mūsų forume, Prisijunkite.

Svečias
Atsakyti šioje temoje...

×   Įklijuotas tekstas turi teksto formatavimą.   Pašalinti teksto formatavimą

  Galimi tik 75 veidukai.

×   Nuoroda buvo automatiškai įterpta.   Įterpti nuorodą paprastai

×   Jūsų ankstesnis pranešimas buvo atkurtas.   Išvalyti redaktorių

×   Jūs negalite įkelti nuotraukas tiesiogiai.Įkelkite arba įdėkite nuotraukas iš URL.

  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


×
×
  • Sukurti naują...