目录
tomcat
tomcat优点
tomcat核心组件
Web容器
其他
功能组件
connector
container
tomcat处理请求过程
目录文件内容
内存池
堆区
JVM优化
ajp-nio-8009
启动速度优化
配置文件优化
tomcat
tomcat是基于Java代码开发的开放源代码的web应用服务器
tomcat就是处理动态请求和基于Java代码的页面开发,可以在html当中写入Java代码,tomcat可以解析html页面中的Java执行动态请求、动态页面
tomcat的机制有问题,不对tomcat进行优化会出现一些bug,如假死、停机。小集群、小服务、小应用使用tomcat,大并发场景不适合
tomcat优点
1.免费
2.开源,可以二次封装
3.可配置性强,可以根据需要进行自定义配置,包括端口号、虚拟主机等
4.tomcat自带安全机制,可以配置用户认证、授权、加密传输
5.部署应用非常快捷,tomcat会自动部署、自动运行
tomcat核心组件
Web容器
完成文本服务器的功能,是一个web应用
web---->http(s)---->访问页面---->文件index.jsp
web容器中,封装了一组文件,在这一组文件之中进行集中化管理
管理web动态页面
Servlet容器
名字为catalina,处理servlet代码,处理web请求(http),生成动态内容的Java类。
1、处理http请求
2、生产动态内容,为了和数据库交互---->用户发起的;jsp当中的
3、会话管理,跟用户在不同请求之间的状态,通过管理可以在用户访问不同页面时保持用户的状态
4.与数据库交互,servlet可以连接到数据库执行查询和更新操作。这就是servlet能够生成动态内容的原因
JSP容器
jisp将动态页面翻译成servlet代码,并用标准格式展示jsp静态页面
写好一个包之后丢进/usr/local/tomcat/webapps中
jsp jiava server pages 动态页面的开发技术。使用jsp标签,在html页面中插入Java代码
jsp容器---->将html页面中的Java代码翻译---->执行并展示结果
jsp标签通常以<%开头,以%>结尾
其他
面向对象:客观存在的实体和他们之间的关系,映射到计算机程序当中计算机程序被组织成这一组相互作用的对象,每个对象都有数据(属性)和行为(方法)。
类:定义一组属性和方法,创建对象、实例。
封装:对象的属性和方法捆绑在一块,提供一个接口,可以让其他对象使用。
继承:一个类,可以继承另一个类 父类 子类 子类可以重用父类的代码,而且还在不修改代码的情况下,进行扩展
多态:不同类的对象对相同的消息,做出不同的响应。
功能组件
connector
负责对外接收和响应请求,是tomcat与外界的交通枢纽,即负责监听端口,也复杂接受外界请求交给container处理
container
负责对内处理业务逻辑
Engine 引擎,管理虚拟机(service,一个service可以包含多个虚拟主机),可以管理多个虚拟主机,一个个service中只能有一个Engine
Host 代表一个虚拟机,也可以叫站点
Context web应用,可以包含多个servlet
wrapper 封装器,最底层,每一个wrapper中都封装一个servlet,负责对象实例的创建、执行、销毁
tomcat处理请求过程
1.输入网址,请求发送到8080端口,被监听获得
2.connector会把请求转发到container处理,由engine查询要访问的虚拟主机---->Host主机站点包含请求页面的位置。webapps---->context,就是index.jsp中的内容---->wrapper(servlet)响应解析,处理请求---->jsp翻译---->页面展示
目录文件内容
bin 存放的是启动和关闭tomcat的脚本文件
conf
主配置文件 server.xml
contex.html host的默认配置信息
tomcat-user.xml 认证用户密码的配置文件
web.xml servlet的规范标准,配置servlet的文件
lib tomcat运行库依赖的jar包,一般不动,除非链接第三方,如redis、数据库
logs 日志文件
webapps web应用部署的默认目录
work tomcat的工作目录存放jsp编译之后的class文件,清除tomcat文件就是删work目录
JVM 就是Java的虚拟机,是Java应用程序在计算机上运行的核心组件,JVM复制将编译后的Java字节码(.class文件)解释或者编译成本地的机器码,使得计算机能够执行。JVM还提供了内存管理、垃圾回收、线程管理,确保Java程序在不同平台可以有一致的功能
内存池
PS Eden Space 堆内存,存储新创建的对象
PS Old Gen 堆内存,存储长时间存活的对象
PS Survivor Space 堆内存,存储创建之后生命周期较短的对象
Code Cache 非堆内存,存储已经编译的代码
Compressed Class Space 非堆内存,存储已经压缩的类
Metaspace 非堆内存,存储类的元数据
堆区
堆区当中会区分新生代 中生代 老年代
每一个新建的对象占用的空问,就是新生代。
java垃圾回收机制对堆区进行资源回收,新生代中没有被回收的资源,就是中生代。
JVM大小=新生代+中生代+老年代+永久代
JVM优化
catalina.sh 就是servlet代码以及容器管理
JAVA_OPTS="$JAVA_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堆最大能多大,jm的最大内存。和硬件内存挂钩。根据官方文档,起始值和最大值保持一致,XMS和XMX设为一样的,内存可以设为物理内存的一般
-Xmn768m 新生代的内存大小,官方推荐为整个堆大小的3/8
XX:ParallelGCThreads=2 配置并行收集器的线程数,绝对同时可以有多少个线程进行垃圾回收
XX:Permsize 设置持久代内存的大小,默认是物理内存的1/4
-XX:MaxPermsize=1024m 最大非堆内存的大小,默认是物理内存的1/4
非堆内存是不会被垃圾回收机制处理的,持久代内存与最大非堆内存不能超出操作相系统的可用内存。设置成一样大,可以减轻伸缩堆大小的压力
Djava.awt.headless=true 避免在linux环境下,web不能正常打开,以正常显示图片
-XX:+DisableExplicitGC" 避免JVM空间大起大落,影响系统的响应时间,响应速度变得非常慢
ajp-nio-8009
ajp-nio 连接器的类型
nio 进行异步非阻塞。
8009 连接器正在监听的端口号。
AJP: 使用ajp协议,将tomcat服务器与前端web服务器进行连接。提供负载均衡和高效的请求转发
http-nio-8080
处理http请求,和客户端通信的端口
tomcat 虚拟主机配置
一台服务器上在一个tomcat中会部署多个虚拟机服务器。减少系统的资源消耗
启动速度优化
第一次启动tomcat会发现启动速度很慢,这时需要改变jdk参数
vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
securerandom.source=file:/dev/urandom
配置文件优化
针对server.xml主配置文件的优化。
redirectPort: 如果某连接器支持的协议的是http,当接受客户端发来的请求时https,就会启用此端口(8443)
maxthreads tomcat 使用线程来处理请求的,可以创建的最大线程数,也就是并发连接数,默认为200
minisparethreads 最小空闲线程数,决定了开启tomcat时会有多少线程,默认为10
maxsparethreads 最大备用线程,一旦创建的线程超过这个值,tomcat会关闭不再需要的端口线程,默认为-1,也就是不限制。一般不会指定
URIEncoding URL的格式编码,默认utf-8。需要分别指定,一般不动
connectionTimeout 网络连接超时,单位为毫秒,默认为0,永不超时。一般设置为20000
enablelookups 是否反向解析域名,能够获取远程的主机名。一般设置为false,直接返回IP地址,提高处理能力
disableUploadTimout 上传超时时间,设置为true
connectionUploadTimeout 设置上传超时时间,没有标准
acceptCount 所有可以使用的线程都被占用时可以传入连接请求的最大队列长度,默认为100,超出的直接丢弃不再处理
compression 是否开启页面和响应数据的压缩。off 关 on 开 force 所有情况下都进行压缩。默认是off,建议on打开
compressionMinSize 压缩响应最小值,等于或小于不会响应,一般设置为2048
compressionMimeType 可以被压缩MIME的类型