bingoogolapple.github.io icon indicating copy to clipboard operation
bingoogolapple.github.io copied to clipboard

JVM

Open bingoogolapple opened this issue 7 years ago • 2 comments

性能调优

  • 线程池:解决用户响应时间长的问题
  • 连接池
  • JVM 启动参数:调整各代的内存比例和垃圾回收算法,提高吞吐量
  • 程序算法:改进程序逻辑算法提高性能

JVM 调优

  • GC 的时间足够的小
  • GC 的次数足够的少
  • 发生 Full GC 的周期足够的长

前两个目前是相悖的,要想 GC 时间小必须要一个更小的堆,要保证 GC 次数足够少,必须保证一个更大的堆,我们只能取其平衡

JVM 调优 了解JVM的内存管理与垃圾回收 JVM Garbage Collection JVM Options For GC JVM内存JAVA_OPTS参数 JVM 监控工具介绍 关键业务系统的JVM参数推荐(2016热冬版)

image

bingoogolapple avatar May 22 '17 06:05 bingoogolapple

image

bingoogolapple avatar Jun 11 '17 14:06 bingoogolapple

查看 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"
/>

bingoogolapple avatar Jul 11 '17 09:07 bingoogolapple