性能瓶颈分析___JVM

性能瓶颈分析___JVM

jvisualVM远程连接监控tomcat

  • 此工具在jdk的bin目录下
  • 在要监控的服务器的Tomcat的bin目录下的catalina.sh中加入以下内容
  • 如果应用在容器中增加Dcom.sun.management.jmxremote.rmi
#插入位置,在#————————Execute The Requested Command ——————————#之后
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.hostname=服务器IP"
  • 重启Tomcat
  • 命令行:losf -i:8999检查端口是否被监听
  • 在JvisualVM中添加服务器IP-Ramete-add

用JvisualVM能监控哪些层东西

  • 业务代码
  • 框架
  • Tomcat
  • JDK

jmc监控Tomcat

  • 此工具在jdk的bin目录下
  • 在要监控的服务器的Tomcat的bin目录下的catalina.sh中加入以下内容
  • 如果应用在容器中增加Dcom.sun.management.jmxremote.rmi
#插入位置,在#————————Execute The Requested Command ——————————#之后
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.hostname=服务器IP"
  • 重启Tomcat
  • 命令行:losf -i:8999检查端口是否被监听
  • 在file-connect中添加服务器

Tomcat的性能参数

  • 在tomcat/conf中的server.xml中
参数 说明
connectionTimeout 网络连接超时,单位:毫秒。设置为0表示永不超时,通常可设置为30000毫秒。
keepAliveTimeout 长连接最大保持时间(毫秒)。此处为15秒。
maxKeepAliveRequests 最大长连接个数,1表示不限制个数,默认100个。⼀般设置在100~200之间
maxHttpHeaderSize http HTTP请求头信息的最大程度,超过此长度的部分不予处理。一般8K。
URIEncoding 指定Tomcat容器的URL编码格式。
acceptCount 指定当所有可以使用的处理请求的线程数都被使⽤时,可以放到处理队列中的请求数,超过这个数的请求将不予处理,默认为10个。 如果设的较小,可以保证接受的请求较快相应,但是超出的请求可能就直接被拒绝,如果设的较大,可能就会出现大量的请求超时的情况,因为我们系统的处理能力是一定的。
disableUploadTimeout 上传时是否使用超时机制
enableLookups 是否反查域名,取值为:true或false。为了提高处理能力,应设置为false
bufferSize 缓冲值,输入流在connector创建时定义的值大小。默认值是 2048 bytes。
maxSpareThreads 最大空闲连接数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值为 50。
maxThreads 最大连接数,Tomcat使⽤线程来处理接收的每个请求。这个值表示Tomcat可创建的最⼤的线程数。默认值 200。
minSpareThreads 最小空闲线程数,Tomcat初始化时创建的线程数,默认值为4。
  • 重要参数maxThreads、maxSpareThreads 、minSpareThreads

分析是否这些参数影响的TPS无法提高

  • 增加压力,查看服务器CPU、内存是否没有达到瓶颈,如果没有占用很多说明不是CPU和内存的问题
  • 使用jvisualVM查看服务器server.xml启动线程是否达到了maxThreads,如果没有达到最大线程数,说明不是线程数配置错误的问题
  • 看JDK的堆是否健康,如果已达到最大给的堆容量,设置堆大小
  • 使用jvisualVM-Sampler查看self Time,Total Time来查看服务器处理线程时间的分布
    • 当self Time为0时,那么说明本身代码没问题,问题出在了Toatl Time
    • 使用dump功能,打印调用栈,查看具体消耗在哪里,查看其中都调用了哪些其他服务,然后对应去看调用的服务的服务器消耗。找到问题在哪
posted @ 2022-11-16 16:18  77的小白  阅读(49)  评论(0)    收藏  举报