麒麟系统下Tomcat部署Java Web程序(WAR包)及全链路问题排查指南

🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用,熟悉DICOM医学影像及DICOM协议,业余时间自学JavaScript,Vue,qt,python等,具备多种混合语言开发能力。撰写博客分享知识,致力于帮助编程爱好者共同进步。欢迎关注、交流及合作,提供技术支持与解决方案。

技术合作请加本人wx(注明来自csdn):xt20160813

麒麟系统下Tomcat部署Java Web程序(WAR包)及全链路问题排查指南


一、环境准备与系统配置

1. 系统环境要求

• 操作系统:银河麒麟V10(基于Linux 4.19.90内核),需确认系统架构为x86_64或aarch64

• Java环境:

bash 复制代码
# 安装OpenJDK 1.8
sudo yum install java-1.8.0-openjdk
# 验证路径
echo $JAVA_HOME  # 应为/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-10.ky10.x86_64

• Tomcat版本:推荐Apache Tomcat 9.0.100(需兼容ARM架构的麒麟系统)

2. Tomcat安装与配置

bash 复制代码
# 下载并解压
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.100/bin/apache-tomcat-9.0.100.tar.gz
tar -zxvf apache-tomcat-9.0.100.tar.gz -C /usr/local/

# 配置环境变量(编辑/etc/profile)
export CATALINA_HOME=/usr/local/apache-tomcat-9.0.100
export PATH=$PATH:$CATALINA_HOME/bin

# 创建专用用户并授权
sudo useradd -M -s /sbin/nologin tomcat
sudo chown -R tomcat:tomcat $CATALINA_HOME

二、WAR包部署全流程

1. 基础部署步骤

bash 复制代码
# 停止Tomcat服务
$CATALINA_HOME/bin/shutdown.sh

# 上传WAR包至webapps目录
cp demo-web.war $CATALINA_HOME/webapps/

# 启动服务(后台运行)
nohup $CATALINA_HOME/bin/startup.sh &

# 验证部署
curl http://localhost:8080/demo-web/healthcheck

2. 高级配置选项

• 自定义上下文路径(避免URL带项目名):

xml 复制代码
<!-- 修改$CATALINA_HOME/conf/server.xml -->
<Context path="/api" docBase="demo-web" reloadable="false"/>

• 多实例部署(解决端口冲突):

bash 复制代码
cp -r $CATALINA_HOME /opt/tomcat-instance2
sed -i 's/8080/8081/g' /opt/tomcat-instance2/conf/server.xml

三、服务管理与监控

1. Systemd服务配置

bash 复制代码
# 创建服务文件
sudo nano /etc/systemd/system/tomcat.service

# 内容示例
[Unit]
Description=Apache Tomcat 9
After=syslog.target network.target

[Service]
User=tomcat
Group=tomcat
Environment="CATALINA_OPTS=-Xms2G -Xmx4G"
ExecStart=$CATALINA_HOME/bin/catalina.sh run
Restart=on-failure

[Install]
WantedBy=multi-user.target

# 启用服务
sudo systemctl daemon-reload
sudo systemctl enable tomcat

2. 常用管理命令

bash 复制代码
systemctl status tomcat    # 查看状态
journalctl -u tomcat -f    # 实时追踪日志
ss -tulnp | grep java      # 检查端口占用

3、Tomcat服务管理与监控

1. systemctl服务管理命令

在麒麟系统中,若已将Tomcat配置为Systemd服务(参考),可通过以下命令管理:

bash 复制代码
# 查看服务状态(检查是否运行、端口监听等)
systemctl status tomcat

# 重启服务(适用于配置修改后)
systemctl restart tomcat

# 停止服务(释放端口资源)
systemctl stop tomcat

# 启动服务(部署新应用或故障恢复后)
systemctl start tomcat

# 设置开机自启
systemctl enable tomcat
2. 服务状态解读

• Active: active (running):服务正常。

• Active: failed:启动失败,需检查日志(journalctl -u tomcat)。

• 端口占用:若提示Address already in use,使用 ss -tunlp | grep 8080 查找占用进程并终止。


四、高频问题排查手册

1. 端口冲突处理

• 查找占用进程:

bash 复制代码
sudo lsof -i :8080       # 显示PID和进程名
sudo netstat -tulnp | grep 8080

• 解决方案:

• 终止进程:kill -9 <PID>

• 修改Tomcat端口:

复制代码
```xml
<!-- 修改$CATALINA_HOME/conf/server.xml -->
<Connector port="9090" protocol="HTTP/1.1"/>
```

2. 权限问题修复

bash 复制代码
sudo mkdir -p /data/dicom
sudo semanage fcontext -a -t tomcat_log_t "/data/dicom(/.*)?"
sudo restorecon -Rv /data/dicom

