
tomcat
文章平均质量分 71
......................
富士康质检员张全蛋
人生实难,唯有自渡。只有接受了真实现的现状和真实的自己,调整好心态,才能脚踏实地的活着,然后去发现角落处的那些惊喜和美好,去相信一切苦难困境都会过去!“即使身处阴沟,也要记得仰望星空”。
展开
-
Tomcat I/O和线程池的并发调优
Tomcat 的调优涉及 I/O 模型和线程池调优、JVM 内存调优以及网络优化等,今天我们来聊聊 I/O 模型和线程池调优,由于 Web 应用程序跑在 Tomcat 的工作线程中,因此 Web 应用对请求的处理时间也直接影响 Tomcat 整体的性能,而 Tomcat 和 Web 应用在运行过程中所用到的资源都来自于操作系统,因此调优需要将服务端看作是一个整体来考虑。所谓的 I/O 调优指的是选择 NIO、NIO.2 还是 APR,而线程池调优指的是给 Tomcat 的线程池设置合适的参数,使得 ..转载 2021-01-04 09:46:50 · 369 阅读 · 0 评论 -
JVM GC原理及调优的基本思路
和 Web 应用程序一样,Tomcat 作为一个 Java 程序也跑在 JVM 中,因此如果我们要对 Tomcat 进行调优,需要先了解 JVM 调优的原理。而对于 JVM 调优来说,主要是 JVM 垃圾收集的优化,一般来说是因为有问题才需要优化,所以对于 JVM GC 来说,如果你观察到 Tomcat 进程的 CPU 使用率比较高,并且在 GC 日志中发现 GC 次数比较频繁、GC 停顿时间长,这表明你需要对 GC 进行优化了。在对 GC 调优的过程中,我们不仅需要知道 GC 的原理,更重要的...转载 2020-12-29 09:38:39 · 615 阅读 · 0 评论 -
实战:优化并提高Tomcat启动速度
我们在使用 Tomcat 时可能会碰到启动比较慢的问题,比如我们的系统发布新版本上线时,可能需要重启服务,这个时候我们希望 Tomcat 能快速启动起来提供服务。其实关于如何让 Tomcat 启动变快,官方网站有专门的文章来介绍这个话题。下面我也针对 Tomcat 8.5 和 9.0 版本,给出几条非常明确的建议,可以现学现用。清理你的 Tomcat1. 清理不必要的 Web 应用首先我们要做的是删除掉 webapps 文件夹下不需要的工程,一般是 host-manager、example.转载 2020-12-28 10:24:12 · 936 阅读 · 0 评论 -
tomcat Context容器(中):Tomcat如何隔离Web应用?
Tomcat 通过自定义类加载器 WebAppClassLoader 打破了双亲委托机制,具体来说就是重写了 JVM 的类加载器 ClassLoader 的 findClass 方法和 loadClass 方法,这样做的目的是优先加载 Web 应用目录下的类。除此之外,你觉得 Tomcat 的类加载器还需要完成哪些需求呢?或者说在设计上还需要考虑哪些方面?...转载 2020-12-25 10:39:12 · 1090 阅读 · 0 评论 -
Context容器(上):Tomcat如何打破双亲委托机制?
相信我们平时在工作中都遇到过 ClassNotFound 异常,这个异常表示 JVM 在尝试加载某个类的时候失败了。想要解决这个问题,首先你需要知道什么是类加载,JVM 是如何加载类的,以及为什么会出现 ClassNotFound 异常?弄懂上面这些问题之后,我们接着要思考 Tomcat 作为 Web 容器,它是如何加载和管理 Web 应用下的 Servlet 呢?Tomcat 正是通过 Context 组件来加载管理 Web 应用的,所以今天我会详细分析 Tomcat 的类加载机制。但在这之前,我..转载 2020-12-24 11:09:04 · 463 阅读 · 0 评论 -
Host容器:Tomcat如何实现热部署和热加载?
要在运行的过程中升级 Web 应用,如果你不想重启系统,实现的方式有两种:热加载和热部署。那如何实现热部署和热加载呢?它们跟类加载机制有关,具体来说就是:热加载的实现方式是 Web 容器启动一个后台线程,定期检测类文件的变化,如果有变化,就重新加载类,在这个过程中不会清空 Session ,一般用在开发环境。 热部署原理类似,也是由后台线程定时检测 Web 应用的变化,但它会重新加载整个 Web 应用。这种方式会清空 Session,比热加载更加干净、彻底,一般用在生产环境。今天我们来学习一..转载 2020-12-18 10:08:14 · 340 阅读 · 0 评论 -
HotSpot JVM 内存管理
关于 JVM 内存管理或者说垃圾收集,大家可能看过很多的文章了,笔者准备给大家总结下。这算是系列的第一篇,接下来一段时间会持续更新。本文主要是翻译《Memory Management in the Java HotSpot Virtual Machine》白皮书的前四章内容,这是 2006 的老文章了,当年发布这篇文章的还是 Sun Microsystems,以后应该会越来越少人记得这家曾经无比伟大的公司了。虽然这个白皮书有点老了,不过那个时候 Sun 在 J2SE 5.0 版本的 HotSpo..转载 2020-12-17 10:47:27 · 342 阅读 · 0 评论 -
Tomcat 内核如何阻塞与唤醒进程?
Tomcat 连接器组件的设计,其中最重要的是各种 I/O 模型及其实现。而 I/O 模型跟操作系统密切相关,要彻底理解这些原理,我们首先需要弄清楚什么是进程和线程,什么是虚拟内存和物理内存,什么是用户空间和内核空间,线程的阻塞到底意味着什么,内核又是如何唤醒用户线程的等等这些问题。可以说掌握这些底层的知识,对于你学习 Tomcat 和 Jetty 的原理,乃至其他各种后端架构都至关重要,这些知识可以说是后端开发的“基石”。进程和线程我们先从 Linux 的进程谈起,操作系统要运行一个可执行程.转载 2020-12-14 10:08:44 · 336 阅读 · 0 评论 -
总结:Tomcat和Jetty的高性能、高并发之道
高性能程序就是高效的利用 CPU、内存、网络和磁盘等资源,在短时间内处理大量的请求。那如何衡量“短时间和大量”呢?其实就是两个关键指标:响应时间和每秒事务处理量(TPS)。那什么是资源的高效利用呢? 我觉得有两个原则:减少资源浪费。比如尽量避免线程阻塞,因为一阻塞就会发生线程上下文切换,就需要耗费 CPU 资源,再比如网络通信时数据从内核空间拷贝到 Java 堆内存,需要通过本地内存中转。 当某种资源成为瓶颈时,用另一种资源来换取。比如缓存和对象池技术就是用内存换 CPU,数据压缩后再传输就是用转载 2020-12-09 10:20:43 · 983 阅读 · 0 评论 -
Tomcat Executor组件:Tomcat如何扩展Java线程池?
在开发中我们经常会碰到“池”的概念,比如数据库连接池、内存池、线程池、常量池等。为什么需要“池”呢?程序运行的本质,就是通过使用系统资源(CPU、内存、网络、磁盘等)来完成信息的处理,比如在 JVM 中创建一个对象实例需要消耗 CPU 和内存资源,如果你的程序需要频繁创建大量的对象,并且这些对象的存活时间短,就意味着需要进行频繁销毁,那么很有可能这部分代码会成为性能的瓶颈。而“池”就是用来解决这个问题的,简单来说,对象池就是把用过的对象保存起来,等下一次需要这种对象的时候,直接从对象池中拿出来重复使..转载 2020-12-02 10:24:40 · 720 阅读 · 2 评论 -
Nio2Endpoint组件:Tomcat如何实现异步I/O?
Java 提供了 BIO、NIO 和 NIO.2 这些 API 来实现这些 I/O 模型。BIO 是我们最熟悉的同步阻塞,NIO 是同步非阻塞,那 NIO.2 又是什么呢?NIO 已经足够好了,为什么还要 NIO.2 呢?NIO 和 NIO.2 最大的区别是,一个是同步一个是异步。我在上期提到过,异步最大的特点是,应用程序不需要自己去触发数据从内核空间到用户空间的拷贝。为什么是应用程序去“触发”数据的拷贝,而不是直接从内核拷贝数据呢?这是因为应用程序是不能访问内核空间的,因此数据拷贝肯定是由内核来做转载 2020-11-27 10:19:31 · 609 阅读 · 0 评论 -
NioEndpoint组件:Tomcat如何实现非阻塞I/O?
UNIX 系统下的 I/O 模型有 5 种:同步阻塞 I/O、同步非阻塞 I/O、I/O 多路复用、信号驱动 I/O 和异步 I/O。这些名词我们好像都似曾相识,但这些 I/O 通信模型有什么区别?同步和阻塞似乎是一回事,到底有什么不同?等一下,在这之前你是不是应该问自己一个终极问题:什么是 I/O?为什么需要这些 I/O 模型?所谓的 I/O 就是计算机内存与外部设备之间拷贝数据的过程。我们知道 CPU 访问内存的速度远远高于外部设备,因此 CPU 是先把外部设备的数据读到内存里,然后再进行处理。..转载 2020-11-18 11:53:32 · 859 阅读 · 0 评论 -
Tomcat 的“高层们”都负责做什么?
使用过 Tomcat 的同学都知道,我们可以通过 Tomcat 的/bin目录下的脚本startup.sh来启动 Tomcat,那你是否知道我们执行了这个脚本后发生了什么呢?你可以通过下面这张流程图来了解一下。1.Tomcat 本质上是一个 Java 程序,因此startup.sh脚本会启动一个 JVM 来运行 Tomcat 的启动类 Bootstrap。2.Bootstrap 的主要任务是初始化 Tomcat 的类加载器,并且创建 Catalina。关于 Tomcat 为什么需要自己...转载 2020-11-09 09:45:13 · 288 阅读 · 0 评论 -
Tomcat 如何实现一键式启停?
通过前面的学习,相信你对 Tomcat 的架构已经有所了解,知道了 Tomcat 都有哪些组件,组件之间是什么样的关系,以及 Tomcat 是怎么处理一个 HTTP 请求的。下面我们通过一张简化的类图来回顾一下,从图上你可以看到各种组件的层次关系,图中的虚线表示一个请求在 Tomcat 中流转的过程。上面这张图描述了组件之间的静态关系。如果想让一个系统能够对外提供服务,我们需要创建、组装并启动这些组件。 在服务停止的时候,我们还需要释放资源,销毁这些组件,因此这是一个动态的过程。也就是说...转载 2020-11-05 09:27:37 · 259 阅读 · 0 评论 -
Tomcat 系统架构(下):聊聊多层容器的设计
专栏上一期我们学完了连接器的设计,今天我们一起来看一下 Tomcat 的容器设计。先复习一下,上期我讲到了 Tomcat 有两个核心组件:连接器和容器,其中连接器负责外部交流,容器负责内部处理。具体来说就是,连接器处理 Socket 通信和应用层协议的解析,得到 Servlet 请求,而容器则负责处理 Servlet 请求。我们通过下面这张图来回忆一下。容器,顾名思义就是用来装载东西的器具,在 Tomcat 里,容器就是用来装载 Servlet 的。那 Tomcat 的 Servlet 容器是如..转载 2020-11-02 10:12:06 · 535 阅读 · 0 评论 -
Tomcat 系统架构(上): 连接器是如何设计的?
在面试时我们可能经常被问到:你做的 XX 项目的架构是如何设计的,请讲一下实现的思路。对于面试官来说,可以通过你对复杂系统设计的理解,了解你的技术水平以及处理复杂问题的思路。今天咱们就来一步一步分析 Tomcat 的设计思路,看看 Tomcat 的设计者们当时是怎么回答这个问题的。一方面我们可以学到 Tomcat 的总体架构,学会从宏观上怎么去设计一个复杂系统,怎么设计顶层模块,以及模块之间的关系;另一方面也为我们深入学习 Tomcat 的工作原理打下基础。Tomcat 总体架构我们...转载 2020-10-23 10:00:54 · 576 阅读 · 0 评论 -
Tomcat 连接器executor优化
tomcat自身优化Tomcat 的自身参数的优化,修改配置文件中的配置信息,调整连接数,超时等。1.Connector 连接器的配置Tomcat连接器的三种方式:bio、nio 和 apr,三种方式性能差别很大,apr 的性能最优, bio 的性能最差。而Tomcat 7 使用的Connector 默认就启用的 Apr 协议,但需要系统安装 Apr 库,否则就会使用 bio 方式。2.配置文件优化配置文件优化就是对server.xml进行优化,可以大大提升tomcat请求处理...原创 2020-10-21 11:10:47 · 780 阅读 · 0 评论 -
Tomcat 连接器Connector 的三种运行模式 Bio、Nio、Apr
一、Connector在Tomcat架构中,Connector主要负责处理与客户端的通信。Connector的实例用于监听端口,接受来自客户端的请求并将请求转交给Engine处理。同时将来自Engine的答复返回给客户端。Connector的种类Tomcat源码中与connector相关的类位于org.apache.coyote包中,Connector分为以下几类:Http Connector, 基于HTTP协议,负责建立HTTP连接。它又分为BIO Http Connector与NIO..原创 2020-10-20 11:08:31 · 1900 阅读 · 0 评论 -
Tomcat catalina.properties
catalina.properties[root@www conf]# ll catalina.properties-rw------- 1 root root 7125 Nov 9 2016 catalina.properties这个是对jar包的一些控制每个 tomcat服务器都要有自己的类加载器。因为一个服务器需要解决下面几个问题∶1.部署在同一服务器上的不同项目的类应该相互隔离。2.部署在同一个服务器上的两个项目应该可以共享一些 java类库。3.服务应该保证自己的安..原创 2020-10-19 10:09:55 · 855 阅读 · 0 评论 -
Tomcat 安全管理 Catalina.policy
tomcat的安全策略文件 Catalina.policy当tomcat 运行未知的web应用时,为了防止java代码对服务器系统产生安全影响。比如删除系统文件,重启系统等。需要对java 代码进行安全控制。这时候就要配置这个文件。更加详细资料可以自行学习java 安全管理器 SecurityManager。Tomcat里面可以放置多个web项目,多个项目之间本来是互不影响,各自运行各自的项目。假如项目1放置了不安全的代码,通过I/O流去读取tomcat配置信息和项目2的相关信息。通过I/O流发给用原创 2020-10-15 10:46:06 · 1859 阅读 · 0 评论 -
Tomcat 多实例部署
#我这里已经启动了一个tomcat [root@www ~]# netstat -tpln | grep javatcp6 0 0 :::8080 :::* LISTEN 4170/java tcp6 0 0 127.0.0.1:8005 :::* LISTEN 4170/java .原创 2020-09-27 19:56:47 · 349 阅读 · 0 评论 -
Tomcat 你应该知道的Servlet规范和Servlet容器
浏览器发给服务端的是一个 HTTP 格式的请求,HTTP 服务器收到这个请求后,需要调用服务端程序来处理,所谓的服务端程序就是你写的 Java 类,一般来说不同的请求需要由不同的 Java 类来处理。那么问题来了,HTTP 服务器怎么知道要调用哪个 Java 类的哪个方法呢。最直接的做法是在 HTTP 服务器代码里写一大堆 if else 逻辑判断:如果是 A 请求就调 X 类的 M1 方法,如果是 B 请求就调 Y 类的 M2 方法。但这样做明显有问题,因为 HTTP 服务器的代码跟业务逻辑耦合在一起转载 2020-09-27 09:45:17 · 376 阅读 · 0 评论 -
Tomcat server.xml 文件配置详解!
前言Tomcat隶属于Apache基金会,是开源的轻量级Web应用服务器,使用非常广泛。server.xml是Tomcat中最重要的配置文件,server.xml的每一个元素都对应了Tomcat中的一个组件;通过对xml文件中元素的配置,可以实现对Tomcat中各个组件的控制。因此,学习server.xml文件的配置,对于了解和使用Tomcat至关重要。本文将通过实例,介绍server.xml中各个组件的配置,并详细说明Tomcat各个核心组件的作用以及各个组件之间的相互关系。说明:由...转载 2020-09-24 11:59:23 · 5295 阅读 · 1 评论 -
Tomcat 8080|8009|8005 端口作用
从tomcat配置文件中,我们可以看出,在启动tomcat的时候默认启动了3个端口,分别是8080(8443)、8009、8005。8080(8443)端口<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />这个应该是我们最熟悉的一个,平常开发测试也经常用,该Connector用于监听浏览器发送的请求,设...原创 2020-09-22 11:58:12 · 6087 阅读 · 0 评论 -
Tomcat 一文带你了解tomcat体系结构
java中,常用的web服务器一般由tomcat,weblogic,jetty,undertwo等,但从用户使用广泛度来说,tomcat用户量相对比较大一些,当然这也基于它开源和免费的特点。从软件架构的发展角度来看,软件架构大致经历了如下几个阶段(当然,我们这篇文章不是主讲架构的,因此只是简单提一下架构发展,至于具体的架构,会在后面的文章中陆续与大家分享架构系列):那么从java web角度来说,架构大致经历了:Sevlet架构=》SSH架构=》SSM架构=》分布式垂直架构=》SOA架构=》原创 2020-09-08 11:57:22 · 540 阅读 · 0 评论 -
Tomcat 日志分类以及详解
tomcat 日志配置文件tomcat 对应日志的配置文件:tomcat目录下的/conf/logging.properties。tomcat 的日志等级有:日志输出级别:SEVERE (最高级别) > WARNING > INFO > CONFIG > FINE > FINER(精心) > FINEST (所有内容,最低级别)tomcat 有五类日志 :catalina、localhost、manager、admin、host-manager/conf.转载 2020-09-07 11:46:44 · 3824 阅读 · 0 评论 -
Tomcat 教你搭建一个jforum论坛
Tomcat默认发布目录tomcat默认的程序发布路径为tomcat/webapps/ROOT/下面。例子:(1)比如我在tomcat/webapps/ROOT/路径下新建一个jsp文件,则可以直接通过URL为:http://localhost:8080/index.jsp来访问。(2)再比如我做文件的上传和下载功能时,可以在ROOT下新建一个FileUpload文件夹,把上传文件的路径设为这个文件夹下,然后上传一个文件test.txt做下载功能时,点击该文件的下载按钮,可以直接让网页打开一个UR原创 2020-07-02 14:49:08 · 621 阅读 · 0 评论 -
Tomcat tomcat-users.xml帮你登录Server Status
启动tomcat后,访问127.0.0.1会进入如下页面点击红框部分的Server Status、Manager App、Host Manager按钮会弹出一个输入用户名和密码的弹窗点击取消之后会进入一个提示401的页面,这个页面表示未授权,必须授权之后才能访问那这里的用户名和密码去哪里获取呢?如果之前没有配置过这里的用户和密码,就需要我们去配置;如果之前已经配置过,就需要我们去查看。[root@localhost ~]# cd /usr/local/to...原创 2020-07-02 14:19:53 · 771 阅读 · 0 评论 -
Tomcat 简介与安装
Tomcat WEB服务器1)Tomcat是一款开源的、免费的WEB服务器软件,是Apache基金会旗下的,主要是用于发布网站代码、提供网页信息服务的,用户通过浏览器可以实现页面的访问。2)Tomcat WEB软件默认可以处理静态网页,同时也可以处理动态网页,而Nginx、Apache只能处理静态网页,Tomcat软件主要是基于Java语言开发的,主要是用于发布JAVA动态网站。静态网页(静态文件)静态网页主要是跟后端数据库不发生交互的网页,其网页内容很少被更新或者几乎不更新...原创 2020-07-01 15:53:08 · 314 阅读 · 0 评论 -
Shell tomcat多实例部署
#!/bin/bash#install java jdk cd /usr/srcmkdir -p /usr/javatar xf jdk1.8.0_131.tar.gz -C /usr/javals -l /usr/java/jdk1.8.0_131cat >>/etc/profile<<EOFexport JAVA_HOM=/usr/java/jdk1.8.0_131export CLASSPATH=\$CLASSPATH:\$JAVA_HOME/lib:\.原创 2020-05-31 20:20:54 · 263 阅读 · 0 评论