总是有人不看完就跑来问我,所以把常见问题及其解决办法放到最上面
常见问题
Unrecognized VM option ‘xxx’
这里是你使用的开服脚本中的某个参数,不被你的Java接受
xxx可能是 +AggressiveOpts
也可能是 +UseCompressedOops
或者是你启动脚本中的其他不被接受的参数
解决办法:
将开服脚本中的包含xxx的那一段参数删除
Unrecognized VM option '+AggressiveOpts'
就删除 -XX:+AggressiveOpts
Unrecognized VM option ' +UseCompressedOops '
就删除 -XX:+UseCompressedOops
Could not reserve enough space for object heap
设置了过大的内存
解决办法:
将开服脚本中的内存调小(注意,32位java的可用内存受限制,只能使用最大1.4G到1.6G的内存,解决办法是更换64位的Java)
将参数换成 -Xmx1G -Xms1G
内存分配一般是给系统所有可用内存大小的2/3(给系统和其他应用留出空间),如果你电脑的内存低于1G,就不要想着开服了
页面文件太小,无法完成操作
设置了过大的内存
解决办法:
将开服脚本中的内存调小(注意,32位java的可用内存受限制,只能使用最大1.4G到1.6G的内存,解决办法是更换64位的Java)
将参数换成 -Xmx1G -Xms1G
内存分配一般是给系统所有可用内存大小的2/3(给系统和其他应用留出空间),如果你电脑的内存低于1G,就不要想着开服了
1.17及以后版本使用了低于Java16的Java
只要出现了以上图片中类似的报错,就意味着你需要使用Java16
解决办法:(二选一)
- 在启动脚本中指定Java路径(推荐)(方法见上面指定Java的脚本)
- 卸载其他版本的Java,只留Java16(不推荐)
1.16及以前版本使用了高于(包括)Java16的Java
只要出现了以上图片中类似的报错,就意味着你需要使用Java16之前的版本(不包括Java16,Java8/11等LTS版本都是不错的选择)
解决办法:(二选一)
- 在启动脚本中指定Java路径(推荐)(方法见上面指定Java的脚本)
- 卸载其他版本的Java,只留Java8/11(不推荐)
注意
本教程中均以server.jar作为核心名字,实际使用时请手动改成你的服务端核心jar名字
本教程中均以server.jar作为核心名字,实际使用时请手动改成你的服务端核心jar名字
本教程中均以server.jar作为核心名字,实际使用时请手动改成你的服务端核心jar名字
本教程中均以server.jar作为核心名字,实际使用时请手动改成你的服务端核心jar名字
本教程中均以server.jar作为核心名字,实际使用时请手动改成你的服务端核心jar名字
本教程中均以server.jar作为核心名字,实际使用时请手动改成你的服务端核心jar名字
本教程中均以server.jar作为核心名字,实际使用时请手动改成你的服务端核心jar名字
再看不到的跑来问我就要做好挨喷的准备
开服需要安装Java (64位机器装64位Java)
安装Java教程:http://e404.top:9999/?p=379
通用
开服所用的指令就一条,一般是java开头的那一条,其他部分都是起辅助作用的,比如设置cmd窗口标题、自动重启等
这里拿一个典型的开服指令举例 java -Xmx2G -Xms2G -jar server.jar nogui
这里的 server.jar
是示例,实际使用时请手动改成核心jar的名字
Java
橙色字 java
意为使用可执行文件java,一般java需要在path中(设置path见http://e404.top:9999/?p=372(linux)及http://e404.top:9999/?p=164(win)),如果需要指定使用的java的话需要修改path中的java或者使用绝对路径
JVM参数
红色字 -Xmx2G -Xms2g -jar
是jvm参数
设置jvm参数是开服非常重要的一环,使用的最大内存,最小内存,优化参数等都是jvm参数
-Xmx2G
设置最大可用内存为2G,这里红字的2G可以替换成其他内存大小,单位除了G之外可以用M,例如 -Xmx256M
-Xms2G
设置初始内存为2G,这里红字的2G可以替换成其他内存大小,单位除了G之外可以用M,例如 -Xms256M
-jar
意为通过jar文件启动,后面需要接文件名字,如果后面接的jar文件名字错误或者jar文件损坏则会报错
其他优化参数见 https://aikar.co/2018/07/02/tuning-the-jvm-g1gc-garbage-collector-flags-for-minecraft/
MC服务端参数
紫色字 nogui
意为不显示mc自带的ui界面,不管是否添加此参数,服务端始终会将日志输出至命令行
自带的UI界面效果如下(下图是paper的,和原版略有区别)
Windows
创建脚本
在服务端文件夹新建一个txt文件,将其改名为start.bat
若文件没有显示默认的txt扩展名,请看 http://e404.top:9999/?p=279
编辑脚本
右键bat文件,点击编辑
打开后输入下方的开服代码
如果是新建的脚本,文件>另存为 下方的编码选择ANSI,否则中文会乱码,保存
WIN脚本示例
@ECHO OFF @REM 作者404E set a=0 echo ------------------------------------------------------------------ echo -- -- echo -- 正在启动 -- echo -- -- echo ------------------------------------------------------------------ :start set b = %date:~0,4%.%date:~5,2%.%date:~8,2% %time:~0,2%:%time:~3,2%:%date:~8,2% title 服务端 重启%a%次 上次重启于%b% set date1=%date:~0,4%%date:~5,2%%date:~8,2% set time1=%time:~0,2%%time:~3,2%%time:~6,2% java -Xms2G -Xmx2G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar server.jar nogui set date2=%date:~0,4%%date:~5,2%%date:~8,2% set /a c=%time:~0,2%%time:~3,2%%time:~6,2% - %time1% if %c% LEQ 1 ( if %date2% == %date1% ( echo ------------------------------------------------------------------ echo -- -- echo -- :( 启动异常,请检查启动参数 -- echo -- 或者咨询其他人,按任意键退出 -- echo -- -- echo ------------------------------------------------------------------ pause>null exit ) ) set /a a=%a%+1 echo ------------------------------------------------------------------ echo -- -- echo -- 将在3秒后自动重启 -- echo -- 按任意键跳过等待 -- echo -- 或者直接关闭服务端 -- echo -- -- echo ------------------------------------------------------------------ timeout /T 3 goto start
以上是我用的脚本,优化参数 https://aikar.co/2018/07/02/tuning-the-jvm-g1gc-garbage-collector-flags-for-minecraft/
Linux步骤
创建&编辑脚本
vi start.sh
按i或insert键进入编辑模式
输入下方示例的中的脚本代码
按esc,输入:wq
保存
给予可执行权限
使用 sudo chmod +x start.sh
给脚本添加可执行权限(root用户可不加sudo,直接使用chmod)
脚本示例
#!/bin/bash #作者404E echo '------------------------------------------------------------------' echo '- -' echo '- 开始启动服务端 -' echo '- -' echo '------------------------------------------------------------------' while true; do java -Xms2G -Xmx2G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar server.jar nogui echo '------------------------------------------------------------------' echo '- -' echo '- 服务器将在3秒后重启 -' echo '- 按 ctrl + c 停止服务端 -' echo '- -' echo '------------------------------------------------------------------' for i in $(seq 3 -1 1) do echo -n "·" sleep 1s done echo '' echo '------------------------------------------------------------------' echo '- -' echo '- 开始重启服务端 -' echo '- -' echo '------------------------------------------------------------------' done
以上是我用的脚本,优化参数 https://aikar.co/2018/07/02/tuning-the-jvm-g1gc-garbage-collector-flags-for-minecraft/
重启时自动备份的脚本
#!/bin/bash #作者404E echo '------------------------------------------------------------------' echo '- -' echo '- 开始启动服务端 -' echo '- -' echo '------------------------------------------------------------------' while true; do java -Xms2G -Xmx2G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar server.jar nogui # 备份 echo '------------------------------------------------------------------' echo '- -' echo '- 服务器将在3秒后开始备份 -' echo '- 按 ctrl + c 停止服务端 -' echo '- -' echo '------------------------------------------------------------------' for i in $(seq 3 -1 1) do echo -n "·" sleep 1s done # 备份保留个数 c=5 if [ ! -d "backup" ];then mkdir backup fi rm -rf backup/$c.tar.gz for((i=$c;i>0;i--)); do if [ -f "backup/"$i".tar.gz" ];then mv backup/$i.tar.gz backup/`expr $i + 1`.tar.gz fi done # 创建备份指令,可自行添加文件夹(将#去掉) tar -zcf backup/1.tar.gz world #world_nether world_the_end # 备份结束 echo '------------------------------------------------------------------' echo '- -' echo '- 备份完成 服务器将在3秒后重启 -' echo '- 按 ctrl + c 停止服务端 -' echo '- -' echo '------------------------------------------------------------------' for i in $(seq 3 -1 1) do echo -n "·" sleep 1s done echo '' echo '------------------------------------------------------------------' echo '- -' echo '- 开始重启服务端 -' echo '- -' echo '------------------------------------------------------------------' done
666
!/bin/bash
echo ‘——————————————————————‘
echo ‘- -‘
echo ‘- 开始启动服务端 -‘
echo ‘- -‘
echo ‘——————————————————————‘
while true
do
d=$(date “+%Y.%m.%d %H:%M:%S”)
echo -e “33]0; 服务端 “$d”07″”c”
/home/container/jdk-18.0.2.1/bin/java -jar -Xms2G -Xmx2G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar spigot-1.19.jar nogui
h=$(date “+%H”)
if [ $h -gt 1 ] && [ $h -lt 6 ]; then
echo ‘——————————————————————‘
echo ‘- -‘
echo ‘- 服务器将在3秒后开始备份 -‘
echo ‘- 按 ctrl + c 停止服务端 -‘
echo ‘- -‘
echo ‘——————————————————————‘
i=3
while [ $i -gt 0 ]; do
echo -n “·”
sleep 1s
i=$((i – 1))
done
c=5
if [ ! -d “backup” ]; then
mkdir backup
fi
rm -rf “backup/$c.tar.gz”
i=$c
while [ $i -gt 0 ]; do
if [ -f “backup/$i.tar.gz” ]; then
mv “backup/$i.tar.gz” “backup/$(expr $i + 1).tar.gz”
fi
i=$((i – 1))
done
tar -zcf “backup/1.tar.gz” world #world_nether world_the_end
fi
echo ‘——————————————————————‘
echo ‘- -‘
echo ‘- 服务器将在3秒后重启 -‘
echo ‘- 按 ctrl + c 停止服务端 -‘
echo ‘- -‘
echo ‘——————————————————————‘
i=3
while [ $i -gt 0 ]; do
echo -n “·”
sleep 1s
i=$((i – 1))
done
echo ”
echo ‘——————————————————————‘
echo ‘- -‘
echo ‘- 开始重启服务端 -‘
echo ‘- -‘
echo ‘——————————————————————‘
done
我开服的时候for循环不行我改成这样的了
XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true
请问一下这些功能各有什么作用
优化参数
root@as-terraria:/usr/MinecraftMod# ./start.sh
JVM info: Private Build – 17.0.3 – 17.0.3+7-Ubuntu-0ubuntu0.20.04.1
java.net.preferIPv4Stack=true
Found java version 17.0.3
Exception in thread “main”
java.awt.HeadlessException:
No X11 DISPLAY variable was set,
but this program performed an operation which requires it.
at java.desktop/java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:166)
at java.desktop/java.awt.Window.(Window.java:553)
at java.desktop/java.awt.Frame.(Frame.java:428)
at java.desktop/java.awt.Frame.(Frame.java:393)
at java.desktop/javax.swing.SwingUtilities$SharedOwnerFrame.(SwingUtilities.java:1919)
at java.desktop/javax.swing.SwingUtilities.getSharedOwnerFrame(SwingUtilities.java:1995)
at java.desktop/javax.swing.JOptionPane.getRootFrame(JOptionPane.java:1695)
at java.desktop/javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:874)
at java.desktop/javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:676)
at java.desktop/javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:647)
at net.minecraftforge.installer.SimpleInstaller.launchGui(SimpleInstaller.java:177)
at net.minecraftforge.installer.SimpleInstaller.main(SimpleInstaller.java:147)
root@as-terraria:/usr/MinecraftMod#
这算是java版本过高吧,和上面的图不怎么一样啊
如果是,接下来就指定路径还是别的什么
你应该把start.sh的内容发出来
看内容你应该是在用安装器之类的东西
如果你正在安装forge或者其他的东西,默认是需要桌面环境的,linux上需要gnome或者其他的桌面环境
解决方式有两种
1. 自己电脑上安装好之后打包传到linux上
2. 查看安装器的使用指南(官网或者加-help之类的参数启动)
3. 安装桌面环境
start.sh: 18: start.sh: Syntax error: word unexpected (expecting “do”)
while true
后面加;