热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Tomcat深度优化(二)

博文大纲:一.开启mangent管理页面二.开启host-mangent管理页面三.Tomcat的运行日志切割四.定义Tomcat404错误返回的页面五.T

博文大纲:
一.开启mangent管理页面
二.开启host-mangent管理页面
三.Tomcat的运行日志切割
四.定义Tomcat 404错误返回的页面
五.Tomcat服务的内存优化
六.Tomcat线程池的优化
七.修改Tomcat服务的请求方式

关于Tomcat的介绍与安装请参考Tomcat安装及优化配置(一)
一.开启mangent管理页面
1、在访问Tomcat的默认界面时,有一个“Manager App”的框,如下:
在这里插入图片描述
2、点击进入后,会看到以下403报错页面(翻译过后如下),我们需要复制它提示的代码:
此错误页面,已经将原因及该如何配置写的明明白白的。
在这里插入图片描述
3、现在配置开启它的manager管理页面:

[root@tomcat ~]# vim /usr/local/tomcat/conf/tomcat-users.xml #编辑这个文件,跳转至文件末尾


#在这个闭合的标签上面添加两行,以便添加用户
#添加的配置项中,“username”为用户名,“password”为用户密码。
[root@tomcat ~]# vim /usr/local/tomcat/webapps/manager/META-INF/context.xml #编辑此文件,添加允许访问的IPallow="192.168.1.135|192.168.1.12|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> #在上面“allow=”后添加允许访问的IP,以管道符“ | ”为分割

#重启服务验证
[root@tomcat ~]# /usr/local/tomcat/bin/shutdown.sh
[root@tomcat ~]# /usr/local/tomcat/bin/startup.sh

4、使用客户端访问它的默认首页,然后点击“Manager App”,会看到以下界面,输入用户名及密码:
在这里插入图片描述
5、登录后,即可看到我们的Tomcat根目录下的自定义目录:
在这里插入图片描述
6、下拉页面,可以通过war包添加自定义的目录:
1)准备war包:

[root@tomcat ~]# vim index.jsp #编写jsp网页文件
zzzzzzzzzzzzzzzzzzzzzzzzzzzz
[root@tomcat ~]# jar -cvf test.war index.jsp #做成war包,名为“test.war”

2)在web图形界面,添加war包:
在这里插入图片描述
3)部署后,即可看到以下内容:
在这里插入图片描述
4)客户端可以访问TomcatIP+8080端口+/aaa进行访问测试,其内容就是我们做的war包中的内容,如下:
在这里插入图片描述
二.开启host-mangent管理页面
1、访问以下页面,然后复制其提示的代码:
在这里插入图片描述
点击Host Manager
在这里插入图片描述

[root@tomcat ~]# vim /usr/local/tomcat/conf/tomcat-users.xml #编辑其配置文件


#在末尾这行上面添加复制的代码,并修改用户名及密码
[root@tomcat ~]# vim /usr/local/tomcat/webapps/host-manager/META-INF/context.xml #修改这个文件
#在这行添加允许访问的IP来源
#修改后保存退出即可
#重启验证
[root@tomcat ~]# /usr/local/tomcat/bin/shutdown.sh
[root@tomcat ~]# /usr/local/tomcat/bin/startup.sh

2、客户端验证:
重新点击,即可提示输入密码:
在这里插入图片描述
在这里插入图片描述
至此,即可通过此页面管理tomcat的域名信息了,不过这个功能在生产环境中不建议使用。

三.Tomcat的运行日志切割
cronolog是一个第三方的日志切割工具,比较方便快捷,是日志切割的一大利器。这里就使用这个第三方工具。下载我提供的所需源码包
上传cronolog-1.6.2.tar.gz源码包到Tomcat服务器。

