Tomcat
Tomcat 开放源代码web应用服务器,是由java代码开发的
tomcat就是处理动态请求和基于java代码的页面开发
可以在html当中写入java代码,tomcat可以解析html页面当中的iava,执行动态请求
动态页面机制有问题:不对tomcat进行优化,会出现在: 假死、停机
小集群,小服务,小应用使用于tomcat;大并发的场景不适合
Tomcat 核心组件
web容器
完成web服务器的功能,web应用
工作方式: web→http或https→访问页面→指向到文件index.jsp
servlet容器
名称(catalina)用于处理servlet代码,就是处理web请求(http),以及生成动态内容的Java类,处理http请求
功能:
jsp容器
jsp动态页面,翻译成servlet代码,用标准格式展示jsp的静态页面
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
工作流程
Tomcat 配置文件
bin:存放Tomcat的启动或关闭脚本文件
conf:主配置文件,其中包含几个重要文件
lib:运行库的jar包(一般不动)
logs:日志文件
webapps:web应用默认部署目录
work:Tomcat的工作目录,存放jsp编译后的class文件,用于清楚Tomcat缓存、我wrok目录
JVM
JVM就是java的虚拟机,是java应用程序在计算上运行的核心组件,jvm负载将编译后的iava字节码
(.class文件)解释或者编译成本地的机器码,计算机能够执行它。JVM还提供好了内存管理,垃圾
回收,线程管理;确保java程序在不同平台可以有一致性的功能。
JVM 优化配置
堆内存 非堆内存
- 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
堆区
堆区当中分为:新生代、中生代、老年代、永久代
- 新生代:是每一个新建对象占用的空间
- 中生代:Java垃圾回收机制对堆区资源回收,新生代未被回收的资源就是中生代
- 老年代: 则是中生代未被回收的资源
JVM大小:新生代+中生代+老年代+永久代
Tomcat 虚拟主机配置
一台服务器上在一个tomcat中会部署多个虚拟机服务器,为了减少系统的资源消耗
命令解析:
Tomcat 优化
Tomcat默认安装下的缺省配置并不适合生产环境,它可能会频繁出现假死现象需要重启
只有通过不断压测优化才能让它最高效率稳定的运行
优化主要包括三方面,分别为操作系统优化(内核参数优化),Tomcat配置文件参数优化,Java虚拟机 (JVM) 调优
启动速度的优化:
修改JDK参数
server.xml 对主配置文件的优化
文本: text/html、text/plain
图像: image/jpgimage/gif
音频: audio/wav audio/mp3
视频: video/mp4 video/avi
应用程序: application/pdf application/json