jvm 配置

export maxParameterCount="1000"

export acceptCount="1000"

export maxSpareThreads="750"

export maxThreads="1000"

export minSpareTHreads="50"

export URIEncoding="UTF-8"

export JAVA_OPTS="-Djava.library.path=/usr/local/lib -server -Xms5120m -Xmx5120m -XX:MaxPermSize=256m -XX:PermSize=256m -XX:MaxDirectMemorySize=983m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/export/Logs -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSInitiatingOccupancyOnly -XX:NewRatio=2 -Xss256K -XX:ParallelGCThreads=2 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:+CMSParallelRemarkEnabled -XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:/export/Logs/Domains/user.ka.soa.xx.local/server1/logs/jvm/gc.log -Djava.awt.headless=true -Dsun.net.client.defaultConnectTimeout=60000 -Dsun.net.client.defaultReadTimeout=60000 -Djmagick.systemclassloader=no -Dnetworkaddress.cache.ttl=300 -Dsun.net.inetaddr.ttl=300"

这段代码主要用于配置 Tomcat 或其他基于 Java 的 Web 服务器的运行参数,包括线程池、JVM 参数、编码设置等。以下是对每个配置项的详细解释及其默认值:


1. Tomcat 线程池配置

这些参数用于配置 Tomcat 的线程池,以优化并发处理能力。

1.1 maxParameterCount="1000"
  • 意义

    • 设置 HTTP 请求中参数的最大数量为 1000。

    • 防止恶意请求携带过多参数导致服务器资源耗尽。

  • 默认值

    • 通常为 10000(Tomcat 默认值)。
1.2 acceptCount="1000"
  • 意义

    • 设置等待队列的最大长度为 1000。

    • 当所有线程都在处理请求时,新请求会进入等待队列,队列满后新请求将被拒绝。

  • 默认值

    • 通常为 100(Tomcat 默认值)。
1.3 maxSpareThreads="750"
  • 意义

    • 设置最大空闲线程数为 750。

    • 当空闲线程超过这个数量时,Tomcat 会关闭多余的线程以节省资源。

  • 默认值

    • 通常为 50(Tomcat 默认值)。
1.4 maxThreads="1000"
  • 意义

    • 设置线程池的最大线程数为 1000。

    • 表示 Tomcat 最多可以同时处理 1000 个请求。

  • 默认值

    • 通常为 200(Tomcat 默认值)。
1.5 minSpareThreads="50"
  • 意义

    • 设置最小空闲线程数为 50。

    • Tomcat 会始终保持至少 50 个空闲线程,以快速响应新请求。

  • 默认值

    • 通常为 10(Tomcat 默认值)。
1.6 URIEncoding="UTF-8"
  • 意义

    • 设置 URI 编码为 UTF-8。

    • 确保 Tomcat 正确处理 URL 中的非 ASCII 字符。

  • 默认值

    • 通常为 ISO-8859-1(Tomcat 默认值)。

2. JVM 参数配置

这些参数通过环境变量 JAVA_OPTS 传递给 JVM,用于优化 Java 应用程序的性能。

2.1 -Djava.library.path=/usr/local/lib
  • 意义

    • 设置本地库(Native Library)的搜索路径为 /usr/local/lib

    • 用于加载 JNI(Java Native Interface)所需的本地库。

  • 默认值

    • 无默认值,如果不设置,JVM 使用系统默认的库路径。
2.2 -server
  • 意义

    • 启用 JVM 的服务器模式,优化长时间运行的应用程序性能。

    • 适用于生产环境。

  • 默认值

    • 在 64 位系统中默认为 -server,在 32 位系统中默认为 -client
2.3 -Xms5120m
  • 意义

    • 设置 JVM 初始堆大小为 5120MB(5GB)。

    • JVM 启动时会分配这么多内存。

  • 默认值

    • 通常为物理内存的 1/64(具体值取决于系统和 JVM 版本)。
