tomcat的介绍与优化

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的动态页面

相关推荐
骑鱼过海的猫1235 小时前
【tomcat】tomcat学习笔记
笔记·学习·tomcat
qmx_075 小时前
HTB-Jerry(tomcat war文件、msfvenom)
java·web安全·网络安全·tomcat
为风而战6 小时前
IIS+Ngnix+Tomcat 部署网站 用IIS实现反向代理
java·tomcat
寻爱的希斯克利夫12 小时前
tomcat 配置jenkins_home 目录
servlet·tomcat·jenkins
qq_2906062714 小时前
tomcat,el表达式执行带参数命令,字符串数组,String[],el表达式注入
java·tomcat
LCG元1 天前
Tomcat窗口运行修改窗口标题显示项目日期时间
运维·tomcat
readmancynn2 天前
XML_Tomcat_HTTP
xml·http·tomcat
kowloon...2 天前
tomcat改默认登录页面
tomcat
小蒜学长3 天前
集团门户网站设计与实现
java·开发语言·数据库·学习·tomcat·maven
程序员大金3 天前
基于SpringBoot+Vue+MySQL的美术馆管理系统
java·vue.js·spring boot·后端·mysql·tomcat