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