专栏首页纯洁的微笑这年头还有问Tomcat调优和JVM参数优化的,你还不知道怎么回答么?那么你一定需要看看这篇文章

这年头还有问Tomcat调优和JVM参数优化的,你还不知道怎么回答么?那么你一定需要看看这篇文章

Tomcat

关于Tomcat是什么东西,相信大家做开发的,肯定是一点也不陌生,服务器,Web应用服务器,一种轻量级的应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。

而我们在日常的开发中,可能很大一部分我们只是知道怎么使用Tomcat服务器,但是却不知道怎么去调整Tomcat里面的各种配置参数,让Tomcat能够更好的运行,那么就听阿粉来给大家介绍把。

配置文件修改优化

Tomcat在Windows下一般的目录都是我们下载解压出来的目录也就是${TOMCAT_HOME},就像这个样子 D:\develop\tomcat\apache-tomcat-7.0.88,而他的配置文件就是conf下的server.xml文件,而我们需要调优的肯定也是这个文件里面的内容。

我们就先从 Connector 来进行分析:

Connector :连接器,负责接收客户的请求,以及向客户端回送响应的消息

而我们对 Connector 优化,其实优化的就是我们在访问请求时候的并发能力,而往往并发也是我们在工作中很多时候需要去考虑的问题,而我们在这个连接器里面可以配置什么内容呢?

    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

我们最常用的就是在里面配置一个URL的统一编码格式比如说我们在里面配置一个 UTF-8 的编码格式。

URIEncoding :URIEncoding = UTF-8

executor : 指定这个连接器所使用的执行器(线程池)

connectionTimeout :连接超时时间

maxThreads :客户请求最大线程数

minSpareThreads :Tomcat初始化时创建的线程数,一直会运行的线程

maxSpareThreads :Tomcat连接器的最大空闲线程数

minProcessors :服务器创建时的最小处理线程数

maxProcessors :服务器同时最大处理线程数

enableLookups :若设为true, 则支持域名解析,可把 ip 地址解析为主机名,而为了减少性能的消耗的话,我们就有时候会关闭它

redirectPort :在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口

acceptAccount :监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads )

而我们一般最常搭配的,却是 URIEncoding 而很少的去改其他的配置,但是在面试中,肯定不会说让你去优化编码格式把,而我们修改的一定是其他的关于最大处理线程数,域名解析啦,

而我们在最终的配置就不再是上面的代码了,而变成了优化之后的:

    <Connector port="8080"
        protocol="HTTP/1.1" 
        connectionTimeout="20000" 超时时间,毫秒
        redirectPort="443" 
        maxThreads="3000" 最大线程数
        minSpareThreads="20" 最小空闲线程数,这里是一直会运行的线程
        acceptCount="1000" 监听端口队列数
        enableLookups="false" 关闭dns解析,减少性能损耗
        server="None"               
        URIEncoding="UTF-8"   
      />

NIO和BIO还有 NIO2

其实关于 NIO 和 BIO 和 AIO 阿粉在之前已经完全都说过了,同步阻塞 IO 就是 BIO ,而同步非阻塞IO和异步阻塞IO 就是 NIO ,而异步非阻塞IO就是 AIO 啦,

BIO :同步阻塞IO

NIO :同步非阻塞IO和异步阻塞IO

AIO :这种异步非阻塞 IO 是我们最需要注意的,是从 JDK7 及其以上才会支持的。

话不多说,直接上如何修改,

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

<Connector connectionTimeout="20000" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443"/>
            

网上有人说,从 Tomcat8 以上就是 NIO 模式了,但是实际情况好像是没有,还是需要自己手动去换成 NIO 模式。

关于 Tomcat的优化,阿粉就不再给大家叙述了,给大家再来说说这个关于 JVM 的优化。

JVM

阿粉最开始写文章的时候,就是首先从 JVM 写起来的,大家可以搜索一下曾经阿粉写的关于 JVM 的内容,里面有对 JVM 的完整的介绍,对 FullGC ,YGC 等垃圾收集方式,都做过介绍,这里阿粉只给大家介绍怎么去通过修改 Tomcat 的配置,来达到,我们对 JVM 的优化。

大家都知道,正确的选择不同的 GC 策略,调整 JVM、GC 的参数,可以极大的减少由于 GC 工作,而却这样会大大的提高我们程序的运行效率。

目录还是那个目录,Tomcat 的根目录下的 bin 目录,catalina.bat ,Linux的话,去修改.sh 的文件即可。

找到 JAVA_OPTS 而他就是用来设置 JVM 相关运行参数的变量的,在这里阿粉也给大家说一下关于 JVM 的参数属性,不然不能直接瞎改吧,容易出事。

-Xms :初始堆大小 物理内存的1/64(<1GB)

-Xmx :最大堆大小 物理内存的1/4(<1GB)

-Xmn :年轻代大小(1.4or lator) 注意的是这个 ,整个堆大小=年轻代大小 + 年老代大小 + 持久代大小.

-XX:NewSize :设置年轻代大小(for 1.3/1.4)

-XX:MaxNewSize :年轻代最大值(for 1.3/1.4)

-XX:PermSize :设置持久代(perm gen)初始值 物理内存的1/64

-XX:MaxPermSize :设置持久代最大值 物理内存的1/4

-Xss :每个线程的堆栈大小

-XX:NewRatio :年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)

-XX:+AggressiveOpts :加快编译

-XX:+UseBiasedLocking :锁机制的性能改善

-XX:+DisableExplicitGC :关闭System.gc()

