面试题之Tomcat

最近面试了几家公司,总结了几个共性的问题。首先研究的是tomcat及先关应用。

Q1:tomcat是先加载应用类包,还是先加载lib下的包?
这个问题考察的是对类加载机制的理解。
JVM类加载机制是双亲委派原则,即子类加载器先发现需要加载.class文件,自己不加载,委托给父类去做,层层委托到根类加载器-BootstrapClassLoader。这时父类加载器如果加载不了,就会传递给子类去加载,层层传递,直至加载完成。这样就保证了自己写的java.long.String类不会覆盖JDK的。
双亲委派原则是个建议性的,并不是所有的都遵守。
tomcat类加载机制则不相同。因为tomcat的webapp下可以放多个项目包,每个项目包都有可能以来同一个第三方jar包的不同版本,这时要是遵循双亲委派,则会导致第三方包都是同一版本,这显然是不对的。所以tomcat类加载机制是反向的,先由webapp加载器加载项目需要的.class文件,加载不了则向上传递,直到根加载器。
Q2:post和get方法的区别?get方法传参大小有上限吗?如果有,是谁在限制?
首先,post和get方法区别向安全性、可见性、缓存等不必多说,可以参考下面链接。这里重点说下传参上限。post没有,get是有的,一般是2048个字符。
但是真的可以传2048个吗,答案是不一定,受限于浏览器和web服务器,不同的浏览器限制也不一样。有码友测试过,放在下面链接里。
Q3:tomcat的8009端口是干什么用的,什么时候用?
我们都知道,tomcat的8080端口,一般访问部署的应用也是这个端口,提供HTTP一般性服务,用来和客户程序建立链接,接受客户请求。当然,这个端口也可以改成自己想要的,在conf下的service.xml里。
但是配置类里也有夜歌8009端口,这个是干什么用的呢?这个其实是用于AJP协议的,负责和其他的HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时,就需要用到这个端口。
Q4:tomcat调优?
此处调优分两个部分,一个是tomcat运营环境的jvm调优,一部分是tomcat本身的调优。
jvm调优:tomcat路径下bin\catalina.sh(catalina.bat)文件
set JAVA_OPTS=-server
-Xms1400M
-Xmx1400M
-Xmn170m
-Xss512k
-XX:+AggressiveOpts
-XX:+UseBiasedLocking
-XX:PermSize=128M
-XX:MaxPermSize=256M
-XX:+DisableExplicitGC
-XX:MaxTenuringThreshold=31
-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
-XX:+CMSParallelRemarkEnabled
-XX:+UseCMSCompactAtFullCollection
-XX:LargePageSizeInBytes=128m
-XX:+UseFastAccessorMethods
-XX:+UseCMSInitiatingOccupancyOnly
-Djava.awt.headless=true
server配置表示tomcat已真实的production模式运行,会拥有更多的资源;
xms和xmx表示jvm使用的堆最大最小内存,jvm会根据使用情况在最大最小值之间动态调整所占用的内存。但是会影响垃圾回收器在大小之间回收内存时来回切换,耗费时间。故一般这两个值设置为意义大,约为机器物理内存的1/4。
Xmn,持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
Xss,每个线程堆栈大小,默认值为1M,可根据应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数也是有限制的,不能无限生成,经验值在3000~5000左右。
一般这些就差不多了。
tomcat性能调优:server.xml文件,找到8080端口,在该处配置。
maxThreads=“300”:设置当前Tomcat的最大并发数。Tomcat默认配置的最大请求数是150个,但是在实际运用中,最大并发数与硬件性能和CPU数量都有很大关系的,这个根据自己硬件决定。
minSpareThreads=“50”:设置当前Tomcat初始化时创建的线程数,默认值为25。
acceptCount=“250”:当同时连接的人线程达到maxThreads参数设置的值时,还可以接收排队的连接数量。超过这个数量的则直接返回拒绝连接。默认值为100。在实际应用中,如果想加大Tomcat的并发数 ,应该同时加大acceptCount和maxThreads的值。
enableLookups=“false”:是否开启域名反查,一般设置为false来提高处理能力,它的取值还有true,一般很少使用。
maxKeepAliveRequests=“1”:nginx动态的转给tomcat,nginx是不能keepalive的,而tomcat端默认开启了keepalive,会等待keepalive的timeout,默认不设置就是使用connectionTimeout。所以必须设置tomcat的超时时间,并关闭tomcat的keepalive。否则会产生大量tomcat的socket timewait。maxKeepAliveRequests=”1”就可以避免tomcat产生大量的TIME_WAIT连接,从而从一定程度上避免tomcat假死。

参考连接:
https://blog.csdn.net/fd2025/article/details/80592099
https://blog.csdn.net/qq_44721831/article/details/98471707
https://blog.csdn.net/iteye_18297/article/details/82158790
https://blog.csdn.net/qq_36485859/article/details/101056799

发布了6 篇原创文章 · 获赞 0 · 访问量 354

猜你喜欢

转载自blog.csdn.net/weixin_44863376/article/details/104979003