[root@tomcat tomcat]# tar zxf cronolog-1.6.2.tar.gz # 解包
[root@tomcat tomcat]# cd cronolog-1.6.2/
[root@tomcat cronolog-1.6.2]# ./configure && make && make install # 编译并安装
[root@tomcat cronolog-1.6.2]# which cronolog # 确保可以查到cronolog这个命令
/usr/local/sbin/cronolog
[root@tomcat cronolog-1.6.2]# vim /usr/local/tomcat/bin/catalina.sh # 编辑此文件
搜索touch 并注释掉:# touch "$CATALINA_OUT"
跳转到470行左右修改
org.apache.catalina.startup.Bootstrap "$@" start 2>&1 | /usr/local/sbin/cronolog /usr/local/tomcat/logs/test.%Y-%m-%d.out >> /dev/null &
注释掉:# >> "$CATALINA_OUT" 2>&1 "&"
[root@tomcat cronolog-1.6.2]# /usr/local/tomcat/bin/shutdown.sh # 重启验证
[root@tomcat cronolog-1.6.2]# /usr/local/tomcat/bin/startup.sh
[root@tomcat logs]# ls # 确保有test.2020-01-12.out
catalina.2020-01-12.log localhost.2020-01-12.log test.2020-01-12.out
catalina.out localhost_access_log.2020-01-12.txt
host-manager.2020-01-12.log manager.2020-01-12.log

参考
在这里插入图片描述
四、定义Tomcat 404错误返回的页面
默认情况,客户端访问Tomcat服务器上一个不存在的目录时,会提示404错误,而且会将我们Tomcat的版本信息等显示出来,这是我们比较忌讳的,默认的404返回的错误页面如下:
在这里插入图片描述
解决办法就是,将404状态码进行重定向,以便我们自定义返回的页面信息,如下:

[root@tomcat logs]# vim /usr/local/tomcat/webapps/ROOT/error.jsp
Access Error...
[root@tomcat logs]# vim /usr/local/tomcat/conf/web.xml version="3.1"> # 在22行附近添加如下内容

404
/error.jsp

[root@tomcat /]# /usr/local/tomcat/bin/shutdown.sh # 重启验证
[root@tomcat /]# /usr/local/tomcat/bin/startup.sh

在这里插入图片描述
参考
在这里插入图片描述
五、Tomcat的内存优化

[root@tomcat ~]# vim /usr/local/tomcat/bin/catalina.sh #编辑此文件#!/bin/sh #在第一行下面添加以下内容
JAVA_OPTS="-Dfile.encoding=UTF-8
-server
-Xms1023M
-Xmx1024M
-XX:NewSize=512M
-XX:MaxNewSize=1020M
-XX:NewRatio=2
-XX:ParallelGCThreads=15
-XX:+DisableExplicitGC"
#添加完成后,保存退出后,重启Tomcat后,即可生效,
#可以通过之前的实时监控JVM虚拟机资源使用进行查看验证
#若是在Tomcat 8.0之前的版本,还可以在上面添加以下两个配置项,8.0以后的版本就被移除了:
#-XX:PermSize=256M
#-XX:MaxPermSize=356M

参考
在这里插入图片描述

添加的各个配置项解释如下:-Xms:表示 JVM初始内存大小,也可以说是Java 初始化堆的大小,-Xms 与-Xmx 设成一样的值,避免 JVM 反复重新申请内存,导致性能大起大落,默认值为物理内存的 1/64
-Xmx:表示最大 Java 堆大小,当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃,因此一般建议堆的最大值设置为可用内存的最大值的80%。
-Xmn:设置JVM最小内存(128-256就够了,一般不设置)
-XX:NewSize:设置新生代内存大小。 新生代,对象新创建的时候分配的内存空间,老生代在垃圾回收器回收过后该对象依然没有被回收,该对象就会移动到老生代
-XX:PermSize:设置持久代内存大小,用于存放静态文件,如今Java类、方法等。持久代对垃圾回收没有显著影响,但是有些应
用可能动态生成或者调用一些class,持久带也称为方法区,方法区存储每一个java类的结构信息:比如运行时常量池,字段和方法数据,构造函数和普通方法的字节码内容以及类、实例、接口初始化时需要使用到的特殊方法等数据,JDK8中已经把持久代(PermGen Space) 干掉了,取而代之的元空间(Metaspace)。Metaspace占用的是本地内存,不再占用虚拟机内存。
-XX:MaxPermSize:设置最大值持久代内存大小,永久代不属于堆内存,堆内存只包含新生代和老年代
-XX:NewRatio:改变新旧空间的比例,意思是新空间的尺寸是旧空间的1/8(默认为8)
-XX:ParallelGCThreads 可用来增加并行度,需要多cpu
-XX:+DisableExplicitGC:关闭System.gc(),简单理解就是关闭java中的内存回收机制

