JVM参数调整实例--1

网站性能调优实践
近期在进行一个项目的性能调优, 目标是支撑 1000 的并发数;
web容器:apache2+tomcat6
jvm:jdk6 linux x64
程序:status2+spring+ibatis
缓存:memcache
服务器:4颗双核cup 8G内存

由于本项目是网站项目只做展示用, 对时时性没要求, 做了几乎所有对象的缓存, memcache也在本机

测试一:
设置tomcat内存 CATALINA_OPTS="-Xms1024m -Xmx1024m -Xmn256m",然后使用apache ab 测试;
ab -c 500 -n 5000 url
使用 Jprofiler6 查看运行状况;主要看了内存, jvm线程, cpu 和 CG这几项
注:对 Jprofiler 使用不熟悉,初次使用, 有些数据记不太清了
内存:增长非常快, 主要是char[ ]非常高, 300-500M
jvm线程:运行线程(runnable) 在 460-500之间, 锁定线程(blocking)在 10 和 500左右跳动 , Net I/O 在 200左右, waiting 在几十左右
cpu:占用率最高的是 ognl 的getValue
cg:年轻代非常的频繁, 老年代几乎占满, cg非常频繁, cpu消耗80%左右
在使用ab压力的时候, 同时使用ie打开页面,不能访问,出现 502 错误, tomcat控制台频繁报(org.apache.jk.common.ChannelSocket processConnection
WARNING: processCallbacks status 2
### 配置 Tomcat JVM 参数与内存调整指南 在 Tomcat调整 JVM 参数对于优化性能和内存管理至关重要。根据服务器的硬件资源、运行的应用程序特性以及负载情况,可以对 JVM 的内存分配、垃圾回收策略等进行合理配置。 #### 1. 堆内存设置 堆内存是 JVM 管理的主要内存区域,用于存放对象实例。设置合适的堆内存大小可以显著提升 Tomcat 的性能。 - **最大堆内存(-Xmx)** 与 **初始堆内存(-Xms)**:建议将 `-Xms` 和 `-Xmx` 设置为相同的值,以避免 JVM 动态调整堆大小带来的性能开销。例如,在 8GB 内存的服务器上,可以设置为 `-Xms4096m -Xmx4096m` [^2]。 - **年轻代内存(-Xmn)**:年轻代是堆内存的一部分,用于存放新创建的对象。通常建议设置为总堆内存的 1/3 到 1/2。例如,在 8GB 内存的服务器上,可以设置为 `-Xmn2048m` [^2]。 #### 2. 持久代(PermGen)或元空间(Metaspace)设置 在 Java 8 之前,类元数据存储在持久代(PermGen)中,而在 Java 8 及以后版本中,持久代被元空间(Metaspace)取代。 - **持久代大小(-XX:PermSize 和 -XX:MaxPermSize)**:对于 Java 7 及更早版本,建议设置为 `-XX:PermSize=256m -XX:MaxPermSize=512m` [^2]。 - **元空间大小(-XX:MaxMetaspaceSize)**:对于 Java 8 及以后版本,可以使用 `-XX:MaxMetaspaceSize=512m` 来限制元空间的最大大小,防止内存溢出。 #### 3. 垃圾回收器选择 选择合适的垃圾回收器可以显著提升性能,尤其是在高并发场景下。 - **Parallel Scavenge + Serial Old**:适用于吞吐量优先的场景,配置参数如下: ```bash -XX:+UseParallelGC -XX:+UseParallelOldGC ``` - **CMS(Concurrent Mark Sweep)**:适用于低延迟场景,配置参数如下: ```bash -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled ``` - **G1(Garbage-First)**:适用于大堆内存和低延迟场景,配置参数如下: ```bash -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:G1HeapRegionSize=4M ``` #### 4. 其他优化参数 - **禁用显式 GC(-XX:+DisableExplicitGC)**:防止应用程序调用 `System.gc()` 导致不必要的 Full GC。 - **文件编码(-Dfile.encoding=UTF-8)**:确保应用使用统一的字符编码。 - **SurvivorRatio 和 MaxTenuringThreshold**:控制年轻代中 Eden 区与 Survivor 区的比例,以及对象晋升到老年代的年龄阈值。例如: ```bash -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 ``` #### 5. 示例配置 根据服务器内存大小,以下是一些常见的 JVM 参数配置示例: - **4GB 内存服务器**: ```bash CATALINA_OPTS="-Dfile.encoding=UTF-8 -server -Xms2048m -Xmx2048m -Xmn1024m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC" ``` - **8GB 内存服务器**: ```bash CATALINA_OPTS="-Dfile.encoding=UTF-8 -server -Xms4096m -Xmx4096m -Xmn2048m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC" ``` - **16GB 内存服务器**: ```bash CATALINA_OPTS="-Dfile.encoding=UTF-8 -server -Xms8192m -Xmx8192m -Xmn4096m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC" ``` - **32GB 内存服务器**: ```bash CATALINA_OPTS="-Dfile.encoding=UTF-8 -server -Xms16384m -Xmx16384m -Xmn8192m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC" ``` #### 6. 配置方式 在 Linux 环境下,TomcatJVM 参数通常在 `catalina.sh` 文件中进行配置。打开该文件后,在 `cygwin=false` 行之前添加所需的 JVM 参数,例如: ```bash JAVA_OPTS="-server -Xms4096m -Xmx4096m -XX:PermSize=256m -XX:MaxPermSize=512m -Djava.awt.headless=true -XX:+DisableExplicitGC" ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值