Tomcat部署及优化

Tomcat概述

            Tomcat 是 Java 语言开发的,Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,是 Apache 软件基金会的 Jakarta 项目中的一个

核心项目,由 Apache、Sun 和其他一些公司及个人共同开发而成。在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP

程序的首选。一般来说,Tomcat 虽然和 Apache 或者 Nginx 这些 Web 服务器一样,具有处理 HTML 页面的功能,然而由于其处理静态 HTML 的能

力远不及 Apache 或者 Nginx,所以 Tomcat 通常是作为一个 Servlet 和 JSP 容器,单独运行在后端执行动态请求和动态页面

特点:1.开源(可二次封装),免费,轻量级,

           2.基于Java代码开发执行的,可配置性较强(根据需要进行自定义配置,端口号,虚拟主机等)

           3.适用于小集群小服务小应用,不适用于大并发

           4.安全性:本身自带安全机制,可以配置用户认证,授权,加密传输

           5.部署应用快捷:tomcat会自动部署,自动运行(webapps)

 web容器:完成web服务器的功能,即web应用

web--------->http(s)------------>访问页面---------->文件index.jsp

特点:在web容器里封装了一组的文件进行集中化管理,管理web的动态页面

servlet容器:处理servlet代码

1.就是来处理web请求(http)

2.生成动态内容的java类(主要是为了和数据库进行交互 )

3.会话管理:跟踪用户在不同请求之间的状态,通过管理可以在用户访问不同页面时保持用户的状态

4.与数据库进行交互,执行查询和更新操作

JSP:将动态页面翻译为servlet的代码,用标准格式,展示jsp的静态页面

java server pages 动态页面的开发技术,使用jsp标签index.jsp 在html页面当中插入java代码

jsp容器----->html页面当中的java代码翻译----->执行展示结果

功能组件:

connector:负责对外接收和响应请求,是tomcat与外界的交通枢纽,监听端口,也可以接收外界的请求,交给contaiker处理

container:负责对内处理业务逻辑

Engine:引擎,管理虚拟机一个service可以管理多个虚拟机(即一个service可以包含多个虚拟机),一个server里面只能有一个engine

Host:代表一个虚拟机,也可以叫做站点

Context:web应用,包含多个servlet

wrapper:封装器,最底层,每一个wrapper都封装一个servlet,负责对象实例的创建,执行,销毁

父子关系,工作方式为从上到下

Container 结构分析

tomcat请求过程

1、用户在浏览器中输入网址,请求被发送到本机端口 8080,被在那里监听的 Connector 获得;
2、Connector 把该请求交给它所在的 Service 的 Engine(Container)来处理,并等待 Engine 的回应;
3、请求在 Engine、Host、Context 和 Wrapper 这四个容器之间层层调用,最后在 Servlet 中执行对应的业务逻辑、数据存储等。
4、执行完之后的请求响应在 Context、Host、Engine 容器之间层层返回,最后返回给 Connector,并通过 Connector 返回给客户端。

Tomcat 服务部署


1.关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下


jdk-8u201-linux-x64.rpm
apache-tomcat-9.0.16.tar.gz
 
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

2.安装JDK

cd /opt
rpm -ivh jdk-8u201-linux-x64.rpm 
java -version

3.设置JDK环境变量

vim /ect/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
 
suorce /etc/profile.d/java.sh
java -version


 

小知识
CLASSPATH:编译、运行Java程序时,JRE会去该变量指定的路径中搜索所需的类(.class)文件。
dt.jar:是关于运行环境的类库,主要是可视化的 swing 的包。
tools.jar:主要是一些jdk工具的类库,包括javac、java、javap(jdk自带的一个反编译工具)、javadoc等。
JDK :java development kit (java开发工具)
JRE :java runtime environment (java运行时环境)
JVM :java virtuak machine (java虚拟机),使java程序可以在多种平台上运行class文件。


4.测试jdk是否安装成功


       vim编写java源代码,比如 Hello.java ;
      在命令行中,输入命令:javac Hello.java,对源代码进行编译,生成 class 字节码文件;
      编译完成后,如果没有报错信息,输入命令:java Hello,运行 class 字节码文件,由 JVM 对字节码进行解释和运行,打印 “Hello World”。
         #类名、接口名命令:英文大小写字母、数字字符、$和_,不能使用关键字和数字开头;
一个单词命名时第一个单词的首字母要大写;多单词组成时,所有单词的首字母大写:XxxYyyZzz(驼峰命名法)


 编写测试
vim Hello.java
public class Hello {            
  public static void main(String[] args){
    System.out.println("Hello world!");
  }
}
javac Hello.java
java Hello

 5.安装启动Tomcat

