部署常见问题
本文档汇总了部署 ANGRY ANT 框架时最常遇到的问题及解决方案。
Shell 脚本在 Linux 上执行报错
问题
在 Windows 环境下编辑的 run.sh 上传到 Linux 服务器后,执行时出现:
bash
[root@ecs-dvg3 py]# ./run.sh start
: No such file or directory原因
Windows 使用 CRLF(\r\n)换行符,Linux 使用 LF(\n)。shebang 行 #!/bin/bash\r 中的 \r 导致系统找不到解释器。
解决方案
方法一:在 Linux 上直接修复(最快)
bash
# 使用 sed 移除 \r 字符
sed -i 's/\r$//' run.sh
# 或使用 tr 命令
tr -d '\r' < run.sh > run.sh.tmp && mv run.sh.tmp run.sh
# 或使用 vim
vi run.sh
# 在 vim 中执行::set ff=unix
# 然后保存::wq方法二:使用 dos2unix 工具
bash
# 安装
yum install dos2unix # CentOS/RHEL
apt-get install dos2unix # Ubuntu/Debian
# 转换
dos2unix run.sh方法三:使用 PowerShell(Windows 端)
powershell
$content = Get-Content "run.sh" -Raw
$content = $content -replace "`r`n", "`n"
[System.IO.File]::WriteAllText("run.sh", $content, [System.Text.Encoding]::UTF8)验证修复
bash
# 检查文件类型
file run.sh
# 正常:ASCII text
# 异常:ASCII text, with CRLF line terminators
# 查看第一行
head -1 run.sh | od -c | head -1
# 应该看到:#!/bin/bash \n(没有 \r)预防措施
bash
# 配置 Git 自动转换
git config --global core.autocrlf inputJVM 参数配置警告
问题
启动时出现以下警告:
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128M; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: Cannot open file /logs/xxx/GC/xxx-gc.log due to No such file or directory原因
PermSize/MaxPermSize在 Java 8 中已废弃(改用 Metaspace)- CMS 垃圾收集器在 Java 9 开始废弃,Java 14 已完全移除
- GC 日志路径不存在
解决方案
使用现代化的 JVM 参数配置:
bash
JVM="-server \
-Xms2g -Xmx2g \
-Xmn512m \
-Xss256k \
-Djava.awt.headless=true \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-Xlog:gc*:file=/logs/angryant-biz-blank/gc.log:time,uptime:filecount=10,filesize=100M"参数变更对照表:
| 旧参数(已废弃) | 新参数 | 说明 |
|---|---|---|
-XX:PermSize=128M | 移除 | 使用 Metaspace 自动管理 |
-XX:MaxPermSize=256m | 移除 | 使用 Metaspace 自动管理 |
-XX:+CMSClassUnloadingEnabled | 移除 | CMS 已废弃 |
-XX:+CMSPermGenSweepingEnabled | 移除 | CMS 已废弃 |
-Xloggc:/path/gc.log | -Xlog:gc*:file=/path/gc.log:time,uptime:filecount=10,filesize=100M | Java 9+ 新语法 |
端口占用
问题
启动时报 Address already in use
解决
bash
# 查看端口占用(8080 为应用端口,请替换为你实际配置的端口)
netstat -tlnp | grep 8080
# 杀死占用进程
kill -9 <PID>
# 或修改应用端口(application-prod.yml 中的 server.port)权限不足
问题
Permission denied 或无法写入日志
解决
bash
# 赋予脚本执行权限
chmod +x run.sh
# 赋予目录写权限
chmod -R 755 /home/java/your-project/
# 或使用 sudo 运行
sudo sh run.sh start日志路径不存在
问题
启动失败,提示日志目录不存在
解决
bash
# 手动创建日志目录
mkdir -p /home/java/your-project/logs/
# 确保有写权限
chmod -R 755 /home/java/your-project/在 run.sh 的 start() 方法中自动创建日志目录:
bash
start(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is already running. pid=${pid} ."
else
# 确保日志目录存在
mkdir -p /logs/angryant-biz-blank
nohup java $JVM -jar $APP_NAME --spring.profiles.active=prod > /dev/null 2>&1 &
echo "${APP_NAME} started successfully"
fi
}内存不足
问题
启动时报 Out of memory 或 Java heap space
解决
bash
# 查看服务器可用内存
free -h
# 调整 JVM 参数,降低堆内存
JVM="-server -Xms1g -Xmx4g ..."
# 或增加服务器物理内存 / 交换空间数据库连接失败
问题
启动时报数据库连接异常
排查步骤
bash
# 1. 检查 MySQL 是否运行
systemctl status mysqld
# 2. 检查网络连通性
telnet your-mysql-host 3306
# 3. 检查用户名密码是否正确
mysql -h your-mysql-host -u your_user -p
# 4. 核对配置文件中的数据库连接信息
cat application-prod.yml | grep -A 5 datasourceRedis 连接失败
问题
启动时报 Redis 连接异常
排查步骤
bash
# 1. 检查 Redis 是否运行
systemctl status redis
# 2. 测试连接
redis-cli -h 127.0.0.1 -p 6379 -a your_password ping
# 3. 检查 Redis 密码配置
redis-cli -h 127.0.0.1 -p 6379 CONFIG GET requirepass前端页面空白或接口 404
问题
前端页面能打开但数据加载不出来,或接口返回 404
排查步骤
- 检查 Nginx 代理配置:确认
proxy_pass地址和路径正确 - 检查后端是否启动:
curl http://localhost:8080(8080 为默认端口,请替换为你实际配置的端口) - 检查浏览器控制台:查看 Network 面板中的请求地址和响应状态
- 检查 CORS 配置:跨域请求是否被拦截
