bingoogolapple.github.io
bingoogolapple.github.io copied to clipboard
JVM
性能调优
- 线程池:解决用户响应时间长的问题
- 连接池
- JVM 启动参数:调整各代的内存比例和垃圾回收算法,提高吞吐量
- 程序算法:改进程序逻辑算法提高性能
JVM 调优
- GC 的时间足够的小
- GC 的次数足够的少
- 发生 Full GC 的周期足够的长
前两个目前是相悖的,要想 GC 时间小必须要一个更小的堆,要保证 GC 次数足够少,必须保证一个更大的堆,我们只能取其平衡
JVM 调优 了解JVM的内存管理与垃圾回收 JVM Garbage Collection JVM Options For GC JVM内存JAVA_OPTS参数 JVM 监控工具介绍 关键业务系统的JVM参数推荐(2016热冬版)
查看 Tomcat 进程
jps -v | grep 8000
JVM执行时使用哪些参数以及其各参数默认值
java -XX:+PrintFlagsFinal -version
java -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+PrintFlagsFinal -version
后面花括号里面有product的表示可以在启动参数中设置的,花括号里面是“product rw”的表示你还可以在jvm启动后使用类似下面的命令来设置这些参数
jinfo -flag -PrintHeapAtGC=true <pid>
-
maxThreads -> 客户请求最大线程数。默认值为 200
-
minSpareThreads -> 初始化时创建的 socket 线程数。默认值为 10
-
maxSpareThreads -> 连接器的最大空闲 socket 线程数,一旦超过,就关闭不再需要的 socket 线程,在 Tomcat8 中好像已经没有这个参数了
-
acceptAccount -> 监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads )
-
minProcessors -> 服务器创建时的最小处理线程数
-
maxProcessors -> 服务器同时最大处理线程数
-
connectionTimeout -> 连接超时。默认值为 20000
-
enableLookups -> 若设为true, 则支持域名解析,可把 ip 地址解析为主机名。默认为 false
-
redirectPort -> 在需要基于安全通道的场合,把客户请求转发到基于 SSL 的 redirectPort 端口
-
URIEncoding -> URL统一编码
-
Tomcat8 中默认就是用的 nio
<Connector
port="8000"
redirectPort="8443"
protocol="HTTP/1.1"
maxThreads="300"
minSpareThreads="25"
maxSpareThreads="75"
minProcessors="5"
maxProcessors="1000"
acceptCount="300"
connectionTimeout="20000"
useURIValidationHack="false"
enableLookups="false"
URIEncoding="UTF-8"
disableUploadTimeout="false"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png"
/>