cd /opt
tar zcxf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
##启动tomcat ##
#后台启动
/usr/lcoal/tomcat/bin/startup.sh 

/usr/lcoal/tomcat/bin/catalina.sh strat
    
#前台启动
/usr/local/tomcat/bin/catalina.sh run        
 
netatst -natp | gerp 8080
 
浏览器访问Tomcat的默认主页 http://IP地址:8080

  优化tomcat启动速度


第一次启动tomcat可能会发现 Tomcat 启动很慢,默认情况下可能会需要几十秒,可以修改jdk参数进行改。
vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
--117行--修改
securerandom.source=file:/dev/urandom

/dev/urandom是/dev/random的非阻塞版本,/dev/random的 random pool 依赖于系统中断,因此在系统的中断数不足时,/dev/random 设备会一直封锁,尝试读取的进程就会进入等待状态,直到系统的中断数充分够用,/dev/random设备可以保证数据的随机性。 /dev/urandom不依赖系统的中断,也就不会造成进程忙等待,但是数据的随机性也不高,所以该随机数的安全性理论上不高。如果应用对安全性要求很高,那么应该使用/dev/random。
 
/usr/local/tomcat/bin/shutdown.sh 
/usr/local/tomcat/bin/startup.sh 

JVM优化(面试重点!!!)

JVM:java虚拟机,是java应用程序在计算机上运行的核心组件,JVM负责将编译后的java字节码解释或者编译

catelina:容器的配置

PS Eden Space :堆内存,存储新创建的对象

PS Old Gen :堆内存,存储长时间存活的的对象

PS Survivor Space:堆内存,存储创建之后,生命周期较短的对象

Code Cache:非堆内存,存储已经编译的代码

Compressed Class Space:非堆内存,存储已经压缩的类

Metaspace:非堆内存,存储类的元数据

-server:第一个参数值,必须放在第一个,指定内存池

-Xms  2048m:初始java堆的大小,即分配JVM的最小内存,主要是看CPU来进行分配

-Xmx  2048m:JAVA堆最大是多大,也是jvm的最大内存,和硬件内存挂钩,根据官方文档,起始值和最大值保持一致

内存可以设为物理内存的一半

-Xmn  768m:新生代的内存大小,官方推荐为整个堆大小的八分之三

-XX:ParallelGCThreads=2:配置并行收集器的线程数,同时可以有多少个线程进行垃圾回收

-XX:PermSize:设置持久内存的大小,默认为物理内存的四分之一

-XX:MaxPermSize=1024m:最大的非堆内存的大小,默认也是物理内存的四分之一设置成一样大,可以减轻伸缩堆大小的压力

-Djava.awt.headless=true:避免在linux环境下。web不能正常打开以正常显示图片

-XX:+DisableExplicitGC:避免jvm空间大起大落,影响系统的响应时间。响应速度会很慢

堆区当中:新生代 中生代 老年代

每一个新建的对象占用的空间,就是新生代

java垃圾回收机制对堆区进行资源回收,新生代中没有被回收的资源就是中生代

中生代没有被回收,就是老年代

JVM的大小:新生代大小+中生代大小+老年代大小

Tomcat 部署虚拟主机

        一台服务器上在一个tomcat中部署多个虚拟机服务器,减少系统的资源消耗, 就需要使用到 Tomcat 虚拟主机。

例如现在新增两个域名 www.kgc.com 和 www.benet.com, 希望通过这两个域名访问到不同的项目内容

1.创建 kgc 和 benet 项目目录和文件


mkdir /usr/local/tomcat/webapps/kgc   
mkdir /usr/local/tomcat/webapps/benet
echo "This is kgc page\!" > /usr/local/tomcat/webapps/kgc/index.jsp
echo "This is benet page\!" > /usr/local/tomcat/webapps/benet/index.jsp

2.修改 Tomcat 主配置文件 server.xml


vim /usr/local/tomcat/conf/server.xml
--165行前--插入
<Host name="www.kgc.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
    <Context docBase="/usr/local/tomcat/webapps/kgc" path="" reloadable="true" />
</Host>   

<Host name="www.benet.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
    <Context docBase="/usr/local/tomcat/webapps/benet" path="" reloadable="true" />
</Host>

Tomcat 优化(面试!!!)

 1.优化tomcat启动速度

2.常用的优化相关参数

server.xml 针对主配置文件的优化

redirectPort:如果某连接支持的协议的是http,当接收客户端发来的请求https,就会启用此端口 8843

maxthreads:Tomcat使用线程处理请求,可以创建的最大线程数,也就是并发连接数,默认是200

