Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tomcat #171

Open
bingoogolapple opened this issue Jun 28, 2017 · 6 comments
Open

Tomcat #171

bingoogolapple opened this issue Jun 28, 2017 · 6 comments

Comments

@bingoogolapple
Copy link
Owner

bingoogolapple commented Jun 28, 2017

  • 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"
/>
@bingoogolapple
Copy link
Owner Author

bingoogolapple commented Jul 10, 2017

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

@bingoogolapple
Copy link
Owner Author

虚拟主机

  • 不要使用 Tomcat 的虚拟主机,每个站点一个实例。即启动多个 Tomcat
  • Tomcat 是多线程,共享内存,任何一个虚拟主机中的应用出现崩溃,会影响到所有应用程序。采用多个实例方式虽然开销比较大,但保证了应用程序隔离与安全

@bingoogolapple
Copy link
Owner Author

bingoogolapple commented Jul 10, 2017

压缩传输

  • 通常所说的 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 去做

@bingoogolapple
Copy link
Owner Author

应用程序安全

  • 关闭 war 自动部署 unpackWARs="false" autoDeploy="false" reloadable="false"

@bingoogolapple
Copy link
Owner Author

bingoogolapple commented Jul 10, 2017

启动用户与端口

  • 不要使用 root 用户启动 Tomcat,Java 的 JVM 是与系统无关的,是建立在 OS 之上的,你使用什么用户启动 Tomcat,那麽 Tomcat 就会继承该所有者的权限
  • Linux 系统小于1024的端口只有 root 可以使用,通过 Nginx 做反向代理

@bingoogolapple
Copy link
Owner Author

  • 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 假死

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant