bingoogolapple.github.io
bingoogolapple.github.io copied to clipboard
Tomcat
- there was insufficient free space available after evicting expired cache entries - consider increasing the maximum size of the cache
- 从 Tomcat8 中开始就增加了静态资源缓存的配置 ,是需要设置相应的参数的。 在 Tomcat 的安装目录 /conf/context.xml 中的 Context 中添加下面的代码块来消除警告
<Resources
cachingAllowed="true"
cacheMaxSize="102400"
cacheObjectMaxSize="2048"
/>
maxThreads 连接数限制
- maxThreads 是 Tomcat 所能接受最大连接数。一般设置不要超过8000以上,如果网站访问量非常大可以使用运行多个 Tomcat 实例的方法。即在一个服务器上启动多个 Tomcat 然后做负载均衡处理
- maxThreads 配置要结合 JVM -Xmx 参数调整,也就是要考虑内存开销。
<Connector
maxThreads="150"
minSpareThreads="25"
maxSpareThreads="75"
acceptCount="100"
...
/>
maxThreads 最多同时处理150个连接。Tomcat 可创建的最大线程数150~250。默认值为 200
minSpareThreads 表示即使没有人使用也开这么多空线程等待,初始化时创建。默认值是 10
maxSpareThreads 最多可空75个线程,一旦超过,Tomcat 就关闭不再需要的 socket 线程。默认 50
acceptCount 连接数达到 maxThreads 时,还可排队的连接数,超过则返回拒绝连接。默认 100
虚拟主机
- 不要使用 Tomcat 的虚拟主机,每个站点一个实例。即启动多个 Tomcat
- Tomcat 是多线程,共享内存,任何一个虚拟主机中的应用出现崩溃,会影响到所有应用程序。采用多个实例方式虽然开销比较大,但保证了应用程序隔离与安全
压缩传输
- 通常所说的 gzip 压缩,Tomcat通过在 server.xml 配置设置压缩的选项
<Connector
compression="on"
compressionMinSize1="2048"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,,application/octet-stream"
...
/>
compression 打开压缩功能
compressionMinSize 启用压缩的输出内容大小,这里面默认为2KB
compressableMimeType 压缩类型
- 压缩会增加 Tomcat 负担,最好采用 Nginx + Tomcat 或者 Apache + Tomcat 方式,压缩交由Nginx/Apache 去做
应用程序安全
- 关闭 war 自动部署 unpackWARs="false" autoDeploy="false" reloadable="false"
启动用户与端口
- 不要使用 root 用户启动 Tomcat,Java 的 JVM 是与系统无关的,是建立在 OS 之上的,你使用什么用户启动 Tomcat,那麽 Tomcat 就会继承该所有者的权限
- Linux 系统小于1024的端口只有 root 可以使用,通过 Nginx 做反向代理
- enableLookups:是否反查域名,默认 true。为提高处理能力,应设置为 false
- connectionTimeout:连接超时,默认60000毫秒。配0表示永不超时,但有隐患。通常可配30000。
- maxKeepAliveRequests:最大长连接个数(1表示禁用,-1表示不限制个数,默认100个。一般设置在100~200之间)Nginx 动态的转给 Tomcat,Nginx 是不能 keepalive 的,而 Tomcat 默认开启 keepalive,会等待 keepalive 的 timeout,默认不设置就是使用 connectionTimeout。所以必须设置tomcat 的超时时间,并关闭 Tomcat 的 keepalive。否则会产生大量 Tomcat 的 socket timewait。maxKeepAliveRequests="1" 表示每个连接只响应一次就关闭,这就不会等待 timeout 了,可避免 Tomcat 产生大量 TIME_WAIT 连接,从一定程度上避免 Tomcat 假死