配置示例可查看这篇文章:https://www.6zeroq.com/post/show/15

启动参数

export CATALINA_OPTS="-server -Xms32m -Xmx192m -XX:MaxMetaspaceSize=64m -Djava.awt.headless=true"

注意用CATALINA_OPTS而不是JAVA_OPTS,

服务端模式,运行更快;设定启动和最大内存(按实际情况);限制元空间大小,可定位查看是否加载了不必要的类;允许无图形化模式

设置线程数

<Connector port="8001" protocol="HTTP/1.1" address="127.0.0.1"
                        maxThreads="20" minSpareThreads="5" acceptCount="20"
                        enableLookups="false"
                        connectionTimeout="20000" disableUploadTimeout="false" connectionUploadTimeout="60000" 
                        URIEncoding="utf-8" useBodyEncodingForURI="true"/>

address绑定本地地址,禁止外部访问

处理请求的最大线程和最小空闲线程数;acceptCount表示到达最大线程是请求等待队列的长度,一定设置,否则连接过多容易挂掉;禁用DNS查询,提高效率,默认是禁用的;连接超时,和上传超时设置;设置URI编码

Connector还有个属性executor,表示使用的共享线程池,多个Connector可以使用,注意设置了这个属性则线程相关设置的属性将忽略

AJP的Connector可以去掉,减小开销,反向代理就可以了

应用配置

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                        prefix="localhost_access_log" suffix=".txt"
                        pattern="%{X-Forwarded-For}i %l %u %t "%r" %s %b" />
<Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" />

AccessLogValve中pattern="%{X-Forwarded-For}i %l %u %t "%r" %s %b",用户获取真实ip,请求头里面

RemoteIpValve的remoteIpHeader和protocolHeader分别指定客户真实ip和协议,反向代理转发的请求头配置

其他

标签GlobalNamingResources和Realm的去掉,这个是用户角色资源,用不到

参考:

https://tomcat.apache.org/tomcat-8.5-doc/config/http.html

https://stackoverflow.com/questions/11222365/catalina-opts-vs-java-opts-what-is-the-difference