-XX:+UseParNewGC :设置年轻代为并行收集

-XX:+UseConcMarkSweepGC :使用CMS内存收集

-XX:MaxTenuringThreshold :垃圾最大年龄

-XX+UseCMSCompactAtFullCollection :在FULL GC的时候, 对年老代的压缩

-XX:LargePageSizeInBytes :内存页的大小不可设置过大, 会影响Perm的大小

-XX:+UseFastAccessorMethods :原始类型的快速优化

-XX:+UseCMSInitiatingOccupancyOnly :使用手动定义初始化定义开始CMS收集

而这些内容就是需要你去自己手动去挑选一些合适的自己去配置上去,而不是一股脑的复制上去,不然适得其反就不好了。

给阿粉点个在看吧?

< END >

本文分享自微信公众号 - 纯洁的微笑(keeppuresmile)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-11-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java架构师如何冲击年薪40w

    美的让人心动
  • 阿里优酷面试经历——学无止境

    最近几周与阿里的面试官聊了聊,趁着我还有记忆先写下来。本人近5年工作的JAVA程序员,技术不精。大伙不必太过吐槽。哈哈。我曾两次时间投过简历。

    java架构师
  • 在北京做Java开发如何月薪达到两万,需要技术水平达到什么程度?

    美的让人心动
  • 一人血书,想让why哥讲一下这道面试题。

    我觉得如果你工作了两年左右的时间,或者是突击准备了面试,这题回答个八成上来,应该是手到擒来的事情。这题中规中矩,考点清晰,可以说的东西不是很多。

    why技术
  • 在一线城市做Java开发如何月薪达到两万,需要技术水平达到什么程度?

    有人回答说这只能是大企业或者互联网企业工程师才能拿到。也许是的,小公司或者非互联网企业拿两万的不太可能是码农了,应该已经转管理。还有区域问题,这个不在我的考虑范...

    欧阳愠斐
  • 2021年突破年薪百万难关!吃透这套Java真题合集

    我相信大多 Java 开发的程序员或多或少经历过BAT一些大厂的面试,也清楚一线互联网大厂 Java 面试是有一定难度的,小编经历过多次面试,有满意的也有备受打...

    Java程序猿
  • 从业4年互联网寒潮下我的面试总结(美团\陌陌\百度\阿里\京东)

    已经凌晨2点多了,看来今天是失眠了,反正睡不着,写篇日记总结一下我最近面试经历吧。

    欧阳愠斐
  • 达到年薪 40W 必需掌握的技术。

    很多人在问我,程序员如何拿高薪,如何做到年薪40W+,其实总结出来还是一句话,你的技术决定你的能力已经薪资。

    Java技术栈
  • 95后妹子面试的那些"套路"(附带个人书籍推荐)

    最近有很多朋友问我一些面试题,或者说准备面试了,怎么复习啊. 孔孔老师就上线了…正好趁着早上不想学习, 就再把这一块总结总结. 个人拙见(毕竟我还是很low的…...

    kirito-moe
  • 关于Java面试,你应该准备这些知识点

    来自:简书 占小狼 链接:http://www.jianshu.com/p/1b2f63a45476(点击尾部阅读原文前往) 链接:http://www.ji...

    顶级程序员
  • 关于Java面试,你应该准备这些知识点

    马老师说过,员工的离职原因很多,只有两点最真实: 钱,没给到位 心,受委屈了 当然,我是想换个平台,换个方向,想清楚为什么要跳槽,如果真的要跳槽,想要拿到一个理...

    前朝楚水
  • tomcat调优

    Tomcat 的启动参数位于tomcat的安装目录\bin目录下,如果你是Linux操作系统就是catalina.sh文件,如果你是Windows操作系统那么你...

    剑行者
  • JAVA面试解析(有赞一面)

    本文的题目出自博客 http://www.54tianzhisheng.cn/2018/07/12/youzan/ 但是作者没有给出答案,博主斗胆来制作答案版。

    JAVA葵花宝典
  • JAVA面试解析(有赞一面)

    本文的题目出自博客 http://www.54tianzhisheng.cn/2018/07/12/youzan/ 但是作者没有给出答案,博主斗胆来制作答案版。

    乔戈里
  • 面试总结——Java高级工程师(二)

    时运不济,才到16年10月份,公司资金紧张,不得已又出去面试,面试了大概四家公司,只有一家offer ,被打击的体无完肤。 多说无益,下面是面试中提到的面试题和...

    执笔记忆的空白
  • 金三银四跳槽季,阿里面试刚回来的总结——干货!前言:面试总结总结:

    美的让人心动
  • 面试被问:你会性能调优吗?

    很多工作两三年的同行都跟我说,认为性能调优没什么用。刚工作的时候我也这样以为,但后来我才知道我当时想法多么的天真。

    Java团长
  • 一步之差进入大厂,下定决心钻透java所有面试题,顺利通过!

    这篇文章真的是给大家分享一篇我自己血的教训,本人是一个勤勤恳恳、任劳任怨的java程序猿一直都在自己的岗位上发光发热,耐不住今年疫情小心思就发芽了,想要跳槽到大...

    程序员白楠楠
  • 听说 JVM 性能优化很难?今天我小试了一把!

    对于 Java 开发的同学来说,JVM 性能优化可以说是比较难掌握的知识点。这不仅因为 JVM 性能优化需要掌握晦涩难懂的 JVM 知识,还因为 JVM 性能优...

    陈树义

扫码关注云+社区

领取腾讯云代金券