Tomcat
Tomcat 开放源代码web应用服务器,是由java代码开发的
tomcat就是处理动态请求和基于java代码的页面开发
可以在html当中写入java代码,tomcat可以解析html页面当中的iava,执行动态请求
动态页面机制有问题:不对tomcat进行优化,会出现在: 假死、停机
小集群,小服务,小应用使用于tomcat;大并发的场景不适合
1、免费
2、开源,可以二次封装。
3、可配置型强:可以根据需要进行自定义配置,包括端口号,虚拟主机,等等
4、安全性: tomcat自带安全机制,可以配置用户认证、授权、加密传输
5、部署应用非常快捷:Tomcat会自动部署自动运行
Tomcat 核心组件
web容器
完成web服务器的功能,web应用
工作方式: web→http或https→访问页面→指向到文件index.jsp
servlet容器
名称(catalina)用于处理servlet代码,就是处理web请求(http),以及生成动态内容的Java类,处理http请求
功能:
- 处理http请求
- 生成动态内容,是为了和用户发起的,jsp当中的数据库进行交互
- 会话管理:跟踪用户在不同请求之间的状态,通过管理可以在用户访问不同页面时保持用户的状
- 与数据库进行交互,servlet可以连接到数据库,执行查询和更新操作
jsp容器
jsp动态页面,翻译成servlet代码,用标准格式展示jsp的静态页面
- java server pages 动态页面的开发技术,使用jsp标签(index.jsp)
- 在html页面中插入java代码
- java容器→html页面中的java代码翻译→执行→展示结果
Tomcat 功能组件
Connector
负责对外接收和响应请求。它是Tomcat与外界的交通枢纽,监听端口接收外界请求,并将请求处理后传递给容器做业务处理,最后将容器处理后的结果响应给外界
Container
负责对内处理业务逻辑。其内部由 Engine、Host、Context和Wrapper 四个容器组成,
用于管理和调用 Servlet 相关逻辑;其下还有四个小组件及其功能:
Engine
引擎,用来管理多个虚拟主机,一个 Service 最多只能有一个 Engine
Host
代表一个虚拟主机,也可以叫站点,通过配置 Host 就可以添加站点
Context
代表一个 Web 应用,包含多个 Servlet 封装器
Wrapper
封装器,容器的最底层。每一 Wrapper 封装着一个 Servlet,负责对象实例的创建、执行和销毁功能
总结
这四个组件的工作方式也是从上到下的,这四个容器之间属于父子关系的工作顺序;Tomcat 的核心功能有两个,分别是负责接收和反馈外部请求的连接器 Connector,和负责处理请求的容器 Container;其中连接器和容器相辅相成,一起构成了基本的 web 服务 Service;每个 Tomcat 服务器可以管理多个 Service
工作流程
- 用户在浏览器中输入网址,请求被发送到本机端口 8080,被在那里监听的 Connector 获得
- Connector 把该请求交给它所在的 Service 的 Engine(Container)来处理,并等待 Engine 的回应
- 请求在 Engine、Host、Context 和 Wrapper 这四个容器之间层层调用
- 最后在 Servlet 中执行对应的业务逻辑、数据存储等
- 执行完之后的请求响应在 Context、Host、Engine 容器之间层层返回,最后返回给 Connector
- 并通过 Connector 返回给客户端
Tomcat 配置文件
bin:存放Tomcat的启动或关闭脚本文件
conf:主配置文件,其中包含几个重要文件
- server.xml:主配置文件
- contex.html:host的默认配置信息
- tomcat - usr.xml:认证用户密码的配置文件
- web.xml:配置servlet以及其标准的文件
lib:运行库的jar包(一般不动)
logs:日志文件
webapps:web应用默认部署目录
work:Tomcat的工作目录,存放jsp编译后的class文件,用于清楚Tomcat缓存、我wrok目录
JVM
JVM就是java的虚拟机,是java应用程序在计算上运行的核心组件,jvm负载将编译后的iava字节码
(.class文件)解释或者编译成本地的机器码,计算机能够执行它。JVM还提供好了内存管理,垃圾
回收,线程管理;确保java程序在不同平台可以有一致性的功能。
JVM 优化配置
首先安装 Java编程包、Tomcat
设置JDK的环境变量
成功访问Tomcat !
设置用户密码 登录manager
允许所有用户可访问
堆内存 非堆内存
- PS Eden Space:堆内存:存储新创建的对象。
- Psold Gen:堆内存,存储长时间存活的对象
- Ps Survivor Space: 堆内存: 存在创建之后,生命周期较短的对象
- Code Cache:非堆内存: 存储已经编译的代码
- CompressedClass Space: 非堆内存,存储已经压缩的类
Catalina.sh 就是servlet代码,容器的配置
ajp-nio-8009
ajp-nio:连接器类型
ajp:使用的是ajp的协议;将tomcat服务器与前端web服务器进行连接。提供负载均衡和高效的请求转发
nio:进行异步阻塞
8009:连接器正在监听的端口。connect
http-nio-8080
处理http请求和客户端通信的端口
JVM 优化配置
增加内存!
其中配置命令的解释:
AVA OPTS="$/AVA OPTS -server -Xms2048m -Xmx2048m -Xmn768m -xx:ParallelGCThreads=2 -Xx:PermSize=1024m.XX:MaxPermSize=1024m -Djava.awt.headless=true -XX:+DisableExplicitGC"
-server:第一个参数,指定内存池,一定放在第一个。
-Xms2048m:初始java堆的大小,分配JVM的最小内存看cpu性能高,这个值可以设高一点
-Xmx2048m:JAVA堆最大能多大,jvm的最大内存。和硬件内存挂钩。根据官方文档,起始值和最大值保持一致。XMS和XMX设为一样的,内存可以设为物理内存的一般。
-Xmn768m :新生代的内存大小。官方推荐为了整个堆大小的3/8.
-XX:ParallelGCThreads=2: 配置并行收集器的线程数,同时可以有多少个线程进行垃圾回收
-XX:PermSize:设置持久代内存的大小,默认是物理内存的1/4。
-XX:MaxPermSize=1024m :最大的非堆内存的大小,默认也是物理内存的1/4;
-XX:PermSize=1024m -XX:MaxPermSize=1024m
非堆内存是不会被垃圾回收机制处理的,-XX:PermSize持久代内存与最大非堆内存不能超出操作系统可用的内存。设置成一样大,可以减轻伸缩堆大小的压力。
-Djava.awt.headless=true:避免在linux环境下,web不能正常打开以正常显示图片。
-XX:+DisableExplicitGC" :避免jvm空间大起大落,影响系统的响应时间,响应速度会很慢
堆区
堆区当中分为:新生代、中生代、老年代、永久代
- 新生代:是每一个新建对象占用的空间
- 中生代:Java垃圾回收机制对堆区资源回收,新生代未被回收的资源就是中生代
- 老年代: 则是中生代未被回收的资源
JVM大小:新生代+中生代+老年代+永久代
Tomcat 虚拟主机配置
一台服务器上在一个tomcat中会部署多个虚拟机服务器,为了减少系统的资源消耗
命令解析:
<Host name="www.kgc.com" appBase="webapps” unpackWARs="true" autoDeploy="true" xmlValidation="false" xmINamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/kgc" path="" reloadable="true" />
</Host>
<Host name="www.benet.com" appBase="webapps” unpackWARs="true" autoDeploy="true" xmlValidation="false" xmINamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/benet" path="" reloadable="true" />
</Host>
- hostname:主机名
- appBase:存放web程序的目录
- unpackWARs:优先对war文件进行展开,默认就是true.
- autoDeploy:只要tomcat处于运行,会对webapps中的文件进行自动部署。默认也是true
- xmIValidation:是否验证xml文件的有效性。默认就是false
- xmINamespaceAware:是否验证命名空间
- <Context docBase="/usr/local/tomcat/webapps/kgc:
www.kgc.com 就是访问 /usr/local/tomcat/webapps/kgc/index.jsp
Tomcat 优化
Tomcat默认安装下的缺省配置并不适合生产环境,它可能会频繁出现假死现象需要重启
只有通过不断压测优化才能让它最高效率稳定的运行
优化主要包括三方面,分别为操作系统优化(内核参数优化),Tomcat配置文件参数优化,Java虚拟机 (JVM) 调优
启动速度的优化:
修改JDK参数
[root@gsn5 bin]# vim /usr/java/jdk1.8.0 201-amd64/jre/lib/security/java.security117 securerandom.source=file:/dev/urandom
# urandom 表示异步非阻塞
server.xml 对主配置文件的优化
- redirectPort:如果某连接器支持的协议的是http,当接受客户端发来的请求时,就会启用此端口 —— 8443
- maxthreads:Tomcat使用线程来处理请求的,可以创建的最大线程数也就是并发连接数;默认200
- minsparethreads:最小空闲线程数,开启tomcat时会有多少线程。默认是10
- maxsparethreads:最大备用线程。一旦创建的线程超过这个值,tomcat会关闭不再需要的端口线程。默认是-1,也就是不限制。一般不指定
- URIEncoding:URL的格式编码,默认utf-8。需要分别指定,所以一般也不动
- connnectionTimeout:网络连接超时,单位: 毫秒。为0,永不超时,一般为20000毫秒。
- enablelookups:是否反向解析域名,为了能够获取远程的主机名。一般设置为false,直接返回IP地址。提高了处理能力。
- disableUploadTimeout:上传超时时间,设置为true.
- connectionUploadTimeout:因人而异,没有标准答案,1分钟,30秒
- acceptCount:所有可以使用的线程都被占用了,可以传入连接请求的最大队列长度。默认100个。101个超出范围,直接丢弃,不再处理。
- compression:是否开启页面和响应数据的压缩。0ff 关 n开 force(所有的情况下都进行乐缩。)默认是of 建议on
- compressionMinSize:压缩响应的最小值,等于或者小于这个值,就不再压缩了。2048
- compressableMimeType:可以被压缩MIME的类型;浏览器和其他互联网应用程序之间处理文件的协议和需要处理的文档的性质和格式
文本: text/html、text/plain
图像: image/jpgimage/gif
音频: audio/wav audio/mp3
视频: video/mp4 video/avi
应用程序: application/pdf application/json