专注Java教育14年 全国咨询/投诉热线:444-1124-454
星辉LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 职业指南 程序员保过的Tomcat优化面试题

程序员保过的Tomcat优化面试题

更新时间:2022-12-19 15:45:59 来源:星辉 浏览794次

作为一个Java开发程序员,Tomcat服务器一定是很了解的,毕竟是大多数企业常用到的,但是,在一些并发量比较大的情况下,Tomcat会出现卡死或者自动关闭的情况,那么如何优化,才能让它更加告诉运行就成了在面试时会被问到的问题,让我们来看看如何确保Tomcat能够更好的运行吧。

tomcat优化面试题

1、Tomcat的缺省端口是多少,怎么修改?

1)找到Tomcat目录下的conf文件夹

2)进入conf文件夹里面找到server.xml文件

3)打开server.xml文件

4)在server.xml文件里面找到下列信息

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1"
 
redirectPort="8443" uriEncoding="utf-8"/>
 
port="8080"改成你想要的端口

2、tomcat 有哪几种Connector 运行模式(优化)?

bio:传统的Java 工/0操作,同步且阻塞IO。maxThreads="150”//Tomcat使用线程来处理接收的每个请求。这个值示Tomcat可创建的最大的线程数。默认值200。可以根据机器的时期性能和内存大小调整,一般可以在400-500。最大可以在800左右。minspareThreads="25"---Tomcat初始化时创建的线程数。默认值4。如果当前没有空闲线程,且没有超过maxThreads,一次性创建的空闲线程数量。Tomcat初始化时创建的线程数量也由此值设置。maxSpareThreads="75"--一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值50。一旦创建的线程超过此数值,Tomcat会关闭不再需要的线程。线程数可以大致上用“同时在线人数”每秒用户操作次数”系统平均操作时间” 来计算。acceptcount="100"----指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的语求数,超过这个数的请求将不予处理。默认值10。如果当前可用线程数为0,则将请求放入处理队列中。这个值限定了请求队列的大小,超过这个数值的请求将不予处理。connectionTimeout="20000” --网络连接超时,默认值20000,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。

nio: JDK1.4开始支持,同步阻塞或同步非阻塞IO。

指定使用NIO模型来接受HT TP请求
protocol="org.apache.coyote.http11.Httpl1NioProtoco]”指定使用NIO模型来接受HTTP请求。默认是BlockingIo,配置为protoco1="HTTP/1.1"acceptorThreadCount="2”” 使用NIO模型时接收线程的数目
aio(nio.2): JDK7开始支持,异步非阻塞IO。
apr: Tomcat将以]NI的形式调用Apache HTTP服务器的核心动态接来处理文件选取或网络传输操作从而大大地 提高Tomcat对静态文件的处理性能。
C1-1
<Connector connectionTimeout="20000" port="8000" protocol="HTTP/1.1"redirectport"8443” uriencoding="utf-8"/>
-Iv
<!-- protocol 启用 nio模式,(tomcat8默认使用的是nio)(apr模式利用系统级异步io) -->
<!-- minProcessors最小空闲连接线程数-->
<!-- maxProcessors最大连接线科数-->
<!-- acceptCount允许的最大连接数,应大于等于maxProcessors-->
<l-- enableLookups 如果为true,requst.getRemoteHost会执行DNS查找,反向解析ip对应域名或主机名-->
Connector port="8080protocol="org.apache.coyote.httpl1.Httpl1NioProtocolconnectionTimeout="20000redirectPort="8443maxThreads=“500"minSpareThreads=“100"
maxspareThreads="200"
acceptCount="200"
enablelookups"fase"
其他配置
maxHttpHeadersize="8192”http请求头信息的最大程度,超过此长度的部分不予处理。一般8K。URIEncoding="UTF-8”” 指定Tomcat容器的URL编码格式。disableUploadtimeout="true" 上传时是否使用超时机制enableLookups="false"--是否反查域名,默认值为true。为了提高处理能力,应设置为falsecompression="on"”打开乐缩功能
compressionMinsize="10240” 启用压缩的输出内容大小,默认为2KBnoCompressionuserAgents="gozilla,traviata" 对于以下的浏览器,不启用乐缩compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"些资源类型需要压缩

3、Tomcat有几种部署方式?

1)直接把Web项目放在webapps下,Tomcat会自动将其部署

2)在server.xml文件上配置节点,设置相关的属性即可

3)通过Catalina来进行配置:进入到conf\Catalina\localhost文件下,创建一个xml文件,该文件的名字就是站点的名字。

编写XML的方式来进行设置。

4、tomcat容器是如何创建servlet类实例?用到了什么原理?

当容器启动时,会读取在webapps目录下所有的web应用中的web.xml文件,然后对xml文件进行解析,并读取servlet注册信息。然后,将每个应用中注册的servlet类都进行加载,并通过反射的方式实例化。(有时候也是在第一次请求时实例化)在servlet注册时加上如果为正数,则在一开始就实例化,如果不写或为负数,则第一次请求实例化。

5、内存调优

内存方式的设置是在catalina.sh中,调整一下JAVA OPTS变量即可,因为后面的启动参数会把JAVA OPTS作为JVM的启动参数来处理。具体设置如下:

JAVA OPTS="SJAVA OPTS -Xmx3550m -Xms3550m -Xss128k -X:NewRatio=4 -Xx:SurvivorRatio=4"其各项参数如下:

-Xmx3550m: 设置JVM最大可用内存为3550M。

-Xms3550m: 设置JM促使内存为3550m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。

-Xmn2g: 设置年轻代大小为2G。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。

-Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。-xX:NewRatio=4:设置年轻代 (包括Eden和两个survivor区) 与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1: 4,年轻代占整个堆栈的1/5-xX:SurvivorRatio=4: 设置年轻代中Eden区与survivor区的大小比值。设置为4,则两个survivor区与一个Eden区的比值为2:4,一个survivor区占整个年轻代的1/6XX:MaxPermsize=16m:设置持久代大小为16m。-XX:MaxTenuringthreshold=0: 设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。

以上就是“程序员保过的Tomcat优化面试题”,你能回答上来吗?如果想要了解更多的Java面试题相关内容,可以关注星辉Java官网。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>