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

相关推荐

  1. tomcat介绍优化

    2024-07-12 19:08:02       22 阅读
  2. Tomcat基础优化

    2024-07-12 19:08:02       60 阅读
  3. Tomcat服务器优化经验

    2024-07-12 19:08:02       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 19:08:02       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 19:08:02       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 19:08:02       62 阅读
  4. Python语言-面向对象

    2024-07-12 19:08:02       72 阅读

热门阅读

  1. Elasticsearch实战指南:从下载到高级应用全解析

    2024-07-12 19:08:02       23 阅读
  2. python .join用法

    2024-07-12 19:08:02       20 阅读
  3. 力扣995.K连续位的最小翻转次数

    2024-07-12 19:08:02       25 阅读
  4. ubuntu cp 命令 拷贝文件

    2024-07-12 19:08:02       22 阅读
  5. 探索 Scikit-Learn:机器学习的强大工具库

    2024-07-12 19:08:02       22 阅读
  6. C# —— try catch

    2024-07-12 19:08:02       18 阅读
  7. 机器学习 - one-hot编码技术

    2024-07-12 19:08:02       23 阅读
  8. 【人生苦短,我学 Python】(15)迭代器、生成器

    2024-07-12 19:08:02       24 阅读
  9. hot100 | 十、回溯

    2024-07-12 19:08:02       23 阅读
  10. Eureka: Netflix开源的服务发现框架

    2024-07-12 19:08:02       21 阅读
  11. Gradle 介绍

    2024-07-12 19:08:02       17 阅读
  12. tomcat

    2024-07-12 19:08:02       17 阅读
  13. 【jxls 单元格合并】

    2024-07-12 19:08:02       16 阅读
  14. 基于Hadoop的区块链海量数据存储的设计与实现

    2024-07-12 19:08:02       21 阅读
  15. 1 HTML and CSS

    2024-07-12 19:08:02       20 阅读
  16. 通用脚本大全

    2024-07-12 19:08:02       20 阅读
  17. c#猜数字小游戏

    2024-07-12 19:08:02       23 阅读