前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Tomcat常见问题合集记录

Tomcat常见问题合集记录

作者头像
全栈工程师修炼指南
发布2022-09-29 14:10:22
7450
发布2022-09-29 14:10:22
举报

[TOC]

问题0.Tomcat指定Java版本运行

解决方法:在Tomcat里的bin中的setclasspath.bat或者setclasspath.sh开头添加设置环境变量;

代码语言:javascript
复制
#Windows : Tomcat/bin/setclasspath.bat
set JAVA_HOME = C:\JAVA\JDK8
set JRE_HOME  = C:\JAVA\JDK8\JRE

#Linux:Tomcat/bin/setclasspath.sh
export JAVA_HOME=/home/jdk/Java/jdk7/jdk1.7.0_51
export JRE_HOME=/home/jdk/Java/jdk7/jre7

问题1.Tomcat控制台中文乱码

解决办法:打开你的Tomcat安装目录,接着编辑子目录conf下的文件logging.properties; 相对路径是:Tomcat/conf/logging.properties

代码语言:javascript
复制
#将文件中下列:
1catalina.org.apache.juli.AsyncFileHandler.encoding = utf-8
2localhost.org.apache.juli.AsyncFileHandler.encoding = utf-8
java.util.logging.ConsoleHandler.encoding = utf-8

#中utf-8改为GBK后保存:
java.util.logging.ConsoleHandler.encoding = GBK

问题2.Tomcat启动时候警告在清除过期缓存条目后可用空间仍不足 - 请考虑增加缓存的最大空间

问题描述:启动时候报这样的警告:

代码语言:javascript
复制
警告 [main] org.apache.catalina.webresources.Cache.getResource
无法将位于[/WEB-INF/classes/templates/framework/help/helpinfo.html]的资源添加到Web应用程序[/zhfx]的缓存中,
因为在清除过期缓存条目后可用空间仍不足 - 请考虑增加缓存的最大空间。

解决办法: 在 /conf/context.xml</Context> 前添加以下内容(大小默认是1024,单位是KB):

代码语言:javascript
复制
<Resources cachingAllowed="true" cacheMaxSize="100000" />

问题3.Tomcat如何在启动时候设置JVM参数

解决方法:在 bin\catalina.bat 文件打开并且在262行左右,set JPDA= 下面一行添加如下:

代码语言:javascript
复制
set JAVA_OPTS=-Xms1024m -Xmx2048m -XX:PermSize=256M -XX:MaxNewSize=500m -XX:MaxPermSize=500m -Djava.awt.headless=true -XX:+PrintGCDetails

参数解释:

  • -Xms表示JVM Heap(堆内存)最小尺寸128MB,初始分配
  • -Xmx表示JVM Heap(堆内存)最大允许的尺寸256MB,按需分配
  • PermSize和MaxPermSize指明虚拟机为java永久生成对象(Permanate generation)
  • 如,class对象、方法对象这些可反射(reflective)对象分配内存限制,这些内存不包括在Heap(堆内存)区之中
  • NewSize/MaxNewSize:定义YOUNG段的尺寸,
  • NewSize为JVM启动时YOUNG的内存大小(young内存为堆中的新生代,保存刚实列化的对象);
  • MaxNewSize为最大可占用的YOUNG内存大小。

问题4.Tomcat中利用war包部署避免访问路径必须加上项目名称

问题描述:当我们打包好一个Springboot项目导出message.war并且进行导入的部署,这时在tomcat中的Webapp多了一个message应用,我们去浏览器上进行访问测试输入URL,如:http://localhost:8012/message/login,如果此时不想带有message目录就可以采用在Server.xml进行Context标签配置;

解决方法:

代码语言:javascript
复制
<!-- 注意这里要在host元素下添加,而path指访问的url直接是项目地址-->
<Context docBase="D:/apache-tomcat-8.5.38/webapps/message" path="" reloadable="true" crossContext="true"/>

问题5.Tomcat如果进行注册为windows服务进行自启动

描述:打开cmd窗口window10用户记得用管理员权限打开,进入tomcat下名的bin目录查看service.bat文件是否存在

