#yyds干货盘点#Java面试题
  Q8kBBcWMVcCB 2023年12月15日 13 0

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 有几种部署方式?

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

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

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

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

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

4、Tomcat 工作模式?

Tomcat 是一个 JSP/Servlet 容器。其作为 Servlet 容器,有三种工作模式:

独立的 Servlet 容器
进程内的 Servlet 容器
进程外的 Servlet 容器

进入 Tomcat 的请求可以根据 Tomcat 的工作模式分为如下两类: Tomcat 作为应用程序服务器:请求来自于前端的 web 服务器,这可能是 Apache, IIS, Nginx 等;Tomcat 作为独立服务器:请求来自于 web 浏览器。

5、如何查询 Tomcat 的 session 数目

这个可以直接从 Tomcat 的 web 管理界面去查看 ;或者借助于第三方工具 Lambda Probe 来查看,它相对于 Tomcat 自带的管理稍微多了点功能。

6、监视 Tomcat 的内存使用情况

使用 JDK 自带的 jconsole 可以比较明了的看到内存的使用情况,线程的状态,当前加载的类的总量等;JDK 自带的 jvisualvm 可以下载插件(如 GC 等)可以查看更丰富的信息。如果是分析本地的 Tomcat 的话,还可以进行内存抽样等,检查每个类的使用情况。

其实Tomcat调优很重要,但是一时半会也写不完(好懒,不想写)

简单讲一些我知道的吧(有问题欢迎评论留言)
主要还是修改配置项
1、修改连接数,关闭客户端dns查询
为了消除DNS查询对性能的影响我们可以关闭DNS查询。
修改server.xml文件中的enableLookups参数值,enableLookups=”false”

2、开启Tomcat配置的gzip压缩(HTTP压缩)功能
# 打开压缩功能
compression=”on”
# 压缩输出内容大小
compressionMinSize=”2048″
# 压缩类型
compressableMimeType=”text/html,text/xml,
text/JavaScript,text/css,text/plain”

HTTP 压缩可以大大提高浏览网站的速度
它的原理是,在客户端请求网页后
从服务器端将网页文件压缩,再下载到客户端
由客户端的浏览器负责解压缩并浏览
相对于普通的浏览过程HTML、CSS、javascript、Text等
它可以节省40%左右的流量
更为重要的是,它可以动态生成的
包括CGI、PHP、JSP、ASP、Servlet、SHTML等输出的网页也能进行压缩

除了以上两点Tomcat配置调优,我们还可以看看内存调优 (好吧!越讲越多,根本讲不完,裂开)

内存调优

内存方式的设置是在catalina.sh中,调整一下JAVA_OPTS变量即可,
因为后面的启动参数会把JAVA_OPTS作为JVM的启动参数来处理。
具体设置如下:
JAVA_OPTS="$JAVA_OPTS -Xmx1024m -Xms1024m -Xss128k 
-XX:NewRatio=4 -XX:SurvivorRatio=4"

-Xmx1024m:设置JVM最大可用内存为3550M。
-Xms1024m:设置JVM促使内存为3550m。此值可以设置与-Xmx相同,
以避免每次垃圾回收完成后JVM重新分配内存。
-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/6 

除了以上几个,还可以了解一下配置
-Xmn2g:设置年轻代大小为2G。
整个堆大小=年轻代大小+ 年老代大小+ 持久代大小。
持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。
此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-XX:MaxPermSize=16m:设置持久代大小为16m。
-XX:MaxTenuringThreshold=0:设置垃圾最大年龄。
如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。
对于年老代比较多的应用,可以提高效率。
如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,
这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月15日 0

暂无评论

推荐阅读
  bVJlYTdzny4o   6天前   16   0   0 Java
Q8kBBcWMVcCB