tomcat调优

一、配置tomcat用户

1.修改tomcat配置文件

vim conf/tomcat-user.xml

2.写入如下内容

<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/>

*3.如果是tomcat8还需要修改webapps/manager/META-INF/context.xml,把value中的内容注释掉

<Context antiResourceLocking="false" privileged="true">
<!‐‐<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1"/>‐‐>
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</
Context>

4.访问http://localhost:8080,点击Server Status,然后输入用户名:tomcat密码:tomcat

 

二、tomcat调优

1.1禁用AJP

vim conf/server.xml

1.2注释该行

<Connectorport="8009" protocol="AJP/1.3" redirectPort="8443"/>

2.1使用线程池

vim conf/server.xml

2.2打开此注释

<Executor name="tomcatThreadPool" namePrefix="catalina-exec‐" maxThreads="500" minSpareThreads="50" prestartminSpareThreads="true" maxQueueSize="100"/>

maxThreads:最大并发数,默认设置200,一般建议在500~1000,根据硬件设施和业务来判断

minSpareThreads:Tomcat初始化时创建的线程数,默认设置25,仅当prestartminSpareThreads设置为true时生效

maxQueueSize,最大的等待队列数,超过则拒绝请求

2.3在Connector中设置executor属性指向上面的执行器

<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>

3.使用nio2(tomcat8支持,tomcat7可配置nio)

<Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol" connectionTimeout="20000" redirectPort="8443"/>

4.修改tomcat的bin/catalina.sh。set虚拟机参数

1.1设置并行垃圾回收器

JAVA_OPTS="-XX:+UseParallelGC -XX:+UseParallelOldGC -Xms64m -Xmx512m 
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps 
-XX:+PrintHeapAtGC -Xloggc:../logs/gc.log"

1.2将gc.log上传到gceasy.io查看问题

 

 可以看到MinorGC较多,建议增大年轻代大小。FullGC也较多,建议增大堆内存大小

JAVA_OPTS="-XX:+UseParallelGC XX:+UseParallelOldGC -Xms128m -Xmx1024m 
-XX:NewSize=64m -XX:MaxNewSize=256m -XX:+PrintGCDetails -XX:+PrintGCTimeStamps 
-XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:../logs/gc.log"

2.设置G1垃圾收集器

#设置了最大停顿时间100毫秒,初始堆内存128m,最大堆内存1024m
JAVA_OPTS="-XX:+UseG1GC -XX:MaxGCPauseMillis=100 -Xms128m -Xmx1024m 
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps 
-XX:+PrintHeapAtGC -Xloggc:../logs/gc.log"

 

三、使用JMeter测试

1.JMeter下载地址:http://jmeter.apache.org/download_jmeter.cgi。下载zip包

2.进入bin目录,找到jmeter.bat文件,双机打开即可启动进入bin目录,找到jmeter.bat文件,双机打开即可启动

 3.添加测试计划

 4.添加线程组,模拟用户并发

 5.设置线程数、单个线程请求时间间隔、每个线程循环请求次数

 

 6.添加http请求

 

7.添加请求监控,点击运行

8.查看聚合报告(重点看吞吐量)

 

 

四、idea调试远程tomcat

1.修改远程tomcat的bin/catalina.sh

if [ "$1" = "jpda" ] ; then
  if [ -z "$JPDA_TRANSPORT" ]; then
    JPDA_TRANSPORT="dt_socket"
  fi
  if [ -z "$JPDA_ADDRESS" ]; then
    JPDA_ADDRESS="5005"
  fi
  if [ -z "$JPDA_SUSPEND" ]; then
    JPDA_SUSPEND="n"
  fi
  if [ -z "$JPDA_OPTS" ]; then
    JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
  fi
  CATALINA_OPTS="$CATALINA_OPTS $JPDA_OPTS"
  shift
fi

注意:调试时JPDA_ADDRESS后面一定只能写端口号(如5005),若不删掉前面的localhost,idea就会一直连不上。调试大半天血的教训!!!

2.添加一个remote的configuration

3.配置内容

 

4.选择该configuration然后点击调试

 控制台输出如下内容则远程连接成功

 5.在本地代码打断点,然后直接请求线上tomcat,可以发现被断点成功拦截

 

附:调试springboot的远程jar包时只需要复制如下VM参数

 在jar包启动时加入

java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 /app.jar

 

posted on 2020-09-25 10:39  bofeng  阅读(178)  评论(0编辑  收藏  举报