服务器-Tomcat
文章平均质量分 89
OkidoGreen
这个作者很懒,什么都没留下…
展开
-
SpringBoot 嵌入式容器原理与配置说明
在 springboot1.x 版本中,通過來定製嵌入式的servlet容器,如下所示。//匯入BeanPostProcessorsRegistrar:給容器中匯入一些元件//匯入了EmbeddedServletContainerCustomizerBeanPostProcessor//後置處理器:bean初始化前後(建立完物件,還沒賦值賦值)執行初始化工作@ConditionalOnClass({ Servlet.class, Tomcat.class })//判斷當前是否引入了Tomcat依賴;原创 2023-08-21 17:34:47 · 307 阅读 · 0 评论 -
Tomcat中Max-thread配置项对TPS的影响
但如果盲目调大最大线程数,会造成大量的线程切换,导致吞吐量无法达到预期的值(如下图所示,设置最大线程数为2000,并用2000的虚拟用户进行压测,系统吞吐量在1700左右:由于线程数为2000,但由于大量线程之间切换,平均响应时间却超过了1s,所以导致每秒事务处理量无法到达预期。通过响应时间和线程数图可以看到,线程达到50左右后,响应时间上升的斜度开始升高,说明到达瓶颈,从tps图中可以看到,程序的并发峰值达到50tps左右,在50线程左右达到最高,而后趋于稳定;厨师的数量,比顾客的数量,肯定会少一些。转载 2023-07-10 16:38:53 · 462 阅读 · 0 评论 -
spring boot内嵌tomcat优雅的开启apr模式
(1683条消息) 【优化】性能优化Springboot 项目配置内置Tomcat使用Http11AprProtocol(AIO)_我是Superman丶的博客-CSDN博客。(1683条消息) spring boot内嵌tomcat优雅的开启apr模式_0x2015的博客-CSDN博客。(1683条消息) Tomcat使用APR协议_tomcat apr_MG-net的博客-CSDN博客。(1683条消息) Tomcat使用APR协议_tomcat apr_MG-net的博客-CSDN博客。原创 2023-05-16 17:32:20 · 225 阅读 · 0 评论 -
springboot内置tomcat启动全流程详解及处理请求详解
springboot默认内置了tomcat容器,启动时可以直接启动内置tomcat来启动应用本文要介绍的内容有tomcat启动的全流程发起http请求后tomcat转发请求到我们的DispatcherServlet的全过程我们从源码层面从头到尾分析了一遍tomcat的启动流程和tomcat处理http请求的全过程,可以看到虽然省略了很多详细的代码,但是整体流程还是相对清晰的主要流程是1、根据配置信息启动了一个ServerSocket2、启动了多个Poller线程类来接受请求。转载 2023-02-27 14:02:17 · 1249 阅读 · 0 评论 -
tomcat 的acceptCount、acceptorThreadCount、maxConnections、maxThreads 如何确定
连接在被ServerSocketChannel accept之前就暂存在这个队列中,acceptCount就是这个队列的最大长度。ServerSocketChannel accept就是从这个队列中不断取出已经建立连接的的请求。使用的Acceptor线程的个数,tomcat设置为1Acceptor线程只负责从上述队列中取出已经建立连接的请求。这里就是tomcat对于连接数的一个控制,即最大连接数限制。转载 2023-02-27 13:24:36 · 519 阅读 · 0 评论 -
SpringBoot2使用Undertow来提高应用性能(spring-boot-starter-undertow)
容器,可启动一个 Tomcat 的 Spring Boot 程序与一个 Undertow 的 Spring Boot 程序,通过 VisualVM 工具进行比较,可看到 Undertow 性能优于 Tomcat。Undertow是一个Java开发的灵活的高性能Web服务器,提供包括阻塞和基于NIO的非阻塞机制。Undertow是红帽公司的开源产品,是Wildfly默认的Web服务器。SpringBoot2中可以将Web服务器切换到Undertow来提高应用性能。第二部,添加Undertow依赖。转载 2023-02-24 10:26:06 · 1803 阅读 · 0 评论 -
更改SpringBoot Tomcat运行方式
Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O(非阻塞IO)的缩写。即阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包),是基于JAVA的HTTP/1.1连接器,Tomcat7以下版本在默认情况下是以bio模式运行的。Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。转载 2023-02-22 17:58:37 · 360 阅读 · 0 评论 -
SpringBoot内置tomcat参数调优
可通过org.springframework.boot.autoconfigure.web.ServerProperties查看,其中包括属性tomcat、jetty、undertow三种服务器的设置,默认启用tomcat。# tomcat 8server:tomcat:max-connections: 10000 #最大连接数,默认为10000accept-count: 100 # 最大连接等待数,默认100max-threads: 200 #最大工作线程数,默认200。转载 2023-02-21 16:38:00 · 493 阅读 · 1 评论 -
undertow配置优化
因此,从实际情况来看,一定不要采用undertow的官方默认配置。当然啦,官方也是建议工作线程数的配置,取决于你机器的负载情况,其实也就是跟你的具体业务有关,我们现在的业务场景,64线程跑满的情况,CPU利用率仅仅百分之十几、CPU内存远远没利用完,再有请求过来,undertow则直接阻塞队列中,无法正常处理,资源浪费严重,还导致了服务中断的情况。IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接,默认设置每个CPU核心一个线程,不可设置过大,否则启动项目会报错:打开文件数过多。转载 2023-02-14 09:23:37 · 2374 阅读 · 0 评论 -
UnderTow 核心配置
本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford对于 bufferSize,最好和你系统的 TCP Socket Buffer 配置一样。转载 2023-02-14 09:16:01 · 5857 阅读 · 1 评论 -
Tomcat7 性能优化,提高并发-NIO模式
Young区被划分为三部分,Eden区和两个大小严格相同的Survivor区,其中,Survivor区间中,某一时刻只有其中一个是被使用的,另外一个留做垃圾收集时复制对象用,在Eden区间变满的时候, GC就会将存活的对象移到空闲的Survivor区间中,根据JVM的策略,在经过几次垃圾收集后,任然存活于Survivor的对象将被移动到Tenured区间。如果使用Servlet 3.0的异步处理,一个好的默认是使用maxThreads和最大预期的并发请求(同步和异步)的最大值中的较大值。转载 2023-02-10 08:53:07 · 1741 阅读 · 2 评论 -
Tomcat调优及acceptCount、maxConnections与maxThreads参数的含义和关系
但如果盲目调大最大线程数,会造成大量的线程切换,导致吞吐量无法达到预期的值(如下图所示,设置最大线程数为2000,并用2000的虚拟用户进行压测,系统吞吐量在1700左右:由于线程数为2000,但由于大量线程之间切换,平均响应时间却超过了1s,所以导致每秒事务处理量无法到达预期。通过响应时间和线程数图可以看到,线程达到50左右后,响应时间上升的斜度开始升高,说明到达瓶颈,从tps图中可以看到,程序的并发峰值达到50tps左右,在50线程左右达到最高,而后趋于稳定;厨师的数量,比顾客的数量,肯定会少一些。转载 2023-01-31 15:26:49 · 5037 阅读 · 1 评论 -
SpringBoot项目配置Tomcat和JVM参数
设置Tomcat端口号和连接数等使用application.properties配置文件有一些参数无法设置,所以推荐创建一个类文件来配置,如下: 1 package com.qipai.springbean; 2 3 import org.apache.catalina.connector.Connector; 4 import org.apache.coyote.http11.Http11NioProtocol; 5 import org.springframework.boot.转载 2020-10-03 20:15:02 · 696 阅读 · 0 评论 -
Tomcat获取header,RequestFacade对象获取请求头时忽略大小写
也许在Controller层接口参数中添加HttpServletRequest参数,用来获取请求头信息,会担心请求头字段的大小写影响数据的获取,其实不然,不必这样担心,只要你深入代码了解一下就会发现tomcat本身是支持忽略大小写的请求头字段。 在RequestFacde文件中getHeader函数逻辑实现如下所示:public String getHeader(String name) { if(this.request == null) { throw转载 2020-06-10 10:42:27 · 2280 阅读 · 0 评论 -
IntelliJ IDEA通过Tomcat启动项目过程分析
Tomcat部署项目的多种方式Tomcat安装目录:${TOMCAT_HOME}1.常规的webapps下直接部署到${TOMCAT_HOME}/webapps下2.利用控制台进行部署3.外部部署修改${TOMCAT_HOME}/conf/server.xml 在<Host>标签下添加web所在的目录指定path,如: 1 <Contextpath="/xx" docBase="D:\\workspace\\xx\\target\\x..转载 2020-05-31 18:28:01 · 1231 阅读 · 0 评论 -
How Tomcat works - tomcat发布webapp
目录什么叫发布 webapp发布方式 reload 总结什么叫发布发布就是让tomcat知道我们的程序在哪里,并根据我们的配置创建Context,进行初始化、启动,如下:程序所在的位置 创建Context,添加到Host 初始化(创建解析webxml的digester) 启动(初始化filter、listener、servlet)webapp发布方式在tomcat ...转载 2020-03-03 21:32:18 · 705 阅读 · 0 评论 -
How Tomcat works - tomcat启动(4)
前面摆了三节的姿势,现在终于要看到最终tomcat监听端口,接收请求了。目录Connector Http11Protocol JIoEndpoint 总结在前面的初始化都完成之后,进行Connector的初始化,也是执行一些生命周期方法。Connector在启动过程中这个类的主要作用是初始化并启动CoyoteAdapter和Http11Protocol:initInte...转载 2020-03-03 21:11:19 · 616 阅读 · 0 评论 -
How Tomcat works - tomcat启动(3)
上一节说到StandardService负责启动其子组件:container和connector,不过注意,是有先后顺序的,先启动container,再启动connector,这一节先来看看container。目录Pipeline和Vavle StandardEngine类和StandardHost类 StandardContext类 总结Pipeline和Vavle在第二节(...转载 2020-03-03 21:07:46 · 628 阅读 · 0 评论 -
How Tomcat works - tomcat启动(2)
在了解了tomcat 的一些基本组件之后,学习启动过程就更容易理解了,因为启动过程就是启动各个组件。目录启动顺序 Bootstrap类 Catalina类 StandardServer类和StandardService类 总结启动顺序tomcat的启动主要是容器的启动,根据tomcat四层架构,启动时由上而下的,而service包含这些组件,service又包含在ser...转载 2020-03-03 21:05:38 · 569 阅读 · 0 评论 -
How Tomcat works - tomcat启动(1)
主要介绍tomcat启动涉及到的一些接口和类。目录概述 tomcat包含的组件 server和service Lifecycle Container Connector 总结概述tomcat作为一个服务器,它的主要功能就是接收请求——处理请求——返回,如果是我们自己实现一个最简单的服务器,启动一个线程监听某个端口,该端口有数据进来的话就接收数据,然后在启动一个线程去处理接...转载 2020-03-03 20:57:01 · 586 阅读 · 0 评论 -
How Tomcat works — tomcat处理Servlet请求
目录Http11ConnectionHandler Http11Processor CoyoteAdapter StandardEngineValve StandardWrapperValve 总结Http11ConnectionHandler在tomcat 启动之后会使用socket.accept接收请求,接收到之后会调用自己的processSocket来处理请求,在该方法中...转载 2020-03-03 20:55:29 · 619 阅读 · 0 评论 -
验证调用HttpServletResponse.getWriter().close()方法是否真的会关闭http连接
起因线上项目突然遭到大量的非法参数攻击,由于历史问题,之前的代码从未对请求参数进行校验。导致大量请求落到了数据访问层,给应用服务器和数据库都带来了很大压力。针对这个问题,只能对请求真正到Controller方法调用之前直接将非法参数请求拒绝掉,所以在Filter中对参数进行统一校验,非法参数直接返回400。我的建议是不但要设置响应状态码设置为400,还应该明确调用HttpServletR...转载 2020-03-03 20:54:13 · 3045 阅读 · 0 评论 -
Servlet-Tomcat如何关闭response的outputStream
序在写文件下载的时候,遇到了一个问题,就是这个ServletOutputStream到底要不要自己flush以及close。这里以tomcat容易为例,解读一下。CoyoteAdaptertomcat-embed-core-8.5.16-sources.jar!/org/apache/catalina/connector/CoyoteAdapter.java 主要看service这段代...转载 2020-03-03 20:52:49 · 2400 阅读 · 0 评论 -
tomcat 配置项目前缀(推荐方式四)
一. 显示配置 Context 的 path需要在 server.xml 文件中手动配置。<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"></Host>中添加<Context path="/" docBase="/your/project/base/"...转载 2020-02-17 14:57:15 · 1470 阅读 · 0 评论 -
Catalina\localhost下的xml文件配置
关于 ~\apache-tomcat-*\conf\Catalina\localhost下的xml文件的配置。<?xml version="1.0" encoding="UTF-8"?><Context path="" docBase="E:\usr\Pictures" />文件名:ROOT.xml ,表示访问时,无需加前缀;当为 项目名....转载 2020-01-21 17:27:15 · 1801 阅读 · 0 评论 -
tomcat 三种部署方式以及server.xml文件的几个属性详解(Root.xml,多目录Path部署)
一、直接将web项目文件件拷贝到webapps目录中 这是最常用的方式,Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应用。如果你想要修改这个默认目录,可以在conf下的server.xml文件里修改Host标签里的appBase值。 这个方法实际上和在IDE开发环境里部署项目是一样的。 用此方法的访问路径为http://lo...转载 2020-01-21 17:22:00 · 2225 阅读 · 0 评论 -
web.xml中出现<servlet>default</servlet>是什么意思?
转:http://blog.csdn.net/hello5orld/article/details/9407905在web.xml文件中经常看到这样的配置<servlet-name>default</servlet-name>,这个配置的作用是:对客户端请求的静态资源如图片、JS文件等的请求交由默认的servlet进行处理,如下所示: [html] view p...转载 2017-10-17 10:14:21 · 4871 阅读 · 0 评论 -
Tomcat7启用远程调试DEBUG功能
https://blog.csdn.net/yztezhl/article/details/79026404 前言工作上可能用的上这个功能,因为将项目放到服务器(测试,生产还是别开的好)后,有些问题需要DEBUG,没有断点非常不方便啊。而且网上很多资料说的乱七八糟,图不对版的(自己贴的图和你自己写的东西都不一样!严重误导别人!!!)自己踩完坑后MARK一下TomcatW...转载 2018-10-15 17:29:36 · 782 阅读 · 0 评论 -
深入理解web.xml中配置/和/*的区别
https://blog.csdn.net/jinghuashuiyue2/article/details/78589655 在用SpringMVC进行web开发的时候,如果将DispathcerServlet对外访问的虚拟路径配置成/时,需要在Spring的配置文件中配置<mvc:default-servlet-handler/>这一项,那么为什么需要配置这一项呢?如果对外...转载 2018-10-31 12:50:06 · 4589 阅读 · 2 评论 -
Tomcat HTTP协议与AJP协议
https://blog.csdn.net/jeikerxiao/article/details/82745516Tomcat HTTP协议与AJP协议HTTP ConnectorAJP Connector配置Tomcat在server.xml中配置了两种连接器。HTTP Connector拥有这个连接器,Tomcat才能成为一个web服务器,但还额外可处理Servlet和jsp...转载 2019-07-25 10:54:05 · 16902 阅读 · 0 评论 -
分析 Tomcat setclasspath.bat 脚本
在 catalina.bat 中 调用 ,rem Get standard Java environment variablesif exist "%CATALINA_HOME%\bin\setclasspath.bat" goto okSetclasspathecho Cannot find "%CATALINA_HOME%\bin\setclasspath.bat"echo原创 2017-07-20 10:46:47 · 1242 阅读 · 0 评论 -
tomcat下域名的配置,ROOT.xml的作用
以下小结使用tomcat5.0.28测试通过,tomcat安装路径为C:/Tomcat在默认安装后,tomcat的主目录是webapps/root目录,如果我们想改变tomcat的主目录的话可以这样做:1.打开C:/Tomcat/conf/server.xml,在之间加入代码: reloadable="true" crossContext="true"/>这样重新启转载 2013-07-03 15:20:55 · 7986 阅读 · 0 评论 -
Tcp queue 简介 & Tomcat 最大并发数
https://www.cnblogs.com/liuxinan/p/5917168.html 只针对BIO模式,目标请求会sleep两秒再返回结果,通过jmeter测试工具进行并发测试操作系统:windows && linuxtomcat7测试:<Connector port="8080" protocol="HTTP/1.1"connectionTi...转载 2018-07-25 12:05:42 · 785 阅读 · 0 评论 -
Tomcat配置远程调试
https://www.cnblogs.com/justuntil/p/7661536.htmlhttps://blog.csdn.net/torrytang/article/details/55001471https://blog.csdn.net/mhmyqn/article/details/49209541===========方法1===========转载 2018-03-26 18:36:37 · 2516 阅读 · 1 评论 -
Tomcat多应用共享Session 使用crossContext
1. 新建两个应用:test1 |------WEB-INF | |------web.xml |------test.jsptest.jsp代码[java] view plaincopy session.setAttribute("test1Session转载 2014-07-10 10:20:29 · 8720 阅读 · 0 评论 -
在Eclipse中运行Tomcat6源代码,保证正确的classpath
网上有一些文章介绍将Tomcat源代码导入Eclipse并运行。然而,这些文章几乎都没有提及classpath的设置。 使用默认的classpath会使Eclipse中运行的Tomcat与发行版Tomcat(通过startup.bat等方式运行)的system class loader所能加载到的类不同,这样可能导致一些问题。例如部署shopizer 1.1.5(http://www.sho转载 2014-02-25 16:25:49 · 2617 阅读 · 0 评论 -
Tomcat5的web应用启动顺序详解
应用Tomcat对于我们来讲实在是司空见惯了,但是对于每个使用者来讲,应该了解其运转的机制也是必不可少的,本人在维护"apache开源项目"论坛时遇到此问题,并略作研究,望与大家共讨、分享。 一、配置自动部署时的web应用加载顺序: 当tomcat的server.xml中对虚拟主机(Host)配置中autoDeploy=true和unpackWARs=true转载 2014-03-06 13:49:01 · 2863 阅读 · 0 评论 -
启动框架 org.apache.catalina.startup(转)
org.apache.catalina.startup.Bootstrap第一步自然从main函数开始,我们可以从中看出bootstrap的初始化过程main函数首先是调用init方法 ,然后根据main的参数,比如start、startd、stop、stopd等等,启动或停止服务器ps:start和startd的区别,感觉像是前者用于重新启动init方法设置系统属转载 2014-02-26 09:57:09 · 4579 阅读 · 0 评论 -
Tomcat指定JAVA_HOME而不用环境变量
Tomcat默认情况下会用系统的环境变量中找到JAVA_HOME和JRE_HOME。但是有的时候我们需要不同版本的JDK共存。 可以在${TOMCAT_HOME}/bin/setclasspath.bat最前面设置JAVA_HOME和JRE_HOME。 例如: Js代码 rem se转载 2013-11-29 13:34:29 · 25593 阅读 · 1 评论 -
tomcat内存设置及jvm参数调优
设置tomcat的内存1、修改 start.bat 中的call "%EXECUTABLE%" start %CMD_LINE_ARGS%为 call "%EXECUTABLE%" run %CMD_LINE_ARGS%2、 catalina.bat 首行加入set JAVA_OPTS=-server -Xms512m -Xmx51转载 2014-03-22 20:43:42 · 3832 阅读 · 0 评论