Tomcat面试题二

1. 添加 JMS 远程监控
对于部署在局域网内其它机器上的 Tomcat,可以打开 JMX 监控端口,局域网
其它机器就可以通过这个端口查看一些常用的参数(但一些比较复杂的功能不
支持),同样是在 JVM 启动参数中配置即可,配置如下:
-Dcom.sun.management.jmxremote.ssl=false -
Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=192.168.71.38 设置 JVM 的 JMS 监控监听的 IP
地址,主要是为了防止错误的监听成 127.0.0.1 这个内网地址
-Dcom.sun.management.jmxremote.port=1090 设置 JVM 的 JMS 监控的端口
-Dcom.sun.management.jmxremote.ssl=false 设置 JVM 的 JMS 监控不实用
SSL
-Dcom.sun.management.jmxremote.authenticate=false 设置 JVM 的 JMS 监
控不需要认证

2. 专业点的分析工具有
IBM ISA,JProfiler、probe 等,具体监控及分析方式去网上搜索即可

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

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

5. 打印类的加载情况及对象的回收情况
这个可以通过配置 JVM 的启动参数,打印这些信息(到屏幕(默认也会到
catalina.log 中)或者文件),具体参数如下:
-XX:+PrintGC:输出形式:[GC 118250K->113543K(130112K), 0.0094143
secs] [Full GC 121376K->10414K(130112K), 0.0650971 secs]
-XX:+PrintGCDetails:输出形式:[GC [DefNew: 8614K->781K(9088K),
0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs] [GC
[DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured:
112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K),
0.0436268 secs]
-XX:+PrintGCTimeStamps -XX:+PrintGC:PrintGCTimeStamps 可与上面两个
混合使用,输出形式:11.851: [GC 98328K->93620K(130112K), 0.0082960
secs]
-XX:+PrintGCApplicationConcurrentTime:打印每次垃圾回收前,程序未中断
的执行时间。可与上面混合使用。输出形式:Application time: 0.5291524
seconds
-XX:+PrintGCApplicationStoppedTime:打印垃圾回收期间程序暂停的时间。
可与上面混合使用。输出形式:Total time for which application threads were
stopped: 0.0468229 seconds
-XX:PrintHeapAtGC: 打印 GC 前后的详细堆栈信息
-Xloggc:filename:与上面几个配合使用,把相关日志信息记录到文件以便分析
-verbose:class 监视加载的类的情况
-verbose:gc 在虚拟机发生内存回收时在输出设备显示信息
-verbose:jni 输出 native 方法调用的相关情况,一般用于诊断 jni 调用错误信息

6.Tomcat 一个请求的完整过程
Ng:(nginx)
upstream yy_001{
server 10.99.99.99:8080;
server 10.99.99.100:8080;
hash $**;
healthcheck_enabled;
healthcheck_delay 3000;
healthcheck_timeout 1000;
healthcheck_failcount 2;
healthcheck_send ‘GET /healthcheck.html HTTP/1.0’ ‘Host: wo.com’
‘Connection: close’;
}
server {
include base.conf;
server_name wo.de.tian;

location /yy/ {
proxy_pass http://yy_001;
}
首先 dns 解析 wo.de.tian 机器,一般是 ng 服务器 ip 地址
然后 ng 根据 server 的配置,寻找路径为 yy/的机器列表,ip 和端口
最后 选择其中一台机器进行访问—->下面为详细过程

  1. 请求被发送到本机端口 8080,被在那里侦听的 Coyote HTTP/1.1
    Connector 获得
  2. Connector 把该请求交给它所在的 Service 的 Engine 来处理,并等待来自
    Engine 的回应
  3. Engine 获得请求 localhost/yy/index.jsp,匹配它所拥有的所有虚拟主机 Host
  4. Engine 匹配到名为 localhost 的 Host(即使匹配不到也把请求交给该 Host
    处理,因为该 Host 被定义为该 Engine 的默认主机)
  5. localhost Host 获得请求/yy/index.jsp,匹配它所拥有的所有 Context
  6. Host 匹配到路径为/yy 的 Context(如果匹配不到就把该请求交给路径名
    为”“的 Context 去处理)
  7. path=”/yy”的 Context 获得请求/index.jsp,在它的 mapping table 中寻找
    对应的 servlet
  8. Context 匹配到 URL PATTERN 为*.jsp 的 servlet,对应于 JspServlet 类
  9. 构造 HttpServletRequest 对象和 HttpServletResponse 对象,作为参数调用
    JspServlet 的 doGet 或 doPost 方法
    10)Context 把执行完了之后的 HttpServletResponse 对象返回给 Host
    11)Host 把 HttpServletResponse 对象返回给 Engine
    12)Engine 把 HttpServletResponse 对象返回给 Connector
    13)Connector 把 HttpServletResponse 对象返回给客户 browser

7.Tomcat 工作模式?
Tomcat 是一个 JSP/Servlet 容器。其作为 Servlet 容器,有三种工作模式:独
立的 Servlet 容器、进程内的 Servlet 容器和进程外的 Servlet 容器。
进入 Tomcat 的请求可以根据 Tomcat 的工作模式分为如下两类:
Tomcat 作为应用程序服务器:请求来自于前端的 web 服务器,这可能是
Apache, IIS, Nginx 等;
Tomcat 作为独立服务器:请求来自于 web 浏览器;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值