minsparethreads:最小空闲线程数开启TOMCAT时会有多少线程

maxSparethreads:最大备用线程,一旦创建的线程超过这个值,tomcat会关闭不再需要的端口线程,默认为-1,也即是不限制,一般不进行指定

URIEncoding:URL的格式编码,默认为utf-8 需要分别进行指定,所以一般也不东

connectionTimeout:网络连接超市,单位毫秒。为0时永不超时,一般为20000毫秒

enablelookups:是否反向解析域名(IP-域名),主要目的为了能够获取远程主机的主机名,一般设置为false,直接返回IP地址,提高处理能力

disableUploadTimeout:上传超时时间,设置为true;

connectionUploadTimeout:因人而异,一分钟或者30S

acceptCount:所有可以使用的线程如果都被占用,可以传入连接请求的最大队列长度(默认100,超出范围直接丢弃不处理)

compression:是否开启页面和响应数据的压缩。off关  on开 force(所有的情况下都进行压缩;默认为off 建议on)

compressionMinsize : 压缩响应的最小值,等于或者小于不压缩

compressableMimeType:可以被压缩的MIME的类型

 优化配置

vim /usr/local/tomcat/conf/server.xml
......
<Connector port="8080" protocol="HTTP/1.1" 
connectionTimeout="20000" 
redirectPort="8443" 
--71行--插入
minSpareThreads="50" 
enableLookups="false" 
disableUploadTimeout="true" 
acceptCount="300" 
maxThreads="500" 
processorCache="500"
URIEncoding="UTF-8" 
compression="on" 
compressionMinSize="2048" 
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image /jpg,image/png"/>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/84583.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自建hexo博客并将原有的文章发布其上

1、保存粘贴到memo9中的博客文章&#xff0c;并将txt转换成word文档 varPowerShellPath, CommandLine: string; // , ScriptPath begin//save to txtMemo9.Lines.SaveToFile(test.txt);memo10.Lines.SaveToFile(txt2word.ps1);//save as docxPowerShellPath : powershell.exe…

企业有VR全景拍摄的需求吗?能带来哪些好处?

在传统图文和平面视频逐渐疲软的当下&#xff0c;企业商家如何做才能让远在千里之外的客户更深入、更直接的详细了解企业品牌和实力呢&#xff1f;千篇一律的纸质材料已经过时了&#xff0c;即使制作的再精美&#xff0c;大家也会审美疲劳&#xff1b;但是你让客户远隔千里&…

uniapp 微信小程序 订阅消息

第一步&#xff0c;需要先去小程序官方挑选一下订阅模板拿到模板id 订阅按钮在头部导航上&#xff0c;所以 <u-navbar :bgColor"bgColor"><view class"u-nav-slot" slot"left" click"goSubscribe"><image :src"g…

需要数电发票接口的,先熟悉下数电发票基本常识

最近有一些技术小伙伴来咨询数电发票接口的时候&#xff0c;对数电发票的一些常识不太了解&#xff0c; 导致沟通起来比较困难。比较典型的这三个问题&#xff1a; 一、开具数电票时&#xff0c;如何设置身份认证频次&#xff1f; 请公司的法定代表人或财务负责人登录江苏省电…

uni-app之app上传pdf类型文件

通过阅读官方文档发现&#xff0c;uni.chooseFile在app端不支持非媒体文件上传&#xff1b; 可以使用这个插件&#xff0c;验证过可以上传pdf&#xff1b;具体使用可以去看文档 插件地址 就是还是会出现相机&#xff0c;这个可能需要自己解决下 实现功能&#xff1a;上传只能上…

ejbca:8443报文跟踪

安装客户端证书后&#xff0c;访问管理员页面 :8443/ejbca/adminweb 同时在wireshark抓包 1、客户端向对端发出Client hello 在Server Hello看到一个颁发给客户端的证书&#xff0c;颁发给5be85c9c1df9&#xff08;客户端node hostname 5be85c9c1df9&#xff09;但没有在Clie…

MySQL索引优化分析

MySQL索引优化分析 为什么你写的sql查询慢&#xff1f;为什么你建的索引常失效&#xff1f;通过本章内容&#xff0c;你将学会MySQL性能下降的原因&#xff0c;索引的简介&#xff0c;索引创建的原则&#xff0c;explain命令的使用&#xff0c;以及explain输出字段的意义。助你…

综合技巧练习 - Packet Tracer 简介

1.7.1&#xff1a;综合技巧练习 - Packet Tracer 简介 拓扑图&#xff1a; 以基本完成的逻辑拓扑为起点。 设备 接口 IP 地址 子网掩码 默认网关 R1-ISP Fa0/0 192.168.254.253 255.255.255.0 不适用 S0/0/0 10.10.10.6 255.255.255.252 R2-Central Fa0/0 17…

