总是有人不看完就跑来问我,所以把常见问题及其解决办法放到最上面
常见问题
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

Forge的报错

Fabric的报错

Paper的报错

Spigot的报错
只要出现了以上图片中类似的报错,就意味着你需要使用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开头的那一条,其他部分都是起辅助作用的,比如设置cmd窗口标题、自动重启等
这里拿一个典型的开服指令举例 java -Xmx2G -Xms2G -jar server.jar nogui
这里的 server.jar 是示例,实际使用时请手动改成核心jar的名字
Java
橙色字 java 意为使用可执行文件java,一般java需要在path中(设置path linux win),如果需要指定使用的java的话需要修改path中的java或者使用绝对路径
脚本使用绝对路径指定使用的java(点击展开)
以下的红字为修改的内容
如果你已经有开服命令了,只需要单独替换开头的 java
windows
假设java路径位于 C:\Program Files\Java\jdk1.8.0_301\bin\java
一般的脚本 java -Xmx2G -Xms2G -jar server.jar nogui
需要改为 "C:\Program Files\Java\jdk1.8.0_301\bin\java" -Xmx2G -Xms2G -jar server.jar nogui
linux(不知道是啥的不需要看)
假设java路径位于 /usr/local/jdk1.8.0_301/bin/java
一般的脚本 java -Xmx2G -Xms2G -jar server.jar nogui
需要改为 /usr/local/jdk1.8.0_301/bin/java -Xmx2G -Xms2G -jar server.jar nogui
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
编辑脚本
右键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