目录

jvm-配置

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.1maxParameterCount="1000"
  • 意义
  • 设置 HTTP 请求中参数的最大数量为 1000。
  • 防止恶意请求携带过多参数导致服务器资源耗尽。
  • 默认值
  • 通常为 10000(Tomcat 默认值)。
1.2acceptCount="1000"
  • 意义
  • 设置等待队列的最大长度为 1000。
  • 当所有线程都在处理请求时,新请求会进入等待队列,队列满后新请求将被拒绝。
  • 默认值
  • 通常为 100(Tomcat 默认值)。
1.3maxSpareThreads="750"
  • 意义
  • 设置最大空闲线程数为 750。
  • 当空闲线程超过这个数量时,Tomcat 会关闭多余的线程以节省资源。
  • 默认值
  • 通常为 50(Tomcat 默认值)。
1.4maxThreads="1000"
  • 意义
  • 设置线程池的最大线程数为 1000。
  • 表示 Tomcat 最多可以同时处理 1000 个请求。
  • 默认值
  • 通常为 200(Tomcat 默认值)。
1.5minSpareThreads="50"
  • 意义
  • 设置最小空闲线程数为 50。
  • Tomcat 会始终保持至少 50 个空闲线程,以快速响应新请求。
  • 默认值
  • 通常为 10(Tomcat 默认值)。
1.6URIEncoding="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 应用程序,尤其是在生产环境中。