Tomcat 性能优化

小七学习网,助您升职加薪,遇问题可联系:客服微信【1601371900】 备注:来自网站

Tomcat 作为我们 Web 应用中非常重要的一个容器,它作为应用服务器。可以运行我们按照 j2EE 中的 Servlet 规范编写好的 Java 程序。目前在 Web 应用中使用的非常广泛。 主要…

Tomcat 作为我们 Web 应用中非常重要的一个容器,它作为应用服务器。可以运行我们按照 j2EE 中的 Servlet 规范编写好的 Java 程序。目前在 Web 应用中使用的非常广泛。

主要可以学习如下知识:

  1. Tomcat 的目录结构,及每个目录的作用。
  2. Tomcat 安全问题,默认配置存在一定的安全隐患,如何修改。
  3. SSL 传输安全配置。
  4. 性能调优。


Tomcat 目录介绍

这里不放全部介绍,经常遇到的文件夹及文件,详细可以到官网查看。

bin 目录

bin 目录主要用来存放 Tomcat 的命令,分为两类:.sh(linux 命令)结尾和 .bat(window 命令)结尾的文件。其中:

  • startup 用来启动 Tomcat
  • shutdow 用来关闭 Tomcat
  • version 展示 Tomcat 版本、JDK 路径等信息
  • catalina 可以配置 Tomcat 内存分配、应用启动名称等

在这里插入图片描述

conf 目录

  • conf 目录主要是存放 Tomcat 的配置文件
  • service.xml 可以设置端口号、ip、默认加载项目、请求编码等
  • web.xml 可以这是 Tomcat 支持的文件类型
  • context.xml 可以用来配置数据源
  • tomcat-users.xml 用来配置管理 Tomcat 的用户与权限
  • logging.properties 日志相关配置

logs

  • catalina.log:tomgcat 的标准输出

webapps

webapps 目录用于存放应用程序。Tomcat 启动后会去加载 webapps 目录下的应用程序。这里要注意的是 ROOT 目录,Tomcat 默认读取目录,当 ROOT 下没有项目名访问 localhost://8080。当 ROOT 下有文件夹则:localhost://8080/***。星号标识文件夹名称。

Tomcat 安全

Tomcat 默认配置上存在一定的安全隐患,可能会被恶意攻击。

调整 server.xml 配置:

在这里插入图片描述

默认使用 Telnet 连接进来可以数据 shutdown 直接关闭 Tomcat,这样极不安全。可以将默认端口改为其他端口,修改 shutdown 指令为其他字符串。

<Server port=\"8095\" shutdown=\"IN0OUT\">

当使用 HTTP 访问时可以限制 AJP 的访问。注释下面这行即可。

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

脚本权限控制

bin 目录下存放的 Tomcat 的核心指定,可以设置只有 root 用户才能执行,防治其他用户操作。

如:

chmod -R 744 bin/*

SSL 传输安全

Tomcat 默认传输格式是 HTTP,HTTP 协议传输的数据是未加密的明文传输,因此使用 HTTP 协议传输隐私信息是不安全的。为了保证信息传输的安全,我们可以使用 HTTPS 方式。

HTTPS 协议的使用方法如下:

1.\\ 购买证书。

2. 解压证书。证书格式之间可以相互转换。jks 转 pfx。

3. 把证书传入 Tomcat 的 conf 目录下。

4. 修改 server.xml 文件。

 <Connector port=\"8443\" protocol=\"org.apache.coyote.http11.Http11NioProtocol\"               maxThreads=\"150\" SSLEnabled=\"true\" scheme=\"https\" secure=\"true\"               clientAuth=\"false\" sslProtocol=\"TLS\" />

修改为:

     <Connector port=\"443\" protocol=\"HTTP/1.1\" protocol=\"org.apache.coyote.http11.Http11NioProtocol\"               maxThreads=\"150\" SSLEnabled=\"true\" scheme=\"https\" secure=\"true\"               keystoreFile=\"conf/***.jks\" //证书地址               keystorePass=\"123456\" //证书秘钥               clientAuth=\"false\" sslProtocol=\"TLS\" />

5. 支持 HTTP 自动切换 HTTPS 访问。

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

修改为:

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

性能优化

Tomcat 优化可以从 JVM 参数调优和 Tomcat 并发量两个维度优化。

JVM 参数调优

打开 Tomcat 的 bin 目录,找到 catalina.sh 进行编辑。JAVA_OPTS 属性是设置 JVM 运行参数的。

其中:

  • Xmx 代表 JVM 引用的最大堆内存,默认为物理机内存的 1/4。
  • Xms 代表 JVM 初始化内存大小,包括新生代和老年代。一般设置和 Xmx 相同。
  • Xmn 代表新生代内存大小。
  • Xss 代表线程大小。

JVM 参数和服务器资源息息相关,下面我们以 4C/8G 应用服务器为例介绍。

  • JVM 默认堆内存为物理机内存的 1/4。即 2G,如果我们服务器上没有其他应用而且我们经过测试需要更多的堆内存,我们可以指定 Xmx 内存为 4G,Xms 和 Xmx 配置一样,防止每次垃圾回收完成后重新分配内存。
  • 新生代和 老年代占比 1:2。这个一般不会修改。
  • Xss 线程大小,如果使用线程处理数据过大,可以设置成 1024KB,正常推荐使用 128KB。
  • 强制要求 JVM 始终抛出异常的堆栈详细信息:-XX:+OmitStackTraceInfastThrow
  • 禁止程序:system.gc, -XX:-DisableExplicitGC

Tomcat 并发、线程调优

默认配置:

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

protocol=\"HTTP/1.1\" BIO 阻塞式 I/O 操作(默认)。我们可以使用 NIO 非阻塞 I/O 操作。

connectionTimeout 连接超时时间,单位毫秒。可以减少。

默认最大连接数 200,我们可以调整为 1000~3000。

设置 Tomcat 的 URI 编码为 utf-8。Tomcat 默认是按 ISO-8859-1 进行 URL 解码,ISO-8859-1 并未包括中文字符,这样的话中文字符肯定就不能被正确解析了。

最大线程数(maxThreads)、最小线程数(minSpareThreads)可以适当调节(测试后调节到平衡点),对性能的影响不会很大。单纯靠提升线程数量是不能一直得到性能提升。

enableLookups 表示是否支持发查域名,建议设置为 false。

优化后:

    <Connector port=\"8080\" protocol=\"org.apache.coyote.http11.Http11NioProtocol\"               connectionTimeout=\"10000\"               enableLookups=\"false\"               maxThreads=\"1500\"               minSpareThreads=\"200\"               URIEncoding=\"UTF-8\"               redirectPort=\"8443\" />

小七学习网,助您升职加薪,遇问题可联系:客服微信【1601371900】 备注:来自网站

免责声明: 1、本站信息来自网络,版权争议与本站无关 2、本站所有主题由该帖子作者发表,该帖子作者与本站享有帖子相关版权 3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和本站的同意 4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责 5、用户所发布的一切软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。 6、您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。 7、请支持正版软件、得到更好的正版服务。 8、如有侵权请立即告知本站(邮箱:1099252741@qq.com,备用微信:1099252741),本站将及时予与删除 9、本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章和视频仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。