1. tomcat目录的结构
1)bin:该目录存放的是二进制可执行文件。
2)conf:配置文件目录,非常重要
server.xml: 配置服务器信息,端口号,虚拟主机等
tomcat-users.xml:存放tomcat用户文件,这里保存的是tomcat的用户名以及密码,以及用户的角色信息。
web.xml:这和文件中注册了很多MIME类型,及是文档类型
context.xml:对所有应用的统一配置值,通常我们不会去配置它。
3)lib:tomcat依赖的jar包
4)logs:记录tomcat启动关闭的信息,日志信息
5)temp:临时文件的目录
6)webapps:存放web项目的目录,每一个文件夹都是一个web项目
7)work:运行时生成的文件,最终运行的文件都在这里,比如jsp生成的class等。
8)LICENSE:许可证
9)NOTICE:说明文件
2. tomcat常见操作
1)添加自定义用户和密码
编辑conf/tomcat-users.xml
<user username="xxx" password="xxx" roles="manager"/>
2)修改端口(编辑conf/server.xml)
<Server port="8005" shutdown="SHUTDOWN">:tomcat #监听的关闭端口
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
# 用于监听浏览器访问请求8080端口,当用户用http请求某个资源,而该资源本身又被设置了
# 必须要https方式访问,此时Tomcat会自动重定向到这个redirectPort设置的https端口。
# 例如:我在浏览器通过地址栏输入:http://www.taobao.com 当程序跳转到淘宝网之后地址
# 栏中的地址就自动的被重定向到了:https://www.taobao.com
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
# 当用户通过AJP协议进行访问的时候tomcat就监听的端口为8009;与上面的同理。。。。。。
如果修改的那个tomcat的话只需要修改8080即可,如果修改多个tomcat的话,将三个端口都修改,这样才会必免错误
3. tomcat限制ip访问
tomcat过滤阀工有两个
1)远程地址过滤(Remote Address Filter)
2)远程主机名过滤(Remote Host Filter)
备注:两个过滤器功能一样,一个针对IP地址进行过滤,一个针对主机名称进行过滤.
# 编辑conf/server.xml
# 禁止某一个或者一些ip
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127.0.0.1,192.168.1.27" deny="192.168.1.55"/>
# 禁止某一网段:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127.0.0.1,192.168.1.27" deny="192.*"/>
# 禁止某一个或者一些主机 不建议使用
<Valve className="org.apache.catalina.valves.RemoteHostValve" allow="wyh" deny="ms*">
4. 修改tomcat内存
Windows 下的catalina.bat中大概45左右添加一行话:set JAVA_OPTS=-Xms256m -Xmx512m
Linux 下的catalina.sh中中大概45左右添加一行话:set JAVA_OPTS=-Xms256m -Xmx512m
怎样查看tomcat的内存大小呢:依靠JDK中自带的工具:C:\Program Files\Java\jdk1.7.0_51\bin\jvisualvm.exe
5. tomcat优化
1)加大tomcat内存
2)线程池优化
参考配置:
<Connector port="9027"
protocol="HTTP/1.1"
maxHttpHeaderSize="8192"
maxThreads="1000"
minSpareThreads="100"
maxSpareThreads="1000"
minProcessors="100"
maxProcessors="1000"
enableLookups="false"
URIEncoding="utf-8"
acceptCount="1000"
redirectPort="8443"
disableUploadTimeout="true"/>
参数说明
maxThreads 客户请求最大线程数
minSpareThreads Tomcat初始化时创建的 socket 线程数
maxSpareThreads Tomcat连接器的最大空闲 socket 线程数
enableLookups 若设为true, 则支持域名解析,可把 ip 地址解析为主机名
redirectPort 在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口
acceptAccount 监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads )
connectionTimeout 连接超时
minProcessors 服务器创建时的最小处理线程数
maxProcessors 服务器同时最大处理线程数
URIEncoding URL统一编码
3)tomcat IO优化
因为tomcat低版本的采用的BIO模式的,tomcat7+开始采用NIO模式,如果高并发的情况下需要采用APR模式
简而言之:为了使用到NIO模式或者APR模式,所以建议使用高版本的tomcat
4)tomcat缓存优化
conf/server.xml
<Connector port="9027" ...
compression="on" #可是on不是on,意思表示为开启压缩功能
compressionMinSize="2048"
.../>
compression打开压缩功能,在tomcat内存中生产一个缓存文件,当第二个人使用的时候回通过访问缓存速度变快
compressionMinSize启动压缩的内容大小,默认是2k,那就意味这不是随便压缩的,也不提倡过大的压缩
5)禁用AJP连接器实现动静分离
注释tomcat中server.xml中 即可
这样的话 tomcat只是用来处理动态请求,那静态可以依靠nginx来处理
6.总结
1)tomcat中依靠一个线程池处理并发
2)tomcat线程池在tomcat-util.jar中
3)tomcat-util.jar中包含两种线程池
JNI技术实现的APR的pool
java实现的Threadpool(默认)
4)ThreadPool的工作原理
服务器启动使,创建一个一维数组(maxThread=200个)并创建空闲线程(minSpareThreads=5个)随时等待用户请求.将一个需要执行的实例传给ThreadPool中,如果有空闲线程那就执行,没有那就一次性创建minSpareThreads个空闲线程,如果已经超过了maxThread那就等待空闲线程,等待有了空闲线程在执行