六.Tomcat线程池的优化

[root@tomcat /]# vim /usr/local/tomcat/conf/server.xml # 编辑主配置文件
# 在53行下面添加如下内容

上述Excutor重要参数说明:name:共享线程池的名字,这是connector为了共享线程池要引用的名字,该名称必须唯一
namePrefix:在JVM上,每运行线程都可以有一个name字符串,这一属性为线程池中每个线程的name字符串设置了一个前缀,Tomcat将把线程号追加到这一前缀后面,默认值为tomcat-exec-
maxThreads:该线程池可以容纳的最大线程数,默认200
minSpareThreads:Tomcat应该始终打开的最小不活跃线程数,默认25
Connector参数说明
executor:表示使用参数值对应的线程池。

七.修改Tomcat服务的请求方式
Tomcat支持的三种请求方式:BIO、NIO、APR。

BIO:阻塞式I/O操作,Tomcat7以下版本默认情况下是以bio模式运行的,每个请求都要创建一个线程来处理,线程开销比较大,不适用高并发的场景,性能也最低;
NIO:基于缓冲区,能提供非阻塞I/O操作,和传统的BIO相比,具备更好的并发性能
APR(Apache portable run-time libraries):简单理解,就是从操作系统级别解决异步IO问题,大幅度的提高服务器的处理和相应性能,也是Tomcat运行高并发的首选模式
APR提供的主要功能模块包括:内存分配及内存池、原子操作、文件I/O、锁、内存映射、哈希表、网络I/O、轮询、进程及线程操作等等,通过采用APR,Tomcat可以获得高度可扩展性以及优越的性能,并且可以更好的与本地服务器技术集成,从而可以使Tomcat作为一款通用的Web服务器使用,而不仅仅作为轻量级应用服务器。在这种情况下,Java将不再是一门侧重于后端的编程语言,也可以更多的用于成熟的Web服务器平台。

1、更改其请求方式为NIO(注意:Tomcat8以上版本,默认使用的就是NIO模式,不需要额外修改 )
1、更改其请求方式为NIO(注意:Tomcat8以上版本,默认使用的就是NIO模式,不需要额外修改 )

[root@tomcat /]# vim /usr/local/tomcat/conf/server.xml # 编辑zh主配置文件 #69行左右

参考
在这里插入图片描述
重启后,查看其“catalina.out”日志,有以下字样,则表示是在nio接收请求处理方式,如下(我这里在上面对catalina.out进行了日志切割,所以需要查看切割后的日志文件):
在这里插入图片描述
2、更改其请求方式为APR模式
启用这种模式稍微麻烦一些,需要安装一些依赖库,下面是基于centos 7.3环境的Tomcat/8.5.35进行配置。
安装apr动态库:

[root@tomcat /]# yum -y install apr-devel openssl-devel gcc make
[root@tomcat /]# cd /usr/local/tomcat/bin/
[root@tomcat bin]# tar zxf tomcat-native.tar.gz
[root@tomcat bin]# cd tomcat-native-1.2.18-src/native/
[root@tomcat native]# ./configure && make && make install
#编译安装完成后,apr动态库默认安装在/usr/local/apr/lib目录下。

配置APR本地库到系统共享库搜索路径中:
设置LD_LIBRARY_PATH和LD_RUN_PATH环境变量,指向/usr/local/apr/lib目录,可配置到/etc/profile文件中。如下:

