解决中文乱码问题:
server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
解决修改文件后刷新问题 (可选):
context.xml
<Context reloadable="true">
内存优化:
catalina.sh
在 # ----- Execute The Requested Command ----------------------------------------- 下面增加:
JAVA_OPTS=$JAVA_OPTS -server -Xms2048m -Xmx2048m -XX:PermSize=256M -XX:MaxPermSize=512m -Djava.awt.headless=true
解析:
-server:以server模式运行,效率较高
Xms,Xmx:Java堆内存(heap),设置最小最大堆内存
PermSize,MaxPermSize:存放类定义的区域,包括生成的类及引用的jar包,常见错误java.lang.OutOfMemeorError:PermGen space
注:Java8开始,PermSize被MetaspaceSize代替,MetaspaceSize共享heap,PermSize,MaxPermSize设置将无效,不用设置
-Djava.awt.headless=true:在linux系统中,使用绘图相关的api时,需要声明为true,否则可能抛出异常
最大连接数优化:
server.xml,修改配置文件为:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"
maxThreads="500"
minSpareThreads="100"
maxSpareThreads="200"
acceptCount="200"
enableLookups="false"
/>
启动基于异步轮询的nio模式(tomcat8默认使用nio):protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads:最大工作线程数
minSpareThreads:最小空闲线程数
maxSpareThreads:最大空闲线程数
acceptCount:允许等待线程数(maxThreads占用完后)
maxThreads + acceptCount = 总的可接受的线程数,超过这个数量,新连接将不被接受,出现http错误
enableLookups:禁用request.getRemoteHost会执行DNS查找,反向解析IP对应的用户主机名