tomcat:
- 开放源代码web应用服务器,是基于jave代码开发的,就是处理动态请求和基于java代码的页面开发
可以在html当中写入java代码,tomcat可以解析html页面当中的java,执行动态请求,动态页面
tomcat的缺点:
- 机制有问题: 不对tomcat进行优化,会出现: 假死、停机。小集群,小服务,小应用使用于tomcat,大并发的场景不适用
tomcat的优点:
- 免费
- 开源,可以二次封装
- 可配置性强,可以根据需要进行自定义配置,包括端口号,虚拟主机,等等.
- 安全性:tomcat自带安全机制,可以配置用户认证、授权、加密传输。
- 部暑应用非常快捷:tomcat会自动部署,自动运行
核心三组件:
-
web容器:
完成web服务器的功能,web应用。
web------------>http(s)------访问页面---------------->文件index.jsp
web容器中,封装了一组文件,在这一组文件之中,进行集中化管理web动态页面。
-
servlet容器:
名字: catalina,处理servlet代码就是处理web请求(http),以及生成动态内容的java类处理http请求。
-
jsp:
jsp动态页面翻译成servlet代码,用标准格式,展示isp的静态页面。
servlet的功能:
-
处理http请求
-
生产动态内容,为了和数据库交互-----》用户发起的;jsp当中的。
-
会话管理,跟用户在不同请求之间的状态,通过管理,可以在用户访问不同页面时保持用户的状态.
-
与数据库交互,servlet可以连接到数据库,执行查询和更新操作,这就是servlet能够生成动态内容的原因。
jsp: ( java server pages )
动态页面的开发技术。使用jsp标签indexjsp 在html页面中插入java代码
jsp容器---》html页面当中的java代码翻译-----》执行----》展示结果
通常以 <%,开头 %>,结尾
功能组件:
-
connector:负载对外接受和响应请求,是tomcat与外界的交通枢纽。监听端口,也可以接受外界请求,交给container处理。
-
container:负责对内处理业务逻辑。
-
Engine:引擎,管理虚拟机(service,一个service里面可以包含多个虚拟主机。),可以管理多个虚拟主机,一个service里面只能有一个Engine:
-
Host: 代表一个虚拟机,也可以叫站点
-
Context :web应用。包含多个servlet。
-
wrapper: 封装器,最底层,每一个wrapper封装 个servlet,负责对象实例的创建,执行,销毁。
( 父子关系,工作方式也是从上到下 )
exportJAVA_HOME=/usr/java/jdk1.8.0 201-amd64
#指定jdk的安装路径。jdk解释器,类似于shell,各种工具。
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$]AVA_HOME/lib/dt.jar
classpath: 定义类的环境变量,环境类的库。
export PATH=AVA_HOME/bin:$PATHI
#可执行文件
tomcat主要配置文件:
-
bin: 存放的启动和关闭tomcat脚本文件
-
lib:tomcat运行库的iar包,一般不动,除非连接第三方-----redis,数据库
-
logs:日志文件
-
webapps: web应用部署的默认目录
-
work:tomcat的工作目录。存放isp编译之后的class文件,清楚tomcat缓存,就是删work目录,
-
conf:主配置文件 serverxml主配置文件
contex.html :host的默认配置信息
tomcat-userxml : 认证用户密码的配置文件
web.xml:配servlet servlet的规范标准
JVM:就是java的虚拟机,是java应用程序在计算上运行的核心组件,
-
jvm负责将编译后的java字节码(class文件)解释或者编译成本地的机器码,计算机能够执行它。JVM还提供好了内存管理,垃圾回收,线程管理。确保java程序在不同平台可以有一致性的功能。
PA Eden Space :堆内存,存储新创建的对象
PS Old Gen :堆内存,存储存储长时间存活的对象
PS Survivor Space :堆内存,存储创建之后,生命周期较短的对象
Code Cache :非堆内存,存储已经编译的代码
Compressed Class Space :非堆内存,存储已经压缩的类
Metaspace :非堆内存,存储类的元数据
命令:
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:cpu性能高,这个值,可以设高一点
-Xmx2048m:JAVA堆最大能多大,m的最大内存。和硬件内存挂钓。根据官方文档,起始值和最大值保持一致,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”: 避免ivh空间大起大落,影响系统的响应时间。响应速度会很慢
非堆内存是不会被垃圾回收机制处理的,-xx:Permsize持久代内存与最大非堆内存不能超出操作系统可用的内存。设置成一样大,可以减轻伸缩堆大小的压力。
-
堆区当中: 新生代、中生代、老年代
- 每一个新建的对象占用的空间,就是新生代
- java垃圾回收机制对堆区进行资源回收,新生代中没有被回收的资源,就是中生代。
- 中生代没有被回收,就是老年代。
jvm大小:新生代+中生代+老年代+永久代
ajp-nio-8009:
ajp-nio: 连接器的类型 AJP:使用ajp 协议。nio:进行异步非阻塞。
8009:连接器正在监听的端口。
AJP: 将tomcat服务器与前端web服务器进行连接。提供负载均衡和高效的请求转发
http-nio-8080:
处理http请求,和客户端通信的结果
tomcat部署虚拟主机:
一台服务器上在一个tomcat中会部署多个虚拟机服务器。减少系统的资源消耗。
<Hostname="www.kgc.comappBase="webapps"unpackwARs="true"autoeploy="true'xmIvalidation="false” xmINamespaceAware="false">
<Context docBase="/usr/7ocal/tomcat/webapps/kgc”path="” reloadable="true”/>
</Host>
#访问www.kgc.com 就是访问/usr/7ocal/tomcat/webapps/kgc下面的index.jsp
-
hostname:主机名
-
appBase: 存放web程序的目录
-
unpackWARs: 优先对war文件进行展开,默认就是true.
-
autoDeploy:只要tomcat处于运行,会对webapps中的文件进行自动部署。默认也是true
-
xmlvalidation; 是否验证xml文件的有效性。默认就是false
-
xmINamespaceAware: 是否验证命名空间。
tomcat启动速度优化:
第一次启动tomcat会发现启动速度很慢
jdk的参数路径:
/usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
对117行进行更改:
securerandom.source=file:/dev/urandom
Tomcat 优化 :server.xml针对主配置文件的优化。
-
redirectPort: 如果某连接器支持的协议的是http,当接受客户端发来的请求时https,就会启用此端口。8443
-
maxthreads; tomcat使用线程来处理请求的,可以创建的最大线程数,也就是并发连接数。默认200
-
minsparethreads:最小空闲线程数,开启tomcat时,会有多少线程。默认是10.
-
maxSparethreads:最大备用线程。一旦创建的线程超过这个值,tomcat会关闭不再需要的端口线程。默认是-1,也就是不限制。一般不指定
-
URIEncoding:URL的格式编码,默认utf-8.需要分别指定,所以一般也不动
-
connnectionTimeout: 网络连接超时,单位: 毫秒。为0,永不超时,一般为20000毫秒
-
enablelookups:是否反向解析域名,为了能够获取远程的主机名。一般设置为false,直接返回IP地址。提高了处理能力。
-
disableUploadTimeout:上传超时时间,设置为true.
-
connectiondploadTimeout: 因人而异,没有标准答案,1分钟,30秒
-
acceptCount: 所有可以使用的线程都被占用了,可以传入连接请求的最大队列长度。默认100个。超出范围直接丢弃 ,不再处理
-
compression: 是否开启页面和响应数据的压缩。 off 关、on开、force ( 所有的情况下都进行压缩 ) 默认是off 建议on