[root@tomcat native]# vim /etc/profile #编辑全局变量,在文件末尾写入以下两行
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
export LD_RUN_PATH=$LD_RUN_PATH:/usr/local/apr/lib
[root@tomcat native]# . /etc/profile #重新加载环境变量
#重启验证
[root@tomcat ~]# /usr/local/tomcat/bin/shutdown.sh
[root@tomcat ~]# /usr/local/tomcat/bin/startup.sh
[root@tomcat native]# vim /usr/local/tomcat/conf/server.xml

在这里插入图片描述


推荐阅读
  • 本文详细介绍如何在Spring Boot项目中集成和使用JPA,涵盖JPA的基本概念、Spring Data JPA的功能以及具体的操作步骤,帮助开发者快速掌握这一强大的持久化技术。 ... [详细]
  • 本文介绍了如何在Spring框架中配置和使用定时任务,包括初始化配置和动态启动定时器的方法。通过示例代码展示了如何利用Spring的TaskScheduler接口来创建和管理定时任务。 ... [详细]
  • MVC框架下使用DataGrid实现时间筛选与枚举填充
    本文介绍如何在ASP.NET MVC项目中利用DataGrid组件增强搜索功能,具体包括使用jQuery UI的DatePicker插件添加时间筛选条件,并通过枚举数据填充下拉列表。 ... [详细]
  • 本文介绍了多种Eclipse插件,包括XML Schema Infoset Model (XSD)、Graphical Editing Framework (GEF)、Eclipse Modeling Framework (EMF)等,涵盖了从Web开发到图形界面编辑的多个方面。 ... [详细]
  • SpringBoot底层注解用法及原理
    2.1、组件添加1、Configuration基本使用Full模式与Lite模式示例最佳实战配置类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断配置类组 ... [详细]
  • 本文介绍了Tomcat的基本操作,包括启动、关闭及首次访问的方法,并详细讲解了如何在IDEA中创建Web项目,配置Servlet及其映射,以及如何将项目部署到Tomcat。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 本文介绍了一种算法,用于在一个给定的二叉树中找到一个节点,该节点的子树包含最大数量的值小于该节点的节点。如果存在多个符合条件的节点,可以选择任意一个。 ... [详细]
  • 本文详细介绍了Keycloak框架中UserRepresentation类下的isEnabled()方法的功能与应用,并通过多个实际代码示例说明其在用户管理中的具体实现。 ... [详细]
  • 本文通过两个具体案例——共同好友查找和线段重叠分析,展示了如何利用Scala编程语言解决实际问题。案例一探讨了如何在社交网络中找出两个用户之间的共同好友;案例二则深入解析了如何计算多条线段之间的重叠情况。 ... [详细]
  • J2EE平台集成了多种服务、API和协议,旨在支持基于Web的多层应用开发。本文将详细介绍J2EE平台中的13项关键技术规范,涵盖从数据库连接到事务处理等多个方面。 ... [详细]
  • 深入探讨Web服务器与动态语言的交互机制:CGI、FastCGI与PHP-FPM
    本文详细解析了Web服务器(如Apache、Nginx等)与动态语言(如PHP)之间通过CGI、FastCGI及PHP-FPM进行交互的具体过程,旨在帮助开发者更好地理解这些技术背后的原理。 ... [详细]
  • Golang与微服务架构:构建高效微服务
    本文探讨了Golang在微服务架构中的应用,包括Golang的基本概念、微服务开发的优势、常用开发工具以及具体实践案例。 ... [详细]
  • 本文详细探讨了 HAProxy 的基本概念及其与 LVS(Linux Virtual Server)的比较,特别是在内核空间与用户空间的工作差异。文章还深入介绍了 HAProxy 独有的数据结构——弹性二叉树,以及其在高并发场景下的表现。 ... [详细]
  • Node.js模块化的优势及实践
    本文探讨Node.js模块化的重要性和具体实现方式,包括其带来的代码复用性增强、可维护性提升、以及如何有效避免命名冲突等问题。 ... [详细]
author-avatar
yax何
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有