JVM调优
JVM调优
参数列表
JVM 调优需要根据具体场景和问题进行调整,一般可以通过设置 JVM 启动参数来调优。以下是常见的一些 JVM 调优参数说明:
- 堆内存相关参数
-Xmx<size>
:最大堆内存大小,可用于控制 JVM 可用的总内存大小。-Xms<size>
:初始堆内存大小,在 JVM 启动时分配。
- 垃圾回收相关参数
-XX:+UseG1GC
:启用 G1 垃圾回收器。-XX:+UseParallelGC
:启用平行垃圾回收器,适用于多核处理器。-XX:+UseConcMarkSweepGC
:启用 CMS 垃圾回收器。-XX:MaxGCPauseMillis=<>
:最大 GC 暂停时间(毫秒)。-XX:GCPauseIntervalMillis=<>
:GC 暂停间隔时间(毫秒)。-XX:+PrintGCTimeStamps
:打印 GC 的时间戳。
- 类加载器相关参数
-Xbootclasspath/p:<>
:在启动时向引导类路径添加类或 JAR 包。-verbose:class
:启用类加载器详细输出。
- 线程相关参数
-Xss<size>
:线程栈大小,用于控制线程占用的内存大小。-XX:ThreadStackSize=<size>
:线程栈大小。
- 特定功能相关参数
-XX:MaxMetaspaceSize=<>
:元数据空间的最大值(JDK 8+)。-XX:PermSize=<>
:永久代(PermGen)的大小(JDK 7-)。-XX:CompileCommand=<cmd>
:动态编译命令。-XX:TraceClassLoading
:详细跟踪类加载。
以上是一些常见的 JVM 调优参数,具体的调优参数应根据具体问题进行调整。在实践中,可以使用工具来自动识别和调整 JVM 参数,如 JDK 提供的 jstat 和 jvisualvm 工具。
压测参数
TPS 概念
TPS
:是TransactionsPerSecond
的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。
QPS 概念
QPS
:Queries Per Second
意思是每秒查询率
,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
CPS 概念
CPS
:Connection Per Second
意思是每秒新建连接数
,定义了新建连接的速率。当新建连接的速率超过规格定义的每秒新建连接数时,新建连接请求将被丢弃。
TPS 与 QPS 区别
TPS 即每秒处理事务数,包括以下部分:
- 1、用户请求服务器
- 2、服务器自己的内部处理
- 3、服务器返回给用户
这三个过程,每秒能够完成N个这三个过程,TPS也就是N。
QPS
基本类似于TPS,但是不同的是,对于一个页面的一次访问,形成一个TPS。但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入QPS
之中。
例如:访问一个页面会请求服务器3次,一次访问,产生一个“T”
,产生3个“Q”
。
QPS 计算公式
每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。
原理
:每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间公式
:( 总PV数 * 80% ) / ( 每天秒数 * 20% ) = 峰值时间每秒请求数(QPS)机器
:峰值时间每秒QPS / 单台机器的QPS = 需要的机器
问:每天300w PV 的在单台机器上,这台机器需要多少QPS?
答:( 3000000 * 0.8 ) / (86400 * 0.2 ) = 139 (QPS)
问:如果一台机器的QPS是58,需要几台机器来支持?
答:139 / 58 = 3
系统吞吐量
一个系统的吞度量(承压能力)与request对CPU的消耗
、外部接口
、IO
等等紧密关联。单个reqeust 对CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高。
系统吞吐量几个重要参数:QPS(TPS)
、并发数
、响应时间
- QPS(TPS):每秒钟request/事务 数量
- 并发数:系统同时处理的request/事务数
- 响应时间:一般取平均响应时间
理解了上面三个要素的意义之后,就能推算出它们之间的关系:
QPS(TPS)= 并发数/平均响应时间 或者 并发数 = QPS*平均响应时间