Debian Tomcat日志中常见错误及解决方法
导读:1. 端口冲突 错误表现:Tomcat启动时日志出现java.net.BindException: Address already in use,或提示“Port X is already in use”(如默认的8080端口被占用)。 解...
1. 端口冲突
错误表现:Tomcat启动时日志出现java.net.BindException: Address already in use
,或提示“Port X is already in use”(如默认的8080端口被占用)。
解决方法:
- 使用
lsof -i :端口号
(如lsof -i :8080
)或netstat -tunlp | grep 端口号
命令,查找占用端口的进程ID(PID); - 终止占用进程:
kill -9 PID
(谨慎操作,确认进程无重要功能); - 修改Tomcat配置:编辑
$CATALINA_HOME/conf/server.xml
文件,找到< Connector port="8080">
(或其他冲突端口),将端口号改为未被使用的数值(如8081),保存后重启Tomcat。
2. 内存溢出(OutOfMemoryError)
常见错误类型及表现:
java.lang.OutOfMemoryError: Java heap space
(堆内存不足,常见于大量数据处理或内存泄漏);java.lang.OutOfMemoryError: PermGen space
(永久代内存不足,Java 8前)/Metaspace
(Java 8及以上,元空间不足);java.lang.OutOfMemoryError: unable to create new native thread
(线程创建过多,超出系统限制)。
解决方法:- 堆内存调整:编辑
$CATALINA_HOME/bin/catalina.sh
(Linux)或catalina.bat
(Windows),在cygwin=false
前添加JAVA_OPTS="-Xms512m -Xmx1024m"
(初始堆512MB,最大堆1024MB,根据服务器内存调整,建议-Xms
与-Xmx
一致避免频繁扩容); - 永久代/元空间调整:Java 8前添加
-XX:PermSize=256m -XX:MaxPermSize=512m
,Java 8及以上添加-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m
; - 线程溢出调整:若为线程创建过多,优化应用代码减少线程数,或调整Tomcat线程池配置(
server.xml
中< Connector>
标签的maxThreads
(默认200,可增至500)、acceptCount
(等待队列长度,默认100,可增至200)参数)。
3. 配置文件错误
常见错误表现:
SEVERE: Error starting Tomcat. Port 8080 already in use
(server.xml
中端口配置错误,如端口被占用或格式错误);Configuration error
(web.xml
或context.xml
中存在无效属性,如< Context debug="0">
(Tomcat 9+已移除debug
属性));Cannot find /path/to/webapp
(应用部署路径不存在,server.xml
中< Context>
标签的docBase
配置错误)。
解决方法:- 检查
server.xml
中的< Connector>
标签端口配置,确保端口未被占用且格式正确(如port="8080"
); - 打开
web.xml
或context.xml
,删除或修正无效属性(参考Tomcat官方文档确认属性有效性); - 确认
< Context>
标签的docBase
属性指向的应用路径存在(如docBase="/var/lib/tomcat9/webapps/myapp"
),若路径不存在则创建或修改为正确路径。
4. 数据库连接问题
常见错误表现:
java.sql.SQLException: Cannot create PoolableConnectionFactory (Communications link failure)
(无法连接到数据库,驱动缺失或URL错误);Access denied for user 'tomcat'@'localhost'
(数据库用户名/密码错误或权限不足);ConnectionPool exhausted
(连接池耗尽,maxActive
设置过小)。
解决方法:- 确认数据库驱动JAR包(如MySQL的
mysql-connector-java-8.0.xx.jar
)已放入$CATALINA_HOME/lib
目录; - 检查
context.xml
或server.xml
中的数据库连接配置(< Resource>
标签),确保url
(如jdbc:mysql://localhost:3306/mydb?useSSL=false& serverTimezone=UTC
)、username
、password
正确; - 登录数据库(如
mysql -u root -p
),执行GRANT ALL PRIVILEGES ON mydb.* TO 'tomcat'@'localhost' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;
授予用户权限; - 调整连接池配置(
context.xml
中< Resource>
标签),增加maxActive
(最大连接数,默认100,可增至200)、maxIdle
(最大空闲连接数,默认30,可增至50)参数。
5. 类加载问题
常见错误表现:
java.lang.ClassNotFoundException
(类未找到,如com.example.MyClass
未在类路径中);java.lang.NoClassDefFoundError
(类定义未找到,如编译后类文件缺失或依赖库未加载)。
解决方法:- 确认缺失的类所属JAR包已放入
$CATALINA_HOME/lib
(全局共享库)或应用的WEB-INF/lib
目录(应用私有库); - 检查
catalina.properties
文件中的common.loader
、server.loader
配置,确保类路径包含所需JAR包(如common.loader=${ catalina.base} /lib,${ catalina.base} /lib/*.jar,/opt/mylibs/*.jar
); - 若为Web应用,确保
WEB-INF/classes
目录下的类文件已正确编译(如使用mvn clean package
重新打包)。
6. 日志乱码
常见错误表现:Tomcat日志(如catalina.out
)中出现中文或其他非ASCII字符乱码(如????????
)。
解决方法:
- 编辑
$CATALINA_HOME/conf/logging.properties
文件,找到java.util.logging.ConsoleHandler.encoding
属性,修改为UTF-8
(如java.util.logging.ConsoleHandler.encoding = UTF-8
); - 编辑
catalina.sh
(Linux)或catalina.bat
(Windows),在JAVA_OPTS
中添加-Dfile.encoding=UTF-8
(如export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"
); - 确保终端或查看日志的工具(如
vim
、Notepad++
)支持UTF-8编码(如vim
中执行:set fileencoding=utf-8
)。
7. 应用部署失败
常见错误表现:
SEVERE: Error deploying web application directory
(应用目录部署失败,如权限不足或路径错误);FAIL - Application at context path [/myapp] could not be started
(应用启动失败,如web.xml
配置错误或依赖缺失)。
解决方法:- 检查应用部署路径(如
$CATALINA_HOME/webapps/myapp
)是否存在,且Tomcat用户(如tomcat
)有读写权限(chown -R tomcat:tomcat /var/lib/tomcat9/webapps/myapp
); - 查看
localhost.< date> .log
(应用部署日志),定位具体错误(如web.xml
中servlet-mapping
配置错误,或缺少依赖的JAR包); - 若为WAR包部署,确保WAR包未损坏(如使用
jar tf myapp.war
检查内容),且web.xml
符合Servlet规范(如< web-app>
标签的version
属性正确)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian Tomcat日志中常见错误及解决方法
本文地址: https://pptw.com/jishu/725733.html