tomcat介绍
tomcat和php一样,都是用来处理动态页面的。
tomcat也可以作为web应用服务器,开源的。
php .php
tomcat .jsp
nginx .html
tomcat 是用java代码写的程序,运行的是javaweb应用程序
tomcat的特点和功能:
1.servlet容器:执行java servlet 服务端的Java程序,处理客户端的http请求,以及响应
2.jsp容器 javaserver page 动态页面技术,可以在html页面嵌入Java代码
3.自身也是一个http服务器
4.tomcat是轻量级的动态页面处理程序,高并发场景不适用
tomcat自身的优化 及系统内核优化,jvm优化
servlet:
是java语言中用于开发web应用程序的关键组件
处理http请求,生成动态内容以及响应客户端请求
处理http请求
生成动态内容
处理java业务逻辑
会话管理 保持用户状态信息,购物车同步,用户登录等等
也可以转发nginx的动态请求到数据库
jsp:web应用程序界面,使用java语言实现
.jsp为结尾的文件 index.jsp
tomcat 的组件
connector:负责对外接收和响应请求,是tomcat与客户端沟通的枢纽,监听端口接收外接请求
端口: 8080
接收到了请求之后,传递给其他组件进行处理,处理完成之后回到connector ,再响应客户端。
container:负责处理业务逻辑,由 engine host context wrapper四个功能组成
engine:用来管理多个虚拟主机,一个service只能有一个engine
host:一个host就是一个主机,也可以叫站点 通过配置host可以添加多个站点
context:一个context代表一个web应用
wrapper:封装器,负责处理最底层的逻辑
service:对外提供web服务 包含connector和container
tomcat可以有多个service 每个service之间互相独立
tomcat目录的作用
1.bin 存放启动和关闭tomcat脚本的文件 startup.sh shutdown.sh
2.conf 存放tomcat的主配置文件 server.xml主配置文件
context.xml host的默认配置信息
tomcat-user.xml 登录时认证用户和密码的相关信息
lib tomcat运行时需要的jar包 一般不动
logs:日志文件 catalina.out 主日志文件
temp:存放tomcat运行时产生的文件
webapps:用来部署web应用的目录,类似于nginx的html
tomcat的优化
1.tomcat自身的优化
2.内核优化
3.jvm优化
tomcat的并发处理能力不强
优化tomcat的启动速度
file:/dev/urandom
非阻塞的版本,不依赖系统的终端,进程忙也不会进入等待状态。处理速度相对较快
如果对应用的安全性要求比较高,使用 /dev/random
默认配置不适合生产环境,可能频繁地出现假死,需要不停的重启
根据实际情况自行测试
自身的优化
port 8080 http
8443 https
接收客户端https的请求
maxThreads:tomcat使用线程来处理接收请求的个数。即tomcat最多可以创建的线程,默认200个 一般 500-1000个
minSpareThreads 最小空闲数线程,tomcat开启之后,没人使用也会有进程待命,默认10
maxSpareThreads 最大空闲数线程,一旦线程总数超过这个值,tomcat就会关闭不再需要的线程,默认-1,不限制(不关闭其他线程),一般不设置
connectionTimeout="20000"网络连接超时时间,单位是毫秒,设置成0,永不超时。默认状态即可
enableLookups 是否支持反向解析 true false 一般是false关闭,提高处理速度
disableUploadTimeout 上传时是否使用超时机制,true是关闭 ,false是开启
connectionUploadTimeout上传的超时时间 ,默认10s , 一般 15 、20
acceptCount 当所有可用的处理请求的线程数都被使用时,可以接入请求的最大队列长度,超过这个数字的请求将被不予处理(直接丢弃),默认100个
compression 是否对响应数据进行压缩,on开启,off关闭,默认off 。开启压缩之后可以有效地减少页面的大小(文本不会压缩,图片,音频,视频),一般可以减少三分之一,节省带宽(实测没什么用)
compression="on"之后:
compressionMinSize 响应压缩的最小值,只有响应的报文大于这个值才会压缩,如果开启压缩,默认值2048(2M)
noCompressionUserAgents=“浏览器名称” 对于这些浏览器,不启用压缩。
compressableMimeType=“text/plain,video/mp4” 压缩类型,指定对哪些文件类型进行压缩
常用的页面类型
文本类型 text/plain text/html text/css text/javascript
图片类型 image/jpg image/jpeg image/gif
音频类型 audio/ogg、wav、mpeg
音频 video/mp4,webm,rmvb,quicktime
应用程序 application/pdf,json,xml
内核优化:
系统安全的优化
1.vim /etc/security/limits.conf
打开文件数限制,系统初始化第一步要做的事
2.内核参数文件
vim /etc/sysctl.conf
net.ipv4.ip_forward=0/1禁用/开启 数据包转发功能 如果做路由器,必须打开,0关,1开
net.ipv4.tcp_max_tw_buckets=2000 允许timewait的最大数量
net.ipv4.tcp_sack=1 启用有选择的应答,提高tcp的处理性能
net.core.netdev_max_backlog=262144 字节 网络接口接受数据包队列的最大大小
vm.swappiness=0,关闭内存的交换行为,不使用交换分区,k8s默认不能使用交换分区,否者会报错
net.ipv4.tcp_max_orphans 系统允许的最大的tcp连接数量
net.ipv4.ip_local_port_range=1024 65000
1024 65000 设定系统的端口范围
net.ipv4.tcp_fin_timeout=10 设置tcp关闭连接的超时时间
net.ipv4.tcp_keepalive_time 设置tcp的keepalive包的探测包的发送频率,用于检测连接状态
JVM优化
JAVA_OPTS=“$JAVA_OPTS -server -Xms2048m -Xmx2048m -Xmn768m -XX:ParallelGCThreads=2 -XX:PermSize=1024m -XX:MaxPermSize=1024m -Djava.awt.headless=true -XX:+DisableExplicitGC”
cygwin=false
-Xms2048m java初始化堆的大小,分配jvm的最小内存,cpu的性能比较高,可以分配的高一点。
-Xmx2048m Java堆的最大值,即jvm的最大内存,取决于物理内存的大小,官方建议与xms一样
设置成物理内存的一半
-Xmn768m 新生代内存的大小,官方推荐为jvm内存的最大值的3/8
java自带垃圾回收机制 java进行垃圾回收之后,不需要重新计算堆区的大小
堆区:新生代 中生代 老生代
每生成一个新的对象,对象占用的内存空间就是新生代空间
垃圾回收对堆区当中的资源进行回收之后,新生代没有被回收的资源转移到中生代,之前的中生代会转移到老年代。
整个jvm堆的大小:新生代+老生代+永久代(系统自带的)
-XX:ParallelGCThreads=2 配置并行收集器的线程数,同时有多少个线程一起来进行垃圾回收,与cpu数目的一半
-XX:PermSize=1024m 设置非堆内存的初始值,持久代内存的大小,默认物理内存的1/4,建议设置为jvm内存的一半
持久代:非堆内存是不会被Java的垃圾回收机制处理的
-XX:MaxPermSize=1024m 非堆内存的最大值,与初始值一致
-Djava.awt.headless=true 防止在linux访问的情况下 web页面的图片不能打开
-XX:+DisableExplicitGC" 老年代的收集算法,缩短垃圾回收机制回收的时间。
PS Eden Space 堆内存 创建一个新的对象都在对内存中,新生代
PS Old Gen 堆内存,长期存活的对象,永生代 老年代
PS Survivor Space 堆内存,PS Eden Space和 PS Old Gen 之间的存活对象,中生代
CodeCache非堆内存,存储已经编译的代码
Compressed Class Space非堆内存 存储已经压缩过的类定义
Metaspace非堆内存,存储元数据的区域。
ajp-nio-8009
ajp-nio 连接器的类型,ajp是协议,nio异步非阻塞的通信方式
ajp协议: tomcat服务 器和web服务器之间进行连接的协议,可以提供负载均衡和高效转发。nio可以提高并发的处理能力
8009就是ajp的默认端口。
tomcat和nginx实现动静分离
访问nginx就是静态页面,
nginx代理 index.jsp 可以访问tomcat的动态页面