3. 数据库连接异常

• 排查步骤:

  1. 检查application.properties的JDBC URL格式:

    properties 复制代码
    spring.datasource.url=jdbc:postgresql://localhost:5432/dicomai
  2. 验证PostgreSQL服务状态:

    bash 复制代码
    systemctl status postgresql
    pg_isready -h localhost -p 5432
  3. 防火墙放行:

    bash 复制代码
    sudo firewall-cmd --add-port=5432/tcp --permanent

五、性能优化与安全加固

1. JVM调优参数

bash 复制代码
# 修改$CATALINA_HOME/bin/setenv.sh
export JAVA_OPTS="-Xms4G -Xmx8G -XX:+UseG1GC -XX:MaxGCPauseMillis=200"

2. 连接池配置(Druid示例)

properties 复制代码
spring.datasource.druid.max-active=100
spring.datasource.druid.validation-query=SELECT 1 FROM DUAL

3. 安全策略

• 禁用管理界面:

bash 复制代码
rm -rf $CATALINA_HOME/webapps/{manager,host-manager}

• 启用HTTPS:

xml 复制代码
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           SSLEnabled="true" keystoreFile="/etc/ssl/tomcat.keystore"/>

六、日志分析与监控体系

1. 关键日志路径

日志类型 路径 功能说明
启动日志 $CATALINA_HOME/logs/catalina.out 记录启动过程及严重错误
应用日志 /data/dicom/log-all.log 业务逻辑错误追踪
访问日志 $CATALINA_HOME/logs/localhost_access_log HTTP请求分析

2. 日志分析技巧

• 实时监控:

bash 复制代码
tail -f catalina.out | grep -E 'ERROR|WARN'

• 内存泄漏分析:

bash 复制代码
jmap -dump:format=b,file=heapdump.hprof <PID>

3. ELK日志集成

bash 复制代码
# Logstash配置示例
input {
  file {
    path => "/usr/local/tomcat/logs/*.log"
    start_position => "beginning"
  }
}
filter {
  grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{DATA:message}" }
  }
}

七、附录:快速排障速查表

现象 排查命令/操作 解决方案
服务无法启动 journalctl -u tomcat --since "2025-05-13" 检查端口冲突、权限问题或JVM配置错误
静态资源404 ls -l $CATALINA_HOME/webapps/demo-web/static/ 检查WAR包解压完整性,设置spring.resources.static-locations
CPU持续100% top -H -p <PID> + jstack <PID> > thread_dump.log 分析线程死锁,优化代码逻辑或调整线程池参数
数据库连接超时 telnet <DB_IP> 5432 + sudo tcpdump -i eth0 port 5432 -nn -v 检查网络策略、连接池配置或数据库负载
日志文件不滚动 ls -lh /data/dicom/log-all.log 检查Logback配置的RollingPolicy,设置<maxHistory>30</maxHistory>

参考文献

银河麒麟V10安装Tomcat

麒麟系统Tomcat环境变量配置

Tomcat多实例部署与端口管理

Systemd服务配置与开机自启

HTTPS安全配置指南

ELK日志集中化方案

JVM内存泄漏排查方法

Tomcat端口占用速查手册

通过本指南,您可系统掌握麒麟系统下Tomcat的全生命周期管理,涵盖部署、监控、排障与优化全流程。遇到未覆盖的异常时,建议结合 catalina.out 日志深度分析或查阅官方文档。

相关推荐
waterHBO几秒前
python 爬虫工具 mitmproxy, 几问几答,记录一下
开发语言·爬虫·python
誰能久伴不乏10 分钟前
理解继承与组合的本质:Qt 项目中的设计选择指南
开发语言·qt
chicpopoo23 分钟前
Python打卡DAY46
开发语言·python
灏瀚星空25 分钟前
Python数学可视化:3D参数曲面与隐式曲面绘制技术
开发语言·python·3d
Java Fans43 分钟前
如何在Windows本机安装Python并确保与Python.NET兼容
开发语言·windows·python
编程毕设1 小时前
【含文档+PPT+源码】基于微信小程序的旅游论坛系统的设计与实现
java·tomcat·旅游
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ1 小时前
saveOrUpdate 有个缺点,不会把值赋值为null,解决办法
java·开发语言
Eiceblue2 小时前
C# 快速检测 PDF 是否加密,并验证正确密码
开发语言·pdf·c#·visual studio
FL16238631292 小时前
C#报错 iText.Kernel.Exceptions.PdfException: ‘Unknown PdfException
开发语言·c#
En^_^Joy2 小时前
PyQt常用控件的使用:QFileDialog、QMessageBox、QTreeWidget、QRadioButton等
开发语言·python·pyqt