2.4 -Xmx5120m
  • 意义

    • 设置 JVM 最大堆大小为 5120MB(5GB)。

    • JVM 堆内存不会超过这个值。

  • 默认值

    • 通常为物理内存的 1/4(具体值取决于系统和 JVM 版本)。
2.5 -XX:MaxPermSize=256m
  • 意义

    • 设置永久代(Permanent Generation)的最大大小为 256MB。

    • 适用于 Java 7 及更早版本,用于存储类元数据、常量池等。

  • 默认值

    • 通常为 64MB(32 位 JVM)或 82MB(64 位 JVM)。
2.6 -XX:PermSize=256m
  • 意义

    • 设置永久代的初始大小为 256MB。

    • 适用于 Java 7 及更早版本。

  • 默认值

    • 通常为 16MB(32 位 JVM)或 20.75MB(64 位 JVM)。
2.7 -XX:MaxDirectMemorySize=983m
  • 意义

    • 设置直接内存(Direct Memory)的最大大小为 983MB。

    • 直接内存用于 NIO(Non-blocking I/O)操作。

  • 默认值

    • 通常与 -Xmx 相同。
2.8 -XX:MetaspaceSize=256m
  • 意义

    • 设置元空间(Metaspace)的初始大小为 256MB。

    • 适用于 Java 8 及更高版本,替代永久代。

  • 默认值

    • 通常为 20.75MB(64 位 JVM)。
2.9 -XX:MaxMetaspaceSize=512m
  • 意义

    • 设置元空间的最大大小为 512MB。

    • 适用于 Java 8 及更高版本。

  • 默认值

    • 通常为无限制(受系统内存限制)。

3. 内存溢出处理

3.1 -XX:+HeapDumpOnOutOfMemoryError
  • 意义

    • 在发生内存溢出(OutOfMemoryError)时生成堆转储文件(Heap Dump)。

    • 用于分析内存泄漏。

  • 默认值

    • 默认不启用。
3.2 -XX:HeapDumpPath=/export/Logs
  • 意义

    • 设置堆转储文件的保存路径为 /export/Logs
  • 默认值

    • 默认为当前工作目录。

4. 垃圾回收(GC)配置

4.1 -XX:CMSInitiatingOccupancyFraction=70
  • 意义

    • 设置 CMS(Concurrent Mark-Sweep)垃圾回收器在老年代占用率达到 70% 时启动。

    • 用于控制 CMS 的触发时机。

  • 默认值

    • 通常为 68
4.2 -XX:+UseCMSInitiatingOccupancyOnly
  • 意义

    • 强制 JVM 仅根据 CMSInitiatingOccupancyFraction 的值启动 CMS 垃圾回收。

    • 避免 JVM 自动调整触发条件。

  • 默认值

    • 默认不启用。
4.3 -XX:NewRatio=2
  • 意义

    • 设置新生代(Young Generation)与老年代(Old Generation)的比例为 1:2。

    • 新生代占堆内存的 1/3,老年代占 2/3。

  • 默认值

    • 通常为 2
4.4 -Xss256K
  • 意义

    • 设置每个线程的栈大小为 256KB。

    • 较小的栈大小可以支持更多线程,但可能导致栈溢出。

  • 默认值

    • 通常为 1MB(64 位 JVM)或 320KB(32 位 JVM)。
4.5 -XX:ParallelGCThreads=2
  • 意义

    • 设置并行垃圾回收的线程数为 2。

    • 用于控制垃圾回收的并发度。

  • 默认值

    • 通常为 CPU 核心数。
4.6 -XX:+UseParNewGC
  • 意义

    • 在新生代使用 ParNew 垃圾回收器。

    • ParNew 是多线程版本的 Serial 垃圾回收器。

  • 默认值

    • 在启用 CMS 时默认启用。
4.7 -XX:+UseConcMarkSweepGC
  • 意义

    • 在老年代使用 CMS 垃圾回收器。

    • CMS 是一种以低延迟为目标的并发垃圾回收器。

  • 默认值

    • 默认不启用。
