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
。
- 在 64 位系统中默认为
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
。
- 将 GC 日志输出到指定文件
-
默认值:
- 默认不启用。
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 应用程序,尤其是在生产环境中。