1. Tomcat远程debug
JDWP协议
1.1修改tomcat配置
- 打开 Tomcat下
./bin/startup.sh
将最后一行修改为
exec "$PRGDIR"/"$EXECUTABLE" jdpa start "$@"
增加jpda
- 修改
./bin/catalina.sh
if [ "$1" = "jpda" ] ; then
if [ -z "$JPDA_TRANSPORT" ]; then
JPDA_TRANSPORT="dt_socket"
fi
if [ -z "$JPDA_ADDRESS" ]; then
JPDA_ADDRESS="自定义端口"
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="$JPDA_OPTS $CATALINA_OPTS"
shift
Tomcat支持Spring Boot项目
修改pom.xml
修改打包方式
<packaging>war</packaging>
修改入口类,继承SpringBootServletInitializer
重写config
方法
@SpringBootApplication
public class SolarApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(SolarApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(SolarApplication.class);
}
}
2. Tomcat-manager监控
2.1 文档docs/manager-howto.html
2.2 步骤:
- conf/tomcat-users.xml添加用户
<role rolename="tomcat"/>
<role rolename="manager-status"/>
<role rolename="manager-gui"/>
<user username="tomcat" password="<must-be-changed>" roles="tomcat,manager-status,manager-gui"/>
- conf/Catalina/localhost/manager.xml配置允许的远程连接
<?xml version='1.0' encoding='utf-8'?>
<Context privileged="true" antiResourceLocking="false" doBase="${caralina.home}/webapps/manager">
<Value className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.0\.0\.1"/>
</Context>
- 重启
3. psi-probe监控
3.1 初始化
git clone https://github.com/psi-probe/psi-probe
mvn clean package -Dmaven.test.skip
web/target/probe.war
部署到tomcat下
4. tomcat调优
4.1 内存优化
4.2 线程优化
webapps/docs/config/http.html
maxConnections
:最大连接数和处理的最大连接数(tomcat8是nio,多路复用)
acceptCount
:超过最大数的请求被放在队列中,值的是该队列的最大长度(值不要太大)。
maxThreads
:工作线程
minSpareThreads
:最小空闲的线程(值不要太小)
4.3 配置优化
doc/config/host.html
autoDeploy
:该标志值指示Tomcat在运行时是否应定期检查新的或更新的web应用程序。如果为true,Tomcat会定期检查appBase和xmlBase目录,并部署找到的任何新web应用程序或上下文XML描述符。更新的web应用程序或上下文XML描述符将触发重新加载web应用程序。该标志的值默认为true(配置为true会影响性能,生产环境中这个值是false)。是配置在conf/server.xml
里面的。
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
docs/config/http.html
autoDeployLookups
如果要请求调用,请将其设置为true。getRemoteHost()执行DNS查找,以返回远程客户端的实际主机名。设置为false将跳过DNS查找,并以字符串形式返回IP地址(从而提高性能)。默认情况下,DNS查找被禁用。
docs/config/context.html
reloaded
:false
conf/server.xml
protocol="org.apache.coyote.http11.Http11Aprotocol"
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
HTTP/1.1
代表的是BIO。
Session优化
- 如果是JSP,可以禁用Session。