精品推荐:Tomcat优化总结(实战版)

偷懒的程序员 2018-07-18 11:28:18 ⋅ 745 阅读

Tomcat是我们经常使用的 servlet容器之一,甚至很多线上产品都使用 Tomcat充当服务器。而且优化后的Tomcat性能提升显著,本文从以下几方面进行分析优化(文章针对linux操作系统)。

目录结构

优化预览

内存优化

linux系统中,参数在catalina.sh中配置。

配置最小内存:-Xms2048M,最大内存:-Xmx2048M。

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=F:softwareapache-tomcat-8.0.36logsheap.dump。内存溢出时,内存影像dump到文件中。

新生代,老生代不用配置了,新版本的jdk默认的已经做的非常好了。jdk8已经不存在永久代。从JDK8开始,永久代(PermGen)的概念被废弃掉了,取而代之的是一个称为Metaspace的存储空间。可理解为元数据空间。

移除永久代的工作从JDK1.7就开始了。JDK1.7中,存储在永久代的部分数据就已经转移到了Java Heap或者是 Native Heap。但永久代仍存在于JDK1.7中,并没完全移除,譬如符号引用(Symbols)转移到了native heap;字面量(interned strings,字符串池)转移到了java heap;类的静态变量(class statics)转移到了java heap。

转载:Java8内存模型—永久代(PermGen)和元空间(Metaspace):http://www.cnblogs.com/paddix/p/5309550.html

转载:为何去掉永久代:https://blog.csdn.net/u011531613/article/details/62971713

如果你的业务生成的对象很多会进入老年代,生命周期非常长,建议内存稍大一点。这样可以节约频繁的GC的开销。

如果你的业务生成的对象很多都是朝生夕灭,生命周期短暂,建议新生代和老年代内存比例可以适当调整,老年代小一点。Min GC会相对来说稍微频繁一点。但是尽量避免Full GC。因为这个对JVM性能影响比Min GC大很多。

如果你们的业务对内存很敏感,上线前一半要做很多实验和测试来确定合适的内存大小。

新生代和老年代的比例如:-XX:NewRatio=2,即新生代:老年代=1:2。jdk8中,配置2g内存后,查看tomcat信息,如下图所示。


tomcat运行后,默认页面,点击server status.


并发优化

具体参数含义,参考tomcat安装目录下,webappsdocsconfig里的http.html文件。

2.1 maxConnections

最大连接数。对于 NIO and NIO2 默认值为10000. 对于 APR/native, 默认值为8192。windows系统默认采用APR。linux下,需安装配置。apr适合高并发下的文件读写。

2.2 acceptCount

并发连接数达到配置的值时,新的请求放入队列中。该值为队列大小。默认值为100.

2.3 maxThreads

最大线程数。默认200。一般8核cpu,200个线程足够了。如果存在大量的web输入,等待IO,该值可以调大。

2.4 minSpareThreads

默认10。最小空闲线程。

具体参数在server.xml里配置。

其他优化

3.1 autoDeploy

具体参数含义,参考tomcat安装目录下,webappsdocsconfig里的host.html文件。

该参数是指,tomcat是否周期性的检查有没有新的应用或是更新的应用。默认为true,会影响性能。

3.2 enableLookups

具体说明,http.html文件中。

如果想进行dns查询,设置为true。如果想跳过,则设置为false,会直接返回IP地址。默认false(低版本tomcat不一定)。false下,会提升性能。

3.3 reloadable

true的情况下,监控WEB-INF/classes/和/WEB-INF/lib下的变化,自动重新加载web应用。线上绝对不允许开发,会造成非常严重的负载。默认也是false.

3.4 AJP

ajp是和apache集成的时候用的,一般采用的是nginx+tomcat,用不到,注销掉。即在server.xml文件中,注销:

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

3.5 关闭SSLEngine

如果没有用到ssl,在server.xml中,

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off">

总体来说,tomcat新的版本,大部分已经配置好了,基本上能做到开箱即用。

apr连接器

apr会用到native的api,适用于大并发。如果网站用到大并发,需要用到apr。

安装最新apr和其依赖项,到官网下载。

安装完成后,在server.xml里配置如下:


具体安装apr完成之后,修改总览如下。


从JDK8开始,永久代(PermGen)的概念被废弃掉了,取而代之的是一个称为Metaspace的存储空间。

