千锋教育威哥学Java——面试重灾区丨如何学会Tomcat优化问题?_威哥java面试题

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全)
img

正文

tomcat 中每一个用户请求都是一个线程,频繁地创建线程会造成性能浪费,所以可以使用线程池提高性能,修改 conf/server.xml 配置文件。

参数说明:

maxThreads:最大并发数,默认设置是200,一般建议在500~1000,根据硬件设施和业务来判断

minSpareThreads:Tomcat 初始化时创建的线程数,默认设置 25

prestartminSpareThreads:在tomcat 初始化的时候就初始化minSpareThreads的参数值,如果不等于 true,minSpareThreads的值就没啥效果了

maxQueueSize:最大的等待队列数,超过则拒绝请求

在 Connector 中设置 executor 属性指向上面的执行器

设置tomcat线程池(执行器)

在页面中显示最大线程为-1,这个说明是正常配置成功,仅仅是显示的问题,实际使用的指定值

优化tomcat运行模式

图片

Tomcat是一个小型的轻量级应用服务器,也是JavaEE开发人员最常用的服务器之一。不过,许多开发人员不知道的是,Tomcat Connector(Tomcat连接器)有bio、nio、apr三种运行模式,那么这三种运行模式有什么区别呢,我们又如何修改Tomcat Connector的运行模式来提高Tomcat的运行性能呢?

下面,我们先大致了解Tomcat Connector的三种运行模式

bio(blocking I/O),顾名思义,即阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包)。Tomcat在默认情况下,就是以bio模式运行的。遗憾的是,就一般而言,bio模式是三种运行模式中性能最低的一种。我们可以通过Tomcat Manager来查看服务器的当前状态。

nio(new I/O),是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性能。要让Tomcat以nio模式来运行也比较简单,我们只需要在Tomcat安装目录/conf/server.xml文件中将如下配置:

protocol属性值改为org.apache.coyote.http11.Http11NioProtocol即可:

此时,我们就可以在Tomcat Manager中看到当前服务器状态页面的HTTP协议的Connector运行模式已经从http-bio-8080变成了http-nio-8080。

apr(Apache Portable Runtime/Apache可移植运行时),是Apache HTTP服务器的支持库。你可以简单地理解为,Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。

我们这个版本的 tomcat 我们可以看到,默认使用的是 nio 模式,在tomcat8 中还提供了最新的 nio2,速度更快,建议使用 nio2,NIO2是JDK7新增的文件及网络I/O特性,他继承自NIO,同时添加了众多特性及功能改进,其中最重要的即是对异步I/O(AIO)的支持。

优化前 tomcat 的运行模式:

图片

优化后 tomcat 的运行模式:

图片

禁用AJP连接

AJP(Apache JServer Protocol)web 服务器和 Servlet 容器通过 TCP 连接来交互,为了节省 Socket 创建的昂贵代价,web服务器会尝试维护一个永久 TCP连接到 servlet 容器,并且在多个请求和响应周期过程会重用连接,这个协议对 Apache 处理静态内容性能很高。

但是我们一般是使用 nginx+tomcat 的架构,所以用不着 AJP 协议,所以把 AJP 连接器禁用,小伙伴们可以根据自己 tomcat 的版本,修改 conf/server.xml 文件,将 AJP 服务禁用掉即可。

图片

图片

Tomcat JVM 参数优化

图片

输入JVM 配置参数,根据每个项目的不同,JVM 参数作不同调整,以下是某互联网真实项目配置:

图片

参数详解:

-Djava.awt.headless=true 对于一个Java服务器来说经常要处理一些图形元素,例如地图的创建或者图形和图表等要使用AWT,而 AWT 依赖显示设备、键盘和鼠标的主机,通常服务器没有这些硬件设备,这个时候就会报异常,这个参数用来解决这个问题

-Djava.net.preferIPv4Stack=true  禁用 IPV6

-server 服务器启动模式,更大、更高的并发处理能力,更快更强捷的JVM垃圾回收机制,可以获得更多的负载与吞吐量

-Xms2g 设置JVM初始堆内存 -Xmx2g 设置JVM最大堆内存 -Xmn520m 设置年轻代大小

-Xss256k 是指设定每个线程的堆栈大小。一般设置不超过1M,要不然容易出现out of memory。

-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;在数据量的很大的文件导出时,一定要把这两个值设置上,否则会出现内存溢出的错误。

-XX:MaxPermSize设置最大非堆内存的大小,默认是32M,建议达到物理内存的1/4

-XX:+DisableExplicitGC 禁用显示GC,即代码中调用 System.gc()无效

-XX:+UseConcMarkSweepGC  使用 CMS 垃圾收集器

-XX:+CMSParallelRemarkEnabled 降低标记停顿

-XX:+UseCMSCompactAtFullCollection  在full GC时做压缩,使 memory 碎片减少

-XX:LargePageSizeInBytes=128m 单个页大小调整,Java进程占用最大内存

-XX:+UseFastAccessorMethods get,set 方法转成本地代码(对于jvm来说是冗余代码,jvm将进行优化)

-XX:+UseCMSInitiatingOccupancyOnly 如果不指定, 只是用设定的回收阈值CMSInitiatingOccupancyFraction,则JVM仅在第一次使用设定值,后续则自动调整会导致上面的那个参数不起作用。

-XX:CMSInitiatingOccupancyFraction=70 是指设定CMS在对内存占用率达到70%的时候开始GC

测试配置是否成功

图片

小结:

本回合面试题,涉及的点分为两大块:

1、Tomcat 本身的优化:优化线程池、优化tomcat运行模式以及 AJP 协议禁用

2、JVM 参数优化

图片

保持高薪增长的法宝

当然面试本身还可能扩展其它问题,就如我们本节开篇讲到的:保持高薪增长的法宝又是啥?保持学习力

为什么有人可以成长为架构师,CTO,能过技术让自己和家人实现美好生活,既然靠技术吃饭,那就去做到极致,技术路线完全可以承载你的梦想,有人说,做技术是青春饭,或者后面都转管理,我的理解这是错的,技术+管理,而不是转管理,才是正确的发展路线,而这个路线让你工作到退休都没问题。

需要更多教程,微信扫码即可

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

真正的技术提升。**

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
[外链图片转存中…(img-kW1z3AOG-1713542037543)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值