日常开发中Git命令指北

Git基本操作 创建化仓库 mkdir 目录 cd 目录 git init配置本地仓库 # 配置用户名&#xff0c;邮箱 git config user.name "cxf" git config user.email "1969612859qq.com" # 查看本地配置&#xff08;小写的 L&#xff09; git config -l # 重置配置&a…

百度chatgpt内测版

搜索AI伙伴 申请到了百度的chatgpt&#xff1a; 完整的窗口布局&#xff1a; 三个哲学问题&#xff1a; 灵感中心&#xff1a; 请做一副画&#xff0c;一个渔夫&#xff0c;冬天&#xff0c;下着大雪&#xff0c;在船上为了一家的生计在钓鱼&#xff0c;远处的山上也都是白雪&a…

【学习】若依源码(前后端分离版)之 “ 上传图片功能实现”

大型纪录片&#xff1a;学习若依源码&#xff08;前后端分离版&#xff09;之 “ 上传图片功能实现” 前言前端部分后端部分结语 前言 图片上传也基本是一个项目的必备功能了&#xff0c;所以今天和大家分享一下我最近在使用若依前后端分离版本时&#xff0c;如何实现图片上传…

FreeRTOS源码分析-11 软件定时器

目录 1 软件定时器概念及其应用 1.1 软件定时器定义 1.2 FreeRTOS软件定时器介绍 1.3 FreeRTOS软件定时器工作原理 2 软件定时器函数应用 2.1 功能需求 2.2 API 2.3 功能实现 3 软件定时器原理源码分析 3.1 软件定时器控制块 3.2 软件定时器任务&软件定时器创建 …

EIK+Filebeat+Kafka

目录 一、Kafka 概述 1&#xff09;为什么需要消息队列&#xff08;MQ&#xff09; 2&#xff09;使用消息队列的好处 &#xff08;1&#xff09;解耦 &#xff08;2&#xff09;可恢复性 &#xff08;3&#xff09;缓冲 &#xff08;4&#xff09;灵活性 & 峰值处理…

C++笔记之回调函数的演变

C笔记之回调函数的演变 code review! 文章目录 C笔记之回调函数的演变1.使用函数指针2.使用typedef加函数指针3.使用std::using加函数指针4.使用typedef加std::function5.使用std::using加std::function6.使用回调和不使用回调对比 1.使用函数指针 代码 #include <iostre…

【笔试训练】统计回文

一、单选 1、以下代码结果是什么&#xff08;&#xff09; public class foo {public static void main(String sgf[]) {StringBuffer anew StringBuffer("A");StringBuffer bnew StringBuffer("B");operate(a,b);System.out.println(a"."b);}st…

ffmpeg+intel核显实现硬解码

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、前言二、检查方法1.图形法2.nvidia-smi3.intel-gpu-tools 三、安装使用1.libva-dev2.libva-utils3.编译安装4.测试1.vainfo2.ffmpeg测试解码 总结 前言 之…

nuxt.js框架使用

1、这种框架只要页面有一个地方错&#xff0c;都会出现404或者吓人的报错界面。 如表单的prop属性&#xff0c;在data函数return对象里面该字段找不到或者不一致&#xff0c;就会报404。 2、使用字典&#xff0c;对字典进行翻译。 在plugins/methods.js文件里面&#xff0c;加…

电脑连接安卓设备显示offline

The Android is offline. This can be resolved by physically disconnecting and...用USB线连接手机和电脑&#xff0c;打开cmd&#xff0c;输入adb devices -l, adb devices -l结果显示可以识别手机&#xff0c;但是状态为offline 打开另外一个终端&#xff0c;输入 adb k…

Spring MVC程序开发

目录 1. 什么是Spring MVC? 1.1 什么是MVC 1.2 MVC和Spring MVC 的关系 1.3 为什么要学Spring MVC? 2. Spring MVC的使用 2.1 Spring MVC的创建和连接 2.1.1 项目创建 2.1.2 项目连接 2.1.2.1 连接 2.1.2.2 RequestMapping注解介绍 2.1.2.3 GetMapping和 PostMapping 2.2 获取…

EFLFK——ELK日志分析系统+kafka+filebeat架构

环境准备 node1节点192.168.40.16elasticsearch2c/4Gnode2节点192.168.40.17elasticsearch2c/4GApache节点192.168.40.170logstash/Apache/kibana2c/4Gfilebeat节点192.168.40.20filebeat2c/4G https://blog.csdn.net/m0_57554344/article/details/132059066?spm1001.2014.30…