tomcat 作为servlet 容器 有三种事情模式
1 独立的servlet 容器
2 进程内的servlet 容器
3 进程外的servlet 容器
进入tomcat 的要求可以根据tomcat 的事情模式分为如下两类
tomcat 作为运用程序做事器 要求来自前真个web做事器, 这可能是apache iis nginx 等
tomcat 作为独立做事器 要求来自web 浏览器
2 运行模式
常见于server.xml 的连接器类型常日有4种
1 http连接器 2 ssl 连接器, 3 ajp 连接器, 4 proxy 连接器
tomcat 有三种运行模式
bio(blocking I/o)
即壅塞式i/o 操作 一个线程处理一个要求
nio (new I/o)
java nio 是一个基于缓冲区 并能供应非壅塞I/o操作的java API
apr (可移植运行时)
tomcat 将以jni (java 本地接口)的形式调用apache http 做事器的核心动态连接库来处理文件读取或者网络传输操作 从而大大提高tomcat 对静态文件的处理性能
---------------------------------------------------------------------------------------------------------------
1 目录构造
/bin:脚本文件目录。
/common/lib:存放所有web项目都可以访问的公共jar包(利用Common类加载器加载)。
/conf:存放配置文件,最主要的是server.xml。
/logs:存放日志文件。
/server/webapps:来管理Tomcat-web做事用的。仅对TOMCAT可见,对所有的WEB APP都不可见(利用Catalina类加载器加载)。
/shared/lib:仅对所有WEB APP可见,对TOMCAT不可见(利用Shared类加载器加载)。 /temp:Tomcat运行时候存放临时文件用的。 /
webapps:web运用发布目录。
/work:Tomcat把各种由jsp天生的servlet文件放在这个目录下。删除后,启动时会自动创建。
-------------------------------------------------------------------------------------------------------
4 配置连接数
maxThreads:Tomcat利用线程来处理吸收的每个要求。这个值表示Tomcat可创建的最大的线程数。 acceptCount:指定当所有可以利用的处理要求的线程数都被利用时,可以放到处理行列步队中的要求数,超过这个数的要求将不予处理。
minSpareThreads:Tomcat初始化时创建的线程数。
maxSpareThreads:一旦创建的线程超过这个值,Tomcat就会关闭不再须要的socket线程。 enableLookups:是否反查域名,取值为:true或false。为了提高处理能力,应设置为false connectionTimeout:网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。默认可设置为20000毫秒。
web server许可的最大连接数还受制于操作系统的内核参数设置,常日Windows是2000个旁边,Linux是1000个旁边。
-----------------------------------------------------------------------------------------------------
5 配置内存大小 修正bin/catalina.bat中的set CATALINA_OPTS=-Xms64m -Xmx128m。 Xms指最小内存,Xmx指最大内存。
-----------------------------------------------------------------------------------------------------------
优化内存,紧张是在bin/catalina.bat/sh 配置文件中进行。linux上,在catalina.sh中添加: JAVA_OPTS=\公众-server -Xms1G -Xmx2G -Xss256K -Djava.awt.headless=true -Dfile.encoding=utf-8 -XX:MaxPermSize=256m -XX:PermSize=128M -XX:MaxPermSize=256M\"大众 个中:
• -server:启用jdk的server版本。 •
-Xms:虚拟机初始化时的最小堆内存。
• -Xmx:虚拟机可利用的最大堆内存。
#-Xms与-Xmx设成一样的值,避免JVM由于频繁的GC导致性能大起大落
• -XX:PermSize:设置非堆内存初始值,默认是物理内存的1/64。
• -XX:MaxNewSize:新生代占全体堆内存的最大值。
• -XX:MaxPermSize:Perm(俗称方法区)占全体堆内存的最大值,也称内存最大永久保留区域。
-------------------------------------------------------------------------------------------------------------------------------------2、连接数优化: #优化连接数,紧张是在conf/server.xml配置文件中进行修正。
2.1、优化线程数 找到Connector port=\"大众8080\"大众 protocol=\"大众HTTP/1.1\"大众,增加maxThreads和acceptCount属性(使acceptCount大于即是maxThreads),如下: <Connector port=\"大众8080\公众 protocol=\公众HTTP/1.1\"大众connectionTimeout=\"大众20000\"大众 redirectPort=\"大众8443\"大众acceptCount=\"大众500\"大众 maxThreads=\"大众400\"大众 /> 个中:
• maxThreads:tomcat可用于要求处理的最大线程数,默认是200 • minSpareThreads:tomcat初始线程数,即最小空闲线程数
• maxSpareThreads:tomcat最大空闲线程数,超过的会被关闭
• acceptCount:当所有可以利用的处理要求的线程数都被利用时,可以放到处理行列步队中的要求数,超过这个数的要求将不予处理.默认100
2.2、利用线程池 在server.xml中增加executor节点,然后配置connector的executor属性,如下: <Executor name=\公众tomcatThreadPool\"大众 namePrefix=\"大众req-exec-\"大众maxThreads=\"大众1000\"大众 minSpareThreads=\公众50\"大众maxIdleTime=\"大众60000\"大众/> <Connector port=\公众8080\公众 protocol=\公众HTTP/1.1\"大众executor=\"大众tomcatThreadPool\"大众/> 个中:
• namePrefix:线程池中线程的命名前缀
• maxThreads:线程池的最大线程数
• minSpareThreads:线程池的最小空闲线程数
• maxIdleTime:超过最小空闲线程数时,多的线程会等待这个韶光长度,然后关闭 • threadPriority:线程优先级 注:
当tomcat并发用户量大的时候,单个jvm进程确实可能打开过多的文件句柄,这时会报java.net.SocketException:Too many open files缺点。可利用下面步骤检讨
• ps -ef |grep tomcat 查看tomcat的进程ID,记录ID号,假设进程ID为10001 • lsof -p 10001|wc -l 查看当提高程id为10001的 文件操作数 • 利用命令:ulimit -a 查看每个用户许可打开的最大文件数
---------------------------------------------------------------------------------------------------------------------------------
3、Tomcat Connector三种运行模式(BIO, NIO, APR)
3.1、三种模式比较:
1)BIO:一个线程处理一个要求。缺陷:并发量高时,线程数较多,摧残浪费蹂躏资源。Tomcat7或以下在Linux系统中默认利用这种办法。
2)NIO:利用Java的异步IO处理,可以通过少量的线程处理大量的要求。Tomcat8在Linux系统中默认利用这种办法。Tomcat7必须修正Connector配置来启动(conf/server.xml配置文件):
<Connector port=\"大众8080\"大众protocol=\"大众org.apache.coyote.http11.Http11NioProtocol\"大众 connectionTimeout=\"大众20000\"大众redirectPort=\公众8443\"大众/>
3)APR(Apache Portable Runtime):从操作系统层面办理io壅塞问题。Linux如果安装了apr和native,Tomcat直接启动就支持apr。
3.2、apr模式
7、tomcat默认采取的BIO模型,在几百并发下性能会有很严重的低落。tomcat自带还有NIO的模型,其余也可以调用APR的库来实现操作系统级别掌握。NIO模型是内置的,调用很方便,只须要将上面配置文件中protocol修正成 org.apache.coyote.http11.Http11NioProtocol,重启即可生效。如下面的参数配置,默认的是HTTP/1.1。
------------------------------------------------------------------------------------------
三、tomcat 有那几种Connector 运行模式?
tomcat的运行模式有3种.修正他们的运行模式.3种模式的运行是否成功,可以看他的启动掌握台,或者启动日志.或者登录他们的默认页面http://localhost:8080/查看个中的做事器状态。
1)bio 默认的模式,性能非常低下,没有经由任何优化处理和支持.
2)nio 利用java的异步io照顾护士技能,no blocking IO技能. 想运行在该模式下,直接修正server.xml里的Connector节点,修正protocol为 <Connector port=”80″ protocol=”org.apache.coyote.http11.Http11NioProtocol” connectionTimeout=”20000″ URIEncoding=”UTF-8″ useBodyEncodingForURI=”true” enableLookups=”false” redirectPort=”8443″ />启动后,就可以生效。
3)apr 安装起来最困难,但是从操作系统级别来办理异步的IO问题,大幅度的提高性能. 必须要安装apr和native,直接启动就支持apr。下面的修正纯属多余,仅供大家扩充知识,但仍旧须要安装apr和native。如nio修正模式,修正protocol为org.apache.coyote.http11.Http11AprProtocot
-----------------------------------------------------------------------------------------------
tomcat调优 :
1. JVM参数调优:
2. 禁用DNS查询
3. 调度线程数
----------------------------------------------------------------------------------------------
Tomcat作为Web做事器,它的处理性能直接关系到用户体验,下面是几种常见的优化方法:
一、掉对web.xml的监视,把jsp提前编辑成Servlet。有富余物理内存的情形,加大tomcat利用的jvm的内存
二、做事器资源 做事器所能供应CPU、内存、硬盘的性能对处理能力有决定性影响。
(1) 对付高并发情形下会有大量的运算,那么CPU的速率会直接影响到处理速率。
(2) 内存在大量数据处理的情形下,将会有较大的内存容量需求,可以用-Xmx -Xms -XX:MaxPermSize等参数对内存不同功能块进行划分。我们之前就碰着过内存分配不敷,导致虚拟机一贯处于full GC,从而导致处理能力严重低落。
(3) 硬盘紧张问题便是读写性能,昔时夜量文件进行读写时,磁盘极随意马虎成为性能瓶颈。最好的办法还是利用下面提到的缓存。
三、利用缓存和压缩 对付静态页面最好是能够缓存起来,这样就不必每次从磁盘上读。这里我们采取了Nginx作为缓存做事器,将图片、css、js文件都进行了缓存,有效的减少了后端tomcat的访问。 其余,为了能加快网络传输速率,开启gzip压缩也是必不可少的。但考虑到tomcat已经须要处理很多东西了,以是把这个压缩的事情就交给前真个Nginx来完成。 除了文本可以用gzip压缩,实在很多图片也可以用图像处理工具预前辈行压缩,找到一个平衡点可以让画质丢失很小而文件可以减小很多。曾经我就见过一个图片从300多kb压缩到几十kb,自己险些看不出来差异。
四、采取集群 单个做事器性能总是有限的,最好的办法自然是实现横向扩展,那么组建tomcat集群是有效提升性能的手段。我们还是采取了Nginx来作为要求分流的做事器,后端多个tomcat共享session来协同事情。
五、 优化tomcat参数 这里以tomcat7的参数配置为例,须要修正conf/server.xml文件,紧张是优化连接配置,关闭客户端dns查询。