mirror of
https://github.com/postyizhan/NitWikit.git
synced 2025-03-07 16:56:57 +08:00
启动脚本讲解
This commit is contained in:
parent
95f90c111d
commit
d95dc50f90
122
docs/准备工作/基础知识/什么是启动脚本.md
Normal file
122
docs/准备工作/基础知识/什么是启动脚本.md
Normal file
@ -0,0 +1,122 @@
|
||||
sidebar_position: 6
|
||||
---
|
||||
|
||||
# 什么是启动脚本
|
||||
|
||||
启动脚本主要部分就是设置 Java 参数设置。对于 Windows 服务器来说,启动脚本是 `.bat` 后缀的文件,对 Linux 服务器而言,启动脚本是 `.sh` 后缀的文件。
|
||||
|
||||
`sh` 和 `bat` 是两种不同操作系统环境下用于执行脚本的文件扩展名,它们的主要区别在于运行环境、语法的不同:
|
||||
|
||||
## SH (Shell Script)
|
||||
|
||||
* 语法: SH脚本使用Shell命令和控制结构,支持条件判断、循环、函数定义等高级编程特性。
|
||||
* 执行方式: 在终端通过 `./script.sh` 或 `sh script.sh` 来执行(确保脚本具有执行权限)。
|
||||
|
||||
## BAT (Batch File)
|
||||
|
||||
* 语法: BAT脚本包含一系列DOS命令和批处理命令,支持简单的条件判断和循环,但相比SH脚本,其功能和灵活性较低。
|
||||
* 执行方式: 双击文件或者在命令提示符下输入 `script.bat` 来执行。
|
||||
|
||||
# 什么是启动参数
|
||||
|
||||
启动参数(也称 Flag)主要分为3类:
|
||||
|
||||
* 标准参数(-):所有的 JVM 实现都必须实现这些参数的功能,而且向后兼容;
|
||||
* 非标准参数(-X):默认 JVM 实现这些参数的功能,但是并不保证所有 JVM 实现都满足,且不保证向后兼容;
|
||||
* 非Stable参数(-XX):此类参数各个 JVM 实现会有所不同,将来可能会随时取消,需要慎重使用;
|
||||
|
||||
以本人经常使用的基于 Aikar Flag 举个例子:
|
||||
|
||||
```bash
|
||||
@ECHO OFF
|
||||
java -Xms12G -Xmx12G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -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 -DPaper.printStacktraceOnBadPluginClassAccess=false -Dpaper.alwaysPrintWarningState=false -Duser.timezone=GMT+08 -Dfile.encoding=UTF-8 -Xlog:async --enable-preview --add-opens=java.base/java.lang=ALL-UNNAMED --add-modules=jdk.incubator.vector -jar 核心名.jar nogui
|
||||
pause
|
||||
```
|
||||
|
||||
有点长,但是我会一个个讲解他们的作用
|
||||
|
||||
## 基础
|
||||
|
||||
```bash
|
||||
java -Xms12G -Xmx12G -jar 核心名.jar nogui
|
||||
```
|
||||
|
||||
| 参数|说明 |
|
||||
| :-----------* | :-----------* |
|
||||
| -Xmx[size] | 设置最大内存大小,默认为物理内存的1/4或者1G,需大于2M,可以指定单位K/M/G|
|
||||
| -Xms[size] | 设置最小内存大小,默认为物理内存的1/64,需大于1M |
|
||||
| -jar | 为 Java 指定需要运行的 Jar 程序 |
|
||||
| nogui | 关闭服务器 GUI,少量性能提升,大多数人不需要用到 |
|
||||
|
||||
:::info
|
||||
|
||||
1. 无论什么时候,分配内存时一定要多预留15%左右内存,如服务器还剩余 10G 内存, 不要将 -Xms 设置到大于 9G 的内存,否则会很危险。
|
||||
2. 在 G1GC 模式下,尽量保证 Xmx = Xms 因为如果二者不同 JVM 需要更多的内存时候,JVM需要申请更多内存,这个过程的耗时会导致顿卡。
|
||||
|
||||
:::
|
||||
|
||||
|
||||
## 性能相关配置
|
||||
|
||||
我们这里使用的内存回收器为 `G1 (Garbage First)` ,所以我们要在启动参数中加上 `-XX:+UseG1GC` ,这样我们就能使用该回收器了
|
||||
|
||||
光设置使用该回收器也不行,还要对他进行一些配置,下面就会对配置参数进行讲解,你并不需要完全了解下面参数的意义与说明,可以跟着我的推荐值进行设置。
|
||||
|
||||
下面是G1 GC的所有的开关选项的列表:
|
||||
|
||||
| 参数 | 说明 |
|
||||
| :----------------------------------- | :----------------------------------------------------------- |
|
||||
| -XX:+UseG1GC | 使用 G1 GC |
|
||||
| -XX:UnlockExperimentalVMOptions | 以下某些选项需要开启 |
|
||||
| -XX:G1NewSizePercent | 这些是重要的。在 CMS 和其他世代中,调整 New Generation 会导致 FIXED SIZE New Gen,并且通常通过使用 -Xmn 进行显式大小设置来完成。现在,您可以为新一代产品指定总体所需范围的百分比。通过这些设置,我们告诉 G1 不要对新一代使用默认的 5%,而是给它 40%!Minecraft 具有极高的内存分配率,在 800 名玩家的服务器上每秒至少 30 兆字节!这主要是短期对象(块位置)现在,这意味着MC REALLY需要更多地关注新一代,才能支持这种分配率。如果你的新一代太小,你将每秒运行1-2+次新一代集合,这真的很糟糕。您将有如此多的暂停,以至于 TPS 有遭受损失的风险,并且服务器将无法跟上 GC 的成本。然后结合对象现在会更快地升级的事实,从而导致您的旧一代增长得更快。给定更多的 NewGen,我们能够减慢 Young Gen 集合的间隔,从而为短寿命对象提供更多时间英年早逝,并且总体上更有效的 GC 行为。 |
|
||||
| -XX:MaxGCPauseMillis=n | 设置一个暂停时间期望目标,这是一个软目标,JVM 会近可能的保证这个目标 |
|
||||
| -XX:+ParallelRefProcEnabled | 优化 GC 进程,使用多个线程进行弱引用检查。 |
|
||||
| -XX:G1RSetUpdatingPauseTimePercent=5 | 默认值为暂停更新 Rset 期间花费的时间的 10%,将其减少到 5%,以使更多时间并发以减少暂停持续时间。 |
|
||||
| -XX:G1MixedGCLiveThresholdPercent | 控制何时将混合 GC 中的区域包含在 Young GC 集合中,从而保持 Old Gen 整洁,而无需执行正常的 Old Gen GC 集合。当您的记忆力低于此百分比时,旧一代甚至不会包含在“混合”集合中。混合不像完整的旧集合那么重,因此对旧集合进行小的增量清理可以减少内存使用量。默认值为 65 到 85,具体取决于 Java 版本,我们将设置为 90,以确保我们尽可能快地回收旧代中的垃圾,以保留尽可能多的可用区域。我的旧旗帜集在 35 时有这个,这是一个错误。我把这面旗帜颠倒过来的意图,因为我认为 35 就是 65 的作用。您不应该将 35 用于此数字。 |
|
||||
| -XX:G1ReservePercent=20 | MC:最新版本中的内存分配率真的很疯狂。我们冒着可怕的“太空耗尽”的风险,没有足够的可用内存来移动数据。这样可以确保等待使用更多内存进行此操作。默认值为 10,因此我们再给它 10 个。 |
|
||||
| -XX:MaxTenuringThreshold=1 | Minecraft的内存分配率非常高。在那段记忆中,大部分是在伊甸园一代中恢复的。但是,瞬态数据将溢出到幸存者中。最初玩完全删除幸存者并取得了不错的结果,但确实导致瞬态数据进入旧数据,这并不好。Max Tenuring 1 确保我们不会将瞬态数据提升到老一代,但任何在垃圾回收 2 次传递中幸存下来的数据都将被视为寿命更长。这样做可以大大减少 Young Collections 中的暂停时间,因为在 Survivor 空间中为永久对象复制数据最多 15 次确实需要大量时间才能获得实际的旧内存。理想情况下,GC 引擎将跟踪对象的平均年龄并更快地保留数据,但这不是它的工作方式 |
|
||||
| -XX:AlwaysPreTouch | 在进程启动时获取内存设置和保留,确保其连续性,从而进一步提高其效率。这提高了操作系统内存访问速度。强制使用透明大页面 |
|
||||
| -XX:+DisableExplicitGC | 许多插件认为他们知道如何控制内存,并尝试调用垃圾回收。执行此操作的插件会触发完整的垃圾回收,从而触发大规模的延迟峰值。此标志禁止插件尝试执行此操作,从而保护您免受其错误代码的侵害。 |
|
||||
| -XX:G1MixedGCCountTarget=4 | 默认值为 8。因为我们的目标是收集速度较慢,使用旧代使用量较少,所以尽量更快地回收旧代内存,以避免用完旧内存。 |
|
||||
| -XX:G1HeapRegionSize=8M | 默认值为自动计算。对于 Minecraft 来说超级重要,尤其是 1.15,因为在内存不足的情况下,默认计算在大多数情况下会太低。任何此大小的一半(4MB)的内存分配都将被视为“巨大”,并直接提升到老一代,并且更难释放。如果你允许 java 使用默认值,你将被销毁,你的内存中有很大一部分被视为 Humongous。 |
|
||||
| -XX:SurvivorRatio=32 | 由于我们大幅减少了 MaxTenuringThreshold,因此我们将大幅减少幸存者空间的使用。这样可以释放更多区域供 Eden 使用。 |
|
||||
|
||||
|
||||
### 其他参数
|
||||
|
||||
## 配置好的启动参数
|
||||
|
||||
**不要忘记改最后的“核心名.jar!**
|
||||
**不要忘记改最后的“核心名.jar!**
|
||||
**不要忘记改最后的“核心名.jar!**
|
||||
|
||||
重要的事情说三遍xd
|
||||
|
||||
建议使用下面的脚本,将`-Xms`与`-Xmx`的大小设置相同
|
||||
|
||||
```bash
|
||||
@ECHO OFF
|
||||
java -server -Xms8g -Xmx8g -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:+UseG1GC -XX:SurvivorRatio=6 -XX:G1ReservePercent=15 -XX:ParallelGCThreads=4 -XX:ConcGCThreads=1 -XX:InitiatingHeapOccupancyPercent=40 -jar 核心名.jar
|
||||
pause
|
||||
```
|
||||
|
||||
#### 如何设置自动重启
|
||||
|
||||
对于 Windows `start.bat` 可参考的脚本如下:
|
||||
|
||||
```bash
|
||||
@ECHO OFF
|
||||
:start
|
||||
java ...... -jar 核心名.jar
|
||||
goto start
|
||||
```
|
||||
|
||||
对于 Linux `start.bat` 可参考的脚本如下:
|
||||
|
||||
```bash
|
||||
while [ true ]; do
|
||||
java ...... -jar 核心名.jar
|
||||
echo 服务器自动重启中
|
||||
echo 同时按下 CTRL + C 关服.
|
||||
done
|
||||
```
|
@ -1,5 +1,5 @@
|
||||
---
|
||||
sidebar_position: 6
|
||||
sidebar_position: 5
|
||||
---
|
||||
|
||||
# 什么是插件?
|
||||
|
@ -1,5 +1,5 @@
|
||||
---
|
||||
sidebar_position: 5
|
||||
sidebar_position: 4
|
||||
---
|
||||
|
||||
# 什么是模组?
|
||||
|
@ -1,5 +1,5 @@
|
||||
---
|
||||
sidebar_position: 5
|
||||
sidebar_position: 3
|
||||
---
|
||||
|
||||
# 如何评判服务器卡顿
|
||||
|
Loading…
Reference in New Issue
Block a user