-XX:MetaspaceSize=128m,设置元空间初始大小为128M。该值越大触发Metaspace GC的时机就越晚。随着GC的到来,虚拟机会根据实际情况调控Metaspace的大小,可能增加上线也可能降低。Metaspace使用的是本地内存,而不是堆内存,也就是说在默认情况下Metaspace的大小只与本地内存大小有关。

内存调优工具,jdk安装后,有几个自带的分析命令,如:jstat,jmap等


---------------END----------------

后续的内容同样精彩

长按关注“IT实战联盟”哦




全部评论: 0

    我有话说:

    精品推荐:nginx常用配置总结实战

    Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。

    Apache Tomcat 8.5.59、9.0.39和10.0.0-M9发布

    Apache Tomcat 8.5.59, 9.0.39 和 10.0.0-M9 已发布。 8.5.x 已取代 8.0.x,并增加了从 Tomcat 9.0.x 中吸收的新功能。与 8.5.58

    精品推荐:Java核心数据结构(List,Map,Set)使用技巧与优化

    JDK提供了一组主要的数据结构实现,如List、Map、Set等常用数据结构。这些数据都继承自 java.util.Collection 接口,并位于 java.util 包内。

    IntelliJ IDEA 开启很慢,运行不流畅,大项目卡顿?一招配置解决!

    来源:Java面试题精选 一、前言 IDEA默认启动配置主要考虑低配置用户,参数不高(默认最低128m,最高512m),导致启动慢,然后运行也不流畅,这里我们需要优化下启动和运行配置;但是在工作中

    精品推荐:【CKEditor】全球最优秀的网页在线文字编辑器之一

    CKEditor是新一代的FCKeditor,是一个重新开发的版本。CKEditor是全球最优秀的网页在线文字编辑器之一,因其惊人的性能与可扩展性而广泛的被运用于各大网站。

    精品推荐:如何实现一个TCC分布式事务框架的一点思考

    本文将以Spring容器为例,试图分析一下,实现一个通用的TCC分布式事务框架需要注意的一些问题。

    移动H5前端五大性能优化方案(实战篇)

    移动H5前端五大性能优化方案(实战篇)

    Flink + 强化学习搭建实时推荐系统

    如今的推荐系统,对于实时性的要求越来越高,实时推荐的流程大致可以概括为:推荐系统对于用户的请求产生推荐,用户对推荐结果作出反馈 (购买/点击/离开等等),推荐系统再根据用户反馈作出新的推荐。这个过程

    「开源推荐」Nginx可视化配置工具—NginxWebUI,小白也可以玩转

    包括http协议转发, tcp协议转发, 反向代理, 负载均衡, ssl证书自动申请、续签、配置等

    精品推荐:大神总结的十大 JavaScript 错误及如何规避

    通过统计数据库中的1000多个项目,我们发现在 JavaScript 中最常出现的错误有10个。下面会向大家介绍这些错误发生的原因以及如何防止。

    精品推荐:微服务架构下静态数据通用缓存机制

    在分布式系统中,特别是最近很火的微服务架构下,有没有或者能不能总结出一个业务静态数据的通用缓存处理机制或方案,这篇文章将结合一些实际的研发经验,尝试理清其中存在的关键问题以及探寻通用的解决之道。

    抖音品质建设 - iOS启动优化实战篇》

    前言 启动是 App 给用户的第一印象,启动越慢,用户流失的概率就越高,良好的启动速度是用户体验不可缺少的一环。启动优化涉及到的知识点非常多,面也很广,一篇文章难以包含全部,所以拆分成两部分:原理和

    Netty单机百万连接及高性能优化

    关于netty的学习和介绍,可以去github看官方文档,这里良心推荐《netty实战》和《netty权威指南》两本书,前者对于新手更友好,原理和应用都有讲到,多读读会发现很多高性能的优化点。

    1分钟搞定Centos7/Linux中Tomcat安装SSL证书

    架构运维篇(四):Centos7/Linux中Tomcat安装SSL证书实践

    【开源推荐】基于 Go 语言的轻量级高性能日志库 logit使用及测评

    logit 是一个简单易用并且是基于级别控制的日志库,可以应用于所有的 GoLang 应用程序中。

    精品推荐:微信平台反编译找回丢失的小程序源码

    这篇文章是总结了一下公司后台开发的经验,之前他的电脑系统突然就坏掉了,电脑里的小陈需源码也丢失了,怎么找回呢?

    iOS TableView性能优化

    TableView的性能优化非常考验开发的基本功,之前做项目实战的时候经常被这个问题困扰