服务器源代码什么意思 有关服务器源代码知识解读

一:生命周期为了方便管理组件和容器的生命周期,Tomcat定义了从创建、开始、停止到销毁的12种状态。Tomcat生命周期管理内部状态变化的规则控制,组件和容器只有实现相应的生命周期方法才能完成每个生命周期中的操作(initInternal、startInternal、stopInternal、destroyInter...

一:生命周期

为了方便管理组件和容器的生命周期,Tomcat定义了从创建、开始、停止到销毁的12种状态。Tomcat生命周期管理内部状态变化的规则控制,组件和容器只有实现相应的生命周期方法才能完成每个生命周期中的操作(initInternal、startInternal、stopInternal、destroyInternal)。

Tomcat的生命周期管理引入了事件机制。当组件或容器的生命周期状态发生变化时,会通知事件**器,**器会通过判断事件的类型来执行相应的操作。可以在server.xml文件中配置事件侦听器的添加。

Tomcat容器的配置过程是通过添加**器来实现的,从而实现了配置逻辑与容器的解耦。

EngineConfig:主要打印start和stop事件的debug日志HostConfig:主要处理部署应用,解析应用 META-INF/context.xml 并创建应用的 ContextContextConfig:主要解析并合并 web.xml,扫描应用的各类 web 资源 (filter、servlet、listener)

请求的处理流程

集装箱的责任链模式:

请求被Connector组件接收, 创建Request和Response对象。Connector将Request和Response交给Container,先通过Engine的pipeline组件流经内部的每个Valve。请求流转到Host的pipeline组件中, 并且经过内部Valve的过滤。请求流转到Context的pipeline组件中, 并且经过内部的Valve的过滤。请求流转到Wrapper的pipeline组件中, 并且经过内部的Valve的过滤。Wrapper内部的WrapperValve创建FilterChain实例, 调用指定的Servlet实例处理请求。返回结果

2.类别加载机制

母公司委托模式:

Bootstrap ClassLoader

:启动类加载器,负责加载 Java 的核心类,它不是 java.lang.ClassLoader 的子类,而是由 JVM自身实现,null c,c++实现的,加载jre/lib

Extension ClassLoader

:扩展类加载器,扩展类加载器的加载路径是 JDK 目录下 jre/lib/ext 。扩展加载器的 #getParent() 方法返回 null ,实际上扩展类加载器的父类加载器是启动类加载器。

System ClassLoader

:系统(应用)类加载器,它负责在 JVM 启动时加载来自 Java 命令的 -classpath 选项、java.class.path 系统属性或 CLASSPATH 环境变量所指定的 jar 包和类路径。程序可以通过 #getSystemClassLoader() 来获取系统类加载器。系统加载器的加载路径是程序运行的当前路径。

class loader # load class(Java . lang . string,boolean)

jvm如何确定一个类的唯一性:全类名(包名+类名)classloader的id?

类加载过程:

类别载入器:

Tomcat有不同的定制类加载器来控制各种资源库。Tomcat主要使用类加载器来解决以下四个问题:

同一个 Web 服务器里,各个 Web 项目之间各自使用的 Java 类库要互相隔离。同一个 Web 服务器里,各个 Web 项目之间可以提供共享的 Java 类库 。为了使服务器不受 Web 项目的影响,应该使服务器的类库与应用程序的类库互相独立。对于支持 JSP 的 Web 服务器,应该支持热插拔(HotSwap)功能 。

Tomcat为用户提供了四组目录来存储第三方类库:

放置在/common目录中:类库可被Tomcat和所有的 Web应用程序共同使用。放置在/server目录中:类库可被Tomcat使用,对所有的Web应用程序都不可见。放置在/shared目录中:类库可被所有的Web应用程序共同使用,但对 Tomcat自己不可见。放置在/WebApp/WEB-INF目录中:类库仅仅可以被此Web应用程序使用,对 Tomcat和其他Web应用程序都不可见。

Tomcat定制了几个类加载器,CommonClassLoader、CatalinaClassLoader、SharedClassLoader和WebappClassLoader是Tomcat自己定义的类加载器,分别加载/common/、/server/、/shared/和/WebApp/WEB-INF/中的Java类库。WebApp类加载器和JSP类加载器通常有多个实例每个Web应用对应一个Web app类加载器,每个Jsp文件对应一个Jsp类加载器LauncherHelper

3.线程模型

Tomcat对IO模型的支持

IO模型描述了BIO (JIoEndpoint)同步阻塞IO,即Tomcat使用传统的java.io进行操作。在这种模式下,每个请求都会创建一个线程,耗费大量性能,不适合高并发场景。本发明具有稳定优点,适用于连接数较少的固定架构。NIO(NioEndpoint)同步无阻塞IO,是jdk1.4之后实现的新IO,这种模式是基于多路复用器来监控连接状态,然后同步通知线程处理,从而达到无阻塞的目的。它可以比传统的BIO更好地支持并发性能。Tomcat 8.0以后,默认采用这种模式。jdk1.7以后支持AIO (Nio2Endpoint)异步非阻塞IO,与Nio不同,它不需要多路复用器,而是请求处理线程完成执行,进行回调,继续后续操作。Tomcat 8之后支持。APR(AprEndpoint),全称Apache Portable Runtime/Apache Portable Runtime,是Apache HTTP server的支持库。可以简单理解为Tomcat会以JNI的形式调用Apache HTTP server的核心动态链接库来处理文件读取或者网络传输操作。APR库需要编译和安装。

通过修改server.xml中的协议配置来指定IO模型

<Connector protocol="HTTP/1.1">

Tomcat7连接器比较

Tomcat8连接器比较

交点原理

nio端点原理

4.性能调整

Tomcat启动参数

一般情况下,Tomcat程序目录和部署目录在生产环境中是分开的,启动时只需要指定CATALINA_HOME和CATALINA_BASE参数。

启动参数说明

J***A_OPTS

jvm启动参数,设置内存编码等。-XM 100m-xmx 200m-dfile . encoding = utf-8 Java _ home指定jdk目录。如果没有,从java环境变量中查找。

CATALINA _ home

Tomcat程序根目录

CATALINA_BASE

应用程序部署目录,默认为$CATALINA_HOMECATALINA_OUT应用程序日志输出目录:默认为$
CATALINA _ BASE/logcatalina _ tmpdi。

并发相关参数

连接器属性:

描述地址对于具有多个IP地址的服务器,此属性指定将用于**指定端口的地址。默认情况下,连接器将侦听所有本地地址,无论压缩是否使用HTTP/1.1 GZIP压缩来节省服务器带宽。默认情况下,offconnectionTimeout客户端启动到服务器的连接以接收,中间的最大等待时间connectionUploadTimeout指定数据上载过程中使用的超时(以毫秒为单位)。它仅在disableUploadTimeout设置为false时生效。DisableUploadTimeouttrue使用
ConnectionTimeoutEnableLookups。如果您需要调用request.getRemoteHost()来执行DNS查找以返回远程客户端的实际主机名,请将其设置为true。设置为false以跳过DNS查找并以字符串形式返回ip地址(从而提高性能)。默认情况下,DNS lookup是禁用的执行器终止TimeoutMillis私有内部执行器在继续停止连接器之前等待请求处理线程终止的时间。如果未设置,默认值为5000(5秒)。

acceptCount

当使用了所有可能的请求处理线程时,传入连接请求的最大队列长度。队列已满时收到的任何请求都将被拒绝。默认值为100。

***xConnections

服务器在任何给定时间接受和处理的最大连接数。当达到这个数目时,服务器将接受(但不处理)另一个连接。这个额外的连接将被阻塞,直到正在处理的连接数低于***xConnections,此时服务器将再次开始接受和处理新的连接。请注意,一旦达到限制,操作系统仍然可以根据acceptCount设置接受连接。默认值因连接器类型而异。对于NIO和NIO2,默认值为10000。

***xHttpHeaderSize

请求和响应的HTTP头的最大大小,8k

***xThreads

默认情况下可以处理的最大并发请求数为200,

如果使用了executor,将被忽略。minSpareThreads

始终保持运行。

遗嘱执行人财产:

描述名称守护程序是否是守护程序线程。缺省值是truenamePrefix,这是由执行器创建的每个线程的名称前缀。单个线程的线程名为name prefix+thread number

***x threads

的池中最大活动线程数,默认值为200

minSpareThreads

,最小活动线程数(空 idle和active),默认值为25***xIdleTime。默认值为60000(1分钟)

***xQueueSize可运行任务在被拒绝之前可以排队等待执行的最大数量。默认值为

integer . ***x _ valueprestartminsparethreads。默认值为假。

本文来自是我太自作多情投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/619163.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 07-04
下一篇 07-04

相关推荐

  • 云服务器管理有哪些功能 云服务器管理的作用

    生活中经常听说云服务器。你知道云服务器的功能是什么吗?如果你不知道,那就和边肖一起看看吧。1.网络服务对于需要有网络站点的中小企业和个人来说,租用服务器是一个不错的选择。因为云服务器的预配置不需要那么多,可以买现成的,也有很多宽带选择,所以每个网站都可以有自

    2023-07-27 21:46:01
    444 0
  • 服务器备份软件有哪些(服务器自动备份及恢复软件)

    SyncBackPro备份软件是由2BrightSparks公司开发的用于备份、同步和恢复数据文件的专业工具。该软件可以在便携式设备之间自动传输媒体文件,并备份数据文件、图片、电子邮件、音乐文件、文档、电子表格和电影。SyncBackPro通过结合运行、创建配置文件脚本和自动驱动器故障检测

    2023-07-27 18:47:01
    531 0
  • 域名怎么用在服务器上,域名使用文档介绍

    购买域名后如何使用?你有什么技能?买了域名之后,就看你用它做什么了。注册后可以用域名申请企业邮箱,大部分用来建网站。我们来看看如何使用域名,购买后有哪些技巧。购买域名后如何使用?你有什么技能?1.企业电子邮件应用程序购买域名后,可以直接申请企业邮箱,进入西数

    2023-07-27 10:41:01
    1059 0
  • 服务器一般多少钱一个月 阿里云服务器租用费用

    目前市场上的网站价格参差不齐,每家公司都没有明码标价,导致很多企业不知道如何选择专业水平的网站建设公司,怕被骗花钱,做出来的网站没有效果。事实上,顾客的担心并非多余。有些公司收钱是为了盈利,但并不是真的为客户服务。这种现象依然存在。今天财利信息分析一下做一

    2023-07-27 09:56:01
    377 0

评论列表

联系我们

在线咨询: QQ交谈

邮件:admin@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信