代码语言:javascript
复制
#输入命令 
service.bat install  '服务名';
services.msc   #看服务管理器,看是否添加好了

如果添加好了的话进入属性设置为自动 (避免宕机时可以重新启动),此时在bin目录下启动tomcat9.exe 点击启动ok;

问题6.Tomcat关闭日志输出

描述:在部署Tomcat后运行久了catalina.out会越来越大,对系统的稳定造成了一定的影响;可以通过以下方式进行屏蔽掉该部分的日志信息;

代码语言:javascript
复制
# 方式1.修改bin/catalina.sh / bat
if [ -z "$CATALINA_OUT" ] ; then  
  CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out  
    CATALINA_OUT=/dev/null
fi

# 方式2.修改conf/logging.properties日志配置文件
# 将level级别设置成WARNING就可以大量减少日志的输出,当然也可以设置成OFF,直接禁用掉。
$cat /apps/tomcat0/conf/logging.properties 
1catalina.org.apache.juli.FileHandler.level = OFF
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.

2localhost.org.apache.juli.FileHandler.level = OFF
2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.FileHandler.prefix = localhost.


# 3.关闭localhost_access_log日志修改conf/server.xml文件将AccessLogValve注释掉
<Host name="61.1.2.3"  appBase=""
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_log." suffix=".txt" timestamp="true"/>
<Valve className="org.apache.catalina.valves.AccessLogValve" fileDateFormat="yyyy-MM-dd" pattern="%{X_FORWARDED_FOR}i %h %l %u$
<Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="127.0.0.1"/>
</Host>

7.Tomcat 版本默认字符编码导致应用参数日志乱码问题

描述:最近将Windows Server上的应用需要移植到Docker之中, 由于Tomcat版本问题在应用进行参数传递时候发生乱码; 原因:Tomcat7及以前默认采用iso-8859-1编码而Tomcat8以后版本对字符的默认编码格式是UTF-8; 解决办法:

方法1:配置server.xml文件Connector元素参数

代码语言:javascript
复制
vi conf/server.xml
<Connector port="8080"  protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true"/>
# 参数说明:
URIEncoding 属性将该属性值设置为UTF-8,即可让Tomcat(默认ISO-8859-1编码)以UTF-8的编码处理请求参数。
useBodyEncodingForURI="true" 属性是指请求参数的编码方式采用请求体的编码方式,,若请求体采用UTF-8解析,则请求参数也要采用UTF-8来解析

方法2:修改应用Servlet编码转换

代码语言:javascript
复制
# Post
request.setCharacterEncoding("UTF-8");
# Get
new String(username.getBytes("ISO-8859-1"),"UTF-8");  #先反向解码然后再用UTF-8编码

8.Docker构建Tomcat镜像运行时挂载应用注意事项;

描述:常规的使用将宿主机webapps目录直接挂载至容器的webapps并且启动容器后发现非ROOT.war解压运行后访问404;

代码语言:javascript
复制
docker run -d -p 8080:8080 -v /HMK/helloword/webapps:/usr/tomcat/webapps --name tomcat jamtur01/tomcat

解决办法:使用-v参数将war包挂载至容器内的 tomcat/webapps目录

代码语言:javascript
复制
docker run -d -p 8080:8080 -v /HMK/helloword/webapps/HelloWorld.war:/usr/tomcat/webapps/HelloWorld.war --name tomcat jamtur01/tomcat
# 注意: -v /HMK/helloword/webapps/HelloWorld.war:/usr/tomcat/webapps/HelloWorld.war,这里是挂载的单个文件
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题0.Tomcat指定Java版本运行
  • 问题1.Tomcat控制台中文乱码
  • 问题2.Tomcat启动时候警告在清除过期缓存条目后可用空间仍不足 - 请考虑增加缓存的最大空间
  • 问题3.Tomcat如何在启动时候设置JVM参数
  • 问题4.Tomcat中利用war包部署避免访问路径必须加上项目名称
  • 问题5.Tomcat如果进行注册为windows服务进行自启动
  • 问题6.Tomcat关闭日志输出
    • 7.Tomcat 版本默认字符编码导致应用参数日志乱码问题
      • 8.Docker构建Tomcat镜像运行时挂载应用注意事项;
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档