一、网络层面排查
1. 检查网络连接
# 测试域名解析
ping yourdomain.com
nslookup yourdomain.com
# 检查端口连通性
telnet yourdomain.com 80
telnet yourdomain.com 443
# 使用netstat查看端口监听
netstat -tlnp | grep :80
netstat -tlnp | grep :443
2. 检查防火墙设置
# 查看防火墙状态
systemctl status firewalld
# 开放80/443端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
# 查看已开放端口
firewall-cmd --list-ports
3. SELinux可能的问题
# 临时禁用SELinux(测试用)
setenforce 0
# 永久禁用(修改配置文件)
vi /etc/selinux/config
# 将SELINUX=enforcing改为SELINUX=disabled
二、Tomcat配置检查
1. 检查server.xml配置
<!-- 检查Connector配置 -->
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443" />
<!-- 如果有HTTPS,检查SSL配置 -->
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/keystore.jks"
type="RSA" />
</SSLHostConfig>
</Connector>
2. 检查Host配置
<Host name="yourdomain.com" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="your-app" />
</Host>
三、应用服务器排查
1. 查看Tomcat日志
# 查看catalina日志
tail -f /usr/local/tomcat/logs/catalina.out
# 查看访问日志
tail -f /usr/local/tomcat/logs/localhost_access_log.*.txt
2. 检查JVM参数
# 查看JVM内存使用
ps aux | grep java
jstat -gcutil <pid> 1000 5
# 检查启动参数,调整内存配置
# 在catalina.sh中添加
JAVA_OPTS="-Xms512m -Xmx1024m -XX:MaxPermSize=256m"
3. 检查线程池配置
# 查看线程状态
ps -eLf | grep java | wc -l
# 检查系统限制
ulimit -u
cat /proc/$(pgrep java)/limits
四、域名和DNS检查
1. 检查域名解析
# 检查/etc/hosts
cat /etc/hosts
# 检查DNS配置
cat /etc/resolv.conf
# 清除DNS缓存(如果适用)
systemctl restart nscd
2. 绑定域名到IP
# 在/etc/hosts中添加
192.168.1.100 yourdomain.com www.yourdomain.com
五、系统资源检查
1. 检查系统资源
# 查看系统负载
top
htop
# 查看磁盘空间
df -h
# 查看内存使用
free -m
# 查看打开文件数
lsof | wc -l
ulimit -n
2. 优化系统参数
# 修改文件打开数限制
vi /etc/security/limits.conf
# 添加
* soft nofile 65535
* hard nofile 65535
# 修改系统参数
vi /etc/sysctl.conf
# 添加或修改
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.ip_local_port_range = 1024 65000
六、快速诊断脚本
创建一个诊断脚本 tomcat_check.sh:
#!/bin/bash
echo "=== Tomcat访问超时诊断 ==="
echo "1. 检查Tomcat进程..."
ps aux | grep tomcat
echo -e "\n2. 检查端口监听..."
netstat -tlnp | grep java
echo -e "\n3. 检查防火墙..."
firewall-cmd --list-ports | grep -E "(80|443|8080)"
echo -e "\n4. 检查最近错误日志..."
tail -50 /usr/local/tomcat/logs/catalina.out | grep -i error
echo -e "\n5. 测试本地访问..."
curl -I http://localhost:8080
echo -e "\n6. 测试外部访问..."
curl -I --connect-timeout 10 http://yourdomain.com
七、常见问题解决方案
问题1:端口被占用
# 查找占用80端口的进程
lsof -i :80
# 停止占用进程或修改Tomcat端口
问题2:反向代理配置问题
如果使用Nginx/Apache反向代理:
# Nginx配置示例
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
}
问题3:SSL证书问题
# 检查SSL证书
keytool -list -v -keystore keystore.jks
# 验证证书链
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com
问题4:连接数过多
<!-- 调整server.xml中的最大连接数 -->
<Connector port="8080" protocol="HTTP/1.1"
maxThreads="500"
minSpareThreads="25"
maxConnections="1000"
acceptCount="1000"
connectionTimeout="20000" />
八、重启服务
# 重启Tomcat
systemctl restart tomcat
# 或手动重启
cd /usr/local/tomcat/bin
./shutdown.sh
./startup.sh
按照以上步骤逐一排查,通常可以解决Tomcat访问域名超时的问题。建议按照网络->防火墙->Tomcat配置->系统资源的顺序进行排查。