当前位置: 首页 > news >正文

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

相关文章:

tomcat的介绍与优化

tomcat介绍 tomcat和php一样,都是用来处理动态页面的。 tomcat也可以作为web应用服务器,开源的。 php .php tomcat .jsp nginx .html tomcat 是用java代码写的程序,运行的是javaweb应用程序 tomcat的特点和功能: 1.servlet容器…...

Python 插入、替换、提取、或删除Excel中的图片

Excel是主要用于处理表格和数据的工具,我们也能在其中插入、编辑或管理图片,为工作表增添视觉效果,提升报告的吸引力。本文将详细介绍如何使用Python操作Excel中的图片,包含以下4个基础示例: 文章目录 Python 在Excel…...

紧凑型建模的veriloga语句要怎么看?

说点人话,真传一句话,那些一堆公式似是而非的东西,都是半懂不懂的人沽名钓誉用的。 其实建模,归根结底明白几个东西就行了。 1.什么是你的输入和输出信号? 2.你对输入输出信号要建立什么功能关系? 那我们看…...

大语言模型系列-Transformer介绍

大语言模型系列:Transformer介绍 引言 在自然语言处理(NLP)领域,Transformer模型已经成为了许多任务的标准方法。自从Vaswani等人在2017年提出Transformer以来,它已经彻底改变了NLP模型的设计。本文将介绍Transforme…...

JavaDS —— 顺序表ArrayList

顺序表 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。在物理和逻辑上都是连续的。 模拟实现 下面是我们要自己模拟实现的方法: 首先我们要创建一个顺序表,顺序表…...

Sphinx 搜索配置

官方文档 http://sphinxsearch.com/docs/sphinx3.html 支持中文,英文,日文,韩文,俄罗斯语搜索 版本是 官网3.6.1版本 文件 sphinx.conf.dist 的windows 配置,官网下载下来后微微配置即可。 # Minimal Sphinx confi…...

如何在不关闭防火墙的情况下,让两台设备ping通

问题现象 如题,做虚拟机实验的时候,有一台linux系统的虚拟机配置的ip地址是192.168.172.181 物理主机的ip地址是192.168.172.1 此时物理主机可以ping通虚拟机 但是虚拟机不能ping通物理主机 此时我们可以想到,有可能是物理主机防火墙的原因。…...

windows USB 设备驱动开发-USB 等时传输

客户端驱动程序可以生成 USB 请求块 (URB) 以在 USB 设备中向/从常时等量端点传输数据。虽然USB设备一向以非等时传输出名,USB提供的是一种串行数据,而非等时,但是USB仍然设计了等时传输的机制,但根据笔者的经验,等时传…...

【文件共享 windows和linux】Windows Server 2016上开启文件夹共享,并在CentOS 7.4上访问和下载文件

要在Windows Server 2016上开启文件夹共享,并在CentOS 7.4上访问和下载文件,请按照以下步骤操作: 在Windows Server 2016上开启文件夹共享: 启用SMB服务: 打开“服务器管理器”。选择“文件和存储服务” > “共享…...

【知网CNKI-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...

【Python_GUI】tkinter常用组件——文本类组件

文本时窗口中必不可少的一部分,tkinter模块中,有3种常用的文本类组件,通过这3种组件,可以在窗口中显示以及输入单行文本、多行文本、图片等。 Label标签组件 Label组件的基本使用 Label组件是窗口中比较常用的组件,…...

zdppy+onlyoffice+vue3解决文档加载和文档强制保存时弹出警告的问题

解决过程 第一次排查 最开始排查的是官方文档说的 https://api.onlyoffice.com/editors/troubleshooting#key 解决方案。参考的是官方的 https://github.com/ONLYOFFICE/document-server-integration/releases/latest/download/Python.Example.zip 基于Django的Python代码。 …...

C语言从头学31——与字符串变量相关的几个函数

strlen、strcpy、strcat、strcmp、sprintf这些函数都是与字符串相关的,除了sprintf是定义在stdio.h中外,其余几个都定义在string.h中,比较新的编译器版本stdio.h中已经含有string.h的内容,所以编程时不需要再包含string.h这个头文…...

Laravel批量插入数据:提升数据库操作效率的秘诀

Laravel批量插入数据:提升数据库操作效率的秘诀 Laravel作为PHP的现代Web应用框架,提供了优雅而简洁的方法来处理数据库操作。批量插入数据是数据库操作中常见的需求,尤其是在处理大量数据时,批量插入可以显著提高性能。本文将详…...

OpenCV:解锁计算机视觉的魔法钥匙

OpenCV:解锁计算机视觉的魔法钥匙 在人工智能与图像处理的世界里,OpenCV是一个响当当的名字。作为计算机视觉领域的瑞士军刀,OpenCV以其丰富的功能库、跨平台的特性以及开源的便利性,成为了开发者手中不可或缺的工具。本文将深入…...

手写简单模拟mvc

目录结构: 两个注解类: Controller: package com.heaboy.annotation;import java.lang.annotation.*;/*** 注解没有功能只是简单标记* .RUNTIME 运行时还能看到* .CLASS 类里面还有,构建对象久没来了,这个说明…...

【FreeRTOS】同步互斥与通信 FreeRTOS提供的方法

目录 各类方法的对比队列事件组信号量互斥量任务通知 各类方法的本质 使用全局变量可以实现通信,但是使用全局变量会有一些缺陷。 那我们怎么保证通信的正确性呢??? 我们需要引入很多互斥的方法。除了互斥之外,还需要高…...

Kafka 面试题指南

Kafka 面试题指南 本文档提供了一份详细的 Kafka 面试题指南,涵盖了 Kafka 的核心概念、架构、配置、操作和实际应用场景等方面的内容。希望通过这份指南能够帮助你在 Kafka 面试中取得成功。 目录 Kafka 基础知识 什么是 Kafka?Kafka 的主要特点是什…...

2024年7月5日 (周五) 叶子游戏新闻

老板键工具来唤去: 它可以为常用程序自定义快捷键,实现一键唤起、一键隐藏的 Windows 工具,并且支持窗口动态绑定快捷键(无需设置自动实现)。 卸载工具 HiBitUninstaller: Windows上的软件卸载工具 《乐高地平线大冒险》为何不登陆…...

热门开源项目推荐:探索开源世界的精彩

热门开源项目推荐 随着开源程序的发展,越来越多的程序员开始关注并加入开源大模型的行列。开源不仅为个人学习和成长提供了绝佳的平台,也为整个技术社区带来了创新和进步。无论你是初学者还是经验丰富的开发者,参与开源项目都能让你受益匪浅…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...