continew-org / continew-admin

🔥Almost最佳后端规范🔥持续迭代优化的前后端分离中后台管理系统框架,开箱即用,持续提供舒适的开发体验。当前采用技术栈:Spring Boot3(Java17)、Vue3 & Arco Design、TS、Vite5 、Sa-Token、MyBatis Plus、Redisson、JetCache、Jackson、Spring Doc、JustAuth、Easy Excel、Crane4j、Liquibase、Hutool 等。
https://continew.top
Apache License 2.0
456 stars 105 forks source link

分布式id CosId machineId耗尽报错的问题 #45

Closed weirantongxue closed 5 months ago

weirantongxue commented 5 months ago

Feature 描述

分布式id CosId machineId耗尽报错的问题.....是因为使用kill -9 没有办法回收机器号 导致机器id的数量会上涨.停止服务需要点两次但是服务没有完全关闭点第二次才能停止不能优雅的 暂停和重启 之前一直使用的是kill -9 忽略了 别的问题.导致了 CosId 回收机器号的时候 没回收掉...会一直上涨. 因为服务在使用重启 脚本命令时候会导致之前无法停止 所以才使用了 kill -9

image

jar启动脚本 `export JAVA_HOME="/opt/jdk/jdk-17.0.10" export PATH=$JAVA_HOME/bin:$PATH

定义应用名称和JAR文件

APP_NAME="continew-admin" JAR_FILE="continew-admin.jar"

检查命令行参数

if [ "$1" == "start" ]; then

检查是否已经运行

if pgrep -f $JAR_FILE > /dev/null
then
    echo "$APP_NAME 已经在运行。"
    exit 0
fi

# 进入到JAR文件所在的目录
cd /work/server

# 启动Spring Boot应用
nohup java -jar $JAR_FILE > /dev/null 2>&1 &

echo "$APP_NAME 启动成功。"

elif [ "$1" == "stop" ]; then

停止Spring Boot应用

if pgrep -f $JAR_FILE > /dev/null
then
    pkill -f $JAR_FILE
    echo "$APP_NAME 已停止。"
else
    echo "$APP_NAME 未在运行。"
fi

elif [ "$1" == "restart" ]; then

重启Spring Boot应用

if pgrep -f $JAR_FILE > /dev/null
then
    pkill -f $JAR_FILE
fi

# 进入到JAR文件所在的目录
cd /work/lb/hex-server

# 启动Spring Boot应用
nohup java -jar $JAR_FILE > /dev/null 2>&1 &

echo "$APP_NAME 重启成功。"

else echo "用法: $0 {start|stop|restart}" exit 1 fi

exit 0`

描述一下您想要的解决方案

是否可以提供内置的对于springboot 优雅的 停止 启动 重启 可以避免在有些三方组件在回收机制无法触发.

描述一下您考虑过的替代方案

No response

额外补充

No response

确认

weirantongxue commented 5 months ago

我排查了一下,大概率是redisson的问题,在spring容器关闭的时候 有事务或者锁没有得到释放。spring容器在执行Shutdown.exit与Shutdown.shutdown 这个的时候报错了导致了程序未能正常结束。可以尝试更换一下redisson版本试试

Charles7c commented 5 months ago

Redisson 3.28.0 已经修复此问题,详见https://github.com/redisson/redisson/issues/5710