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 应用程序,尤其是在生产环境中。

相关推荐
阿坨14 分钟前
JVM G1垃圾回收器详细解析
jvm
JouJz14 分钟前
Java虚拟机之垃圾收集(一)
java·开发语言·jvm
放氮气的蜗牛2 小时前
C++从入门到精通系列教程之第十篇:异常处理与调试技巧
开发语言·jvm·c++
Amy.com3 小时前
Linux16-数据库、HTML
jvm·数据库
Vic101016 小时前
常见 JVM 工具介绍
jvm
阿亮 sir17 小时前
JVM详解
jvm
_TokaiTeio1 天前
JVM面试题100
java·开发语言·jvm·后端·虚拟机
张彦峰ZYF1 天前
动态扩缩容引发的JVM堆内存震荡:从原理到实践的GC调优指南
jvm·cms·zgc·g1·zyf jvm 知识准备分享
迷路的小犀牛1 天前
JAVA编程【JVM编程】
java·jvm·php