4.8 -XX:+UseCMSCompactAtFullCollection
  • 意义

    • 在 Full GC 时启用老年代的内存压缩。

    • 减少内存碎片。

  • 默认值

    • 默认启用。
4.9 -XX:+CMSParallelRemarkEnabled
  • 意义

    • 启用 CMS 的并行标记阶段。

    • 提高标记阶段的效率。

  • 默认值

    • 默认启用。

5. GC 日志配置

5.1 -XX:+PrintGCDateStamps
  • 意义

    • 在 GC 日志中打印日期时间戳。
  • 默认值

    • 默认不启用。
5.2 -XX:+PrintGCDetails
  • 意义

    • 打印详细的 GC 日志信息。
  • 默认值

    • 默认不启用。
5.3 -Xloggc:/export/Logs/Domains/user.ka.soa.xx.local/server1/logs/jvm/gc.log
  • 意义

    • 将 GC 日志输出到指定文件 /export/Logs/Domains/user.ka.soa.xx.local/server1/logs/jvm/gc.log
  • 默认值

    • 默认不启用。

6. 其他配置

6.1 -Djava.awt.headless=true
  • 意义

    • 启用无头模式(Headless Mode),适用于没有图形界面的服务器环境。
  • 默认值

    • 默认不启用。
6.2 -Dsun.net.client.defaultConnectTimeout=60000
  • 意义

    • 设置默认的网络连接超时时间为 60 秒。
  • 默认值

    • 通常为无超时限制。
6.3 -Dsun.net.client.defaultReadTimeout=60000
  • 意义

    • 设置默认的网络读取超时时间为 60 秒。
  • 默认值

    • 通常为无超时限制。
6.4 -Djmagick.systemclassloader=no
  • 意义

    • 禁用 JMagick 库的系统类加载器。

    • JMagick 是 Java 的 ImageMagick 接口。

  • 默认值

    • 默认启用系统类加载器。
6.5 -Dnetworkaddress.cache.ttl=300
  • 意义

    • 设置 DNS 解析结果的缓存时间为 300 秒(5 分钟)。
  • 默认值

    • 通常为 -1(永久缓存)。
6.6 -Dsun.net.inetaddr.ttl=300
  • 意义

    • 设置 Java 网络地址缓存时间为 300 秒(5 分钟)。
  • 默认值

    • 通常为 -1(永久缓存)。

7. 总结

这段配置主要涉及以下方面:

  • Tomcat 线程池:优化并发处理能力。

  • JVM 内存设置:堆内存、元空间、直接内存等。

  • 垃圾回收:CMS 垃圾回收器的配置和优化。

  • GC 日志:详细记录垃圾回收信息。

  • 网络和超时:设置网络连接和读取的超时时间。

  • 其他优化:无头模式、DNS 缓存等。

这些配置适用于需要高性能、低延迟的 Java Web 应用程序,尤其是在生产环境中。

相关推荐
代码栈上的思考10 小时前
JVM中内存管理的策略
java·jvm
thginWalker13 小时前
深入浅出 Java 虚拟机之进阶部分
jvm
沐浴露z13 小时前
【JVM】详解 线程与协程
java·jvm
thginWalker15 小时前
深入浅出 Java 虚拟机之实战部分
jvm
程序员卷卷狗2 天前
JVM 调优实战:从线上问题复盘到精细化内存治理
java·开发语言·jvm
Sincerelyplz2 天前
【JDK新特性】分代ZGC到底做了哪些优化?
java·jvm·后端
初学小白...3 天前
线程同步机制及三大不安全案例
java·开发语言·jvm
凤山老林3 天前
还在用JDK8?JDK8升级JDK11:一次价值千万的升级指南
java·开发语言·jvm·spring boot·后端·jdk
2501_938790073 天前
详解 JVM 中的对象创建过程:类加载检查、内存分配、初始化的完整流程
jvm
宸津-代码粉碎机3 天前
Java内部类内存泄露深度解析:原理、场景与根治方案(附GC引用链分析)
java·开发语言·jvm·人工智能·python