故障排查
本文档汇总了 MISEB 系统常见问题及解决方案。
快速诊断流程
遇到问题时,请按以下顺序排查:
1. 检查容器状态 → docker ps -a
2. 查看错误日志 → docker logs <容器名>
3. 检查网络连通 → docker network inspect
4. 检查资源使用 → docker stats
5. 检查端口占用 → netstat -tlnp服务启动问题
脚本报错 $'\r': command not found
症状:执行启动脚本或读取配置文件时提示:
.env: line 5: $'\r': command not found或
-bash: ./start.sh: /bin/bash^M: bad interpreter: No such file or directory原因:文件在Windows环境下编辑或保存,换行符为 CRLF(\r\n),而Linux仅识别 LF(\n)。
解决方案:
方法一:使用sed命令转换(推荐)
# 转换单个文件
sed -i 's/\r$//' .env
# 批量转换所有脚本和配置文件
sed -i 's/\r$//' *.sh *.yml .env*
# 转换整个目录下的所有相关文件
find . -name "*.sh" -exec sed -i 's/\r$//' {} \;
find . -name "*.yml" -exec sed -i 's/\r$//' {} \;
find . -name ".env*" -exec sed -i 's/\r$//' {} \;方法二:使用dos2unix工具
# 安装dos2unix
# CentOS/RHEL
yum install -y dos2unix
# Ubuntu/Debian
apt-get install -y dos2unix
# 转换单个文件
dos2unix .env
dos2unix start.sh
# 批量转换
dos2unix *.sh *.yml .env*方法三:使用tr命令
# 转换文件
tr -d '\r' < .env > .env.tmp && mv .env.tmp .env方法四:使用vim编辑器
# 打开文件
vim .env
# 在vim中执行命令转换格式
:set ff=unix
:wq预防措施
- 在Windows上使用支持Unix换行符的编辑器(如VS Code、Notepad++)
- VS Code中设置:文件 → 首选项 → 设置 → 搜索 "eol" → 选择
\n - Notepad++中:编辑 → 文档格式转换 → 转换为Unix格式
容器启动失败
症状:容器状态显示 Exited 或 Restarting
排查步骤:
# 1. 查看容器状态
docker ps -a
# 2. 查看容器日志
docker logs miseb-admin
# 3. 查看详细错误
docker logs --tail 100 miseb-admin常见原因及解决方案:
| 原因 | 解决方案 |
|---|---|
| 内存不足 | 调小JVM参数或增加服务器内存 |
| 端口被占用 | 停止占用端口的服务或修改端口 |
| 配置错误 | 检查.env文件配置 |
| 依赖服务未启动 | 先启动基础设施服务 |
MySQL启动失败
症状:miseb-mysql 容器启动失败
排查:
docker logs miseb-mysql常见问题:
- 权限问题
# 检查数据目录权限
ls -la /var/lib/docker/volumes/miseb-mysql-data/
# 修复权限
docker run --rm -v miseb-mysql-data:/data alpine chown -R 999:999 /data- 数据目录损坏
# 备份数据后删除数据卷
docker volume rm miseb-mysql-data
# 重新创建并初始化
docker compose up -d mysqlElasticsearch启动失败
症状:ES容器一直重启
排查:
docker logs miseb-elasticsearch常见问题:
- vm.max_map_count 太小
# 临时设置
sudo sysctl -w vm.max_map_count=262144
# 永久设置
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p- 内存不足
修改 .env 文件:
ES_JAVA_OPTS=-Xms256m -Xmx256m- 数据目录权限
docker run --rm -v miseb-es-data:/data alpine chown -R 1000:1000 /dataJava服务OOM
症状:日志显示 OutOfMemoryError
解决方案:
- 调整JVM内存配置:
# 修改 .env
ADMIN_JAVA_OPTS=-Xms256m -Xmx512m -XX:+UseG1GC
FRONT_JAVA_OPTS=-Xms256m -Xmx512m -XX:+UseG1GC- 重启服务:
docker compose up -d --force-recreate连接问题
数据库连接失败
症状:日志显示 Communications link failure 或 Connection refused
排查:
# 1. 检查MySQL是否运行
docker ps | grep mysql
# 2. 测试连接
docker exec miseb-admin ping -c 3 mysql
# 3. 检查MySQL日志
docker logs miseb-mysql解决方案:
- 确保MySQL已启动:
docker compose up -d mysql- 等待MySQL就绪:
until docker exec miseb-mysql mysqladmin ping -h localhost --silent; do
echo "等待MySQL启动..."
sleep 5
done- 检查用户权限:
docker exec miseb-mysql mysql -uroot -p -e "SELECT user, host FROM mysql.user;"Redis连接失败
症状:日志显示 Unable to connect to Redis
排查:
# 1. 检查Redis状态
docker ps | grep redis
# 2. 测试连接
docker exec miseb-redis redis-cli -a 'password' ping解决方案:
- 确保Redis已启动
- 检查密码配置是否正确
- 检查网络连通性
容器间网络不通
症状:容器之间无法互相访问
排查:
# 查看网络
docker network ls
# 查看容器所在网络
docker inspect miseb-admin | grep -A 20 "Networks"
# 查看网络详情
docker network inspect miseb-network解决方案:
确保所有容器在同一网络:
# 将容器连接到网络
docker network connect miseb-network miseb-admin访问问题
页面404
症状:访问页面返回404错误
排查:
# 1. 检查Nginx状态
docker ps | grep nginx
# 2. 检查Nginx配置
docker exec miseb-nginx nginx -t
# 3. 检查静态文件
docker exec miseb-nginx ls -la /usr/share/nginx/html/解决方案:
- 重载Nginx配置:
docker exec miseb-nginx nginx -s reload- 检查前端文件是否正确部署
API请求失败
症状:API返回500错误或超时
排查:
# 1. 检查后端健康状态
curl -v http://localhost:8080/actuator/health
curl -v http://localhost:8081/actuator/health
# 2. 查看后端日志
docker logs --tail 100 miseb-admin
docker logs --tail 100 miseb-front解决方案:
- 检查数据库连接
- 检查Redis连接
- 查看详细错误日志
上传文件失败
症状:文件上传返回错误
排查:
# 检查MinIO状态
curl http://localhost:9000/minio/health/live
# 检查MinIO日志
docker logs miseb-minio解决方案:
- 检查MinIO配置
- 检查存储空间
- 检查文件大小限制
性能问题
响应缓慢
症状:页面加载或API响应很慢
排查:
# 1. 查看资源使用情况
docker stats --no-stream
# 2. 查看系统负载
top -bn1 | head -20
# 3. 查看磁盘IO
iostat -x 1 5解决方案:
- 内存不足:增加服务器内存或优化JVM配置
- CPU过高:检查是否有异常进程
- 磁盘IO高:考虑使用SSD
- 网络问题:检查带宽使用
内存占用过高
症状:docker stats 显示内存使用率很高
解决方案:
- 优化JVM配置:
# 减小堆内存
ADMIN_JAVA_OPTS=-Xms256m -Xmx512m
FRONT_JAVA_OPTS=-Xms256m -Xmx512m
ES_JAVA_OPTS=-Xms256m -Xmx256m- 清理缓存:
# 清理Redis缓存(谨慎操作)
docker exec miseb-redis redis-cli -a 'password' FLUSHDB磁盘空间不足
症状:服务异常,日志显示磁盘空间不足
排查:
# 查看磁盘使用
df -h
# 查看Docker占用
docker system df
# 查看大文件
du -sh /* | sort -rh | head -20解决方案:
- 清理Docker资源:
# 清理未使用的镜像
docker image prune -a
# 清理未使用的容器
docker container prune
# 清理构建缓存
docker builder prune- 清理日志文件:
# 查找大日志文件
find /var/lib/docker/containers -name "*.log" -size +100M
# 清空日志文件
truncate -s 0 /var/lib/docker/containers/<container-id>/*.log日志分析
常见错误日志
Connection refused
java.net.ConnectException: Connection refused原因:目标服务未启动或端口不正确
解决:检查目标服务状态和端口配置
Access denied
java.sql.SQLException: Access denied for user原因:数据库用户名或密码错误
解决:检查 .env 中的数据库配置
No space left on device
Error: No space left on device原因:磁盘空间不足
解决:清理磁盘空间
Out of memory
java.lang.OutOfMemoryError: Java heap space原因:JVM堆内存不足
解决:增加JVM堆内存配置
恢复操作
重置服务
如果问题无法解决,可以尝试重置服务:
# 停止所有服务
./stop.sh
# 删除容器(保留数据)
docker compose down
# 重新启动
./start.sh完全重置(危险)
警告
以下操作会删除所有数据,请先备份!
# 停止并删除所有容器和数据卷
docker compose down -v
# 重新部署
./start.sh获取帮助
如果以上方法都无法解决问题,请收集以下信息后联系技术支持:
- 系统信息:
uname -a
docker version
docker compose version- 容器状态:
docker ps -a- 错误日志:
docker logs --tail 500 miseb-admin > admin.log
docker logs --tail 500 miseb-front > front.log- 资源使用:
docker stats --no-stream > stats.log
free -m
df -h联系方式
- 邮箱: hongan@cdiwit.com
- QQ: 15937823
- 公司: 成都艾唯特软件有限公司
