监控Tomcat运行状态需覆盖进程存活、资源占用、日志异常、服务可用性等多个维度,以下是具体方法:
查看Tomcat进程
使用ps命令结合grep过滤Tomcat进程,确认进程是否存在及PID(进程ID):
ps -ef | grep tomcat
若输出中包含org.apache.catalina.startup.Bootstrap(Tomcat启动类),则说明进程正在运行。
查看Tomcat服务状态
若Tomcat通过systemd管理(默认安装方式),使用以下命令查看服务状态:
sudo systemctl status tomcat
若服务正常运行,会显示active (running);若未运行,可使用sudo systemctl start tomcat启动。
实时查看运行日志
Tomcat的日志文件(如catalina.out)记录了启动、请求及错误信息,使用tail -f实时跟踪最新日志:
tail -f /path/to/tomcat/logs/catalina.out
按Ctrl+C退出实时模式。若需同时监控多个日志文件(如localhost.log),可使用multitail工具。
查看系统资源占用
使用top或htop(需安装:sudo apt install htop)实时查看Tomcat进程的CPU、内存占用:
top -p $(pgrep -f tomcat | head -1) # 替换为Tomcat的实际PID
或通过htop的搜索功能(按/输入tomcat)快速定位。
日志轮转(避免日志过大)
使用logrotate工具自动压缩、删除旧日志,防止日志占满磁盘。创建配置文件/etc/logrotate.d/tomcat:
/path/to/tomcat/logs/*.out {
size 50M # 单个日志文件超过50M时轮转
rotate 7 # 保留最近7个轮转文件
compress # 压缩旧日志(如catalina.out.1.gz)
missingok # 若日志不存在也不报错
daily # 每天检查一次
}
测试配置是否正确:sudo logrotate -f /etc/logrotate.d/tomcat。
日志分析与告警
使用grep过滤关键字(如ERROR、Exception)快速定位错误:
grep -i "error" /path/to/tomcat/logs/catalina.out
对于复杂分析(如统计每小时请求数),可使用awk或集成ELK Stack(Elasticsearch+Logstash+Kibana)、Graylog等工具,实现日志可视化与告警。
JMX监控(实时性能指标)
JMX(Java管理扩展)可监控Tomcat的线程池、内存使用、连接数等详细指标:
bin/catalina.sh,添加以下Java选项(替换your_server_ip为服务器IP):JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=your_server_ip -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
重启Tomcat使配置生效:sudo systemctl restart tomcat。jconsole(Java自带,jconsole命令)、VisualVM(sudo apt install visualvm)或Prometheus+jmx_exporter(适合大规模集群)连接Tomcat,查看实时指标。第三方监控工具(自动化告警)
zabbix-java-gateway并配置Zabbix服务器。micrometer或jmx_exporter),Grafana展示可视化面板(如线程池使用率、内存占用趋势)。编写Shell脚本定期检查Tomcat状态(如进程是否存在、端口是否监听),并在异常时重启Tomcat或发送告警。示例脚本:
#!/bin/bash
TOMCAT_PID=$(ps -ef | grep tomcat | grep -v grep | awk '{print $2}')
TOMCAT_PORT=8080 # Tomcat监听端口
if [ -z "$TOMCAT_PID" ]; then
echo "$(date): Tomcat is not running. Restarting..." >> /var/log/tomcat_monitor.log
/path/to/tomcat/bin/startup.sh
else
# 检查端口是否监听
if ! netstat -tunlp | grep -q ":$TOMCAT_PORT "; then
echo "$(date): Tomcat port $TOMCAT_PORT is not listening. Restarting..." >> /var/log/tomcat_monitor.log
/path/to/tomcat/bin/restart.sh
else
echo "$(date): Tomcat is running normally (PID: $TOMCAT_PID)." >> /var/log/tomcat_monitor.log
fi
fi
将脚本添加到crontab(sudo crontab -e),每分钟执行一次:
* * * * * /path/to/tomcat_monitor.sh
```。
通过以上方法,可全面监控Ubuntu上Tomcat的运行状态,及时发现并解决问题,确保服务稳定。