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