Skip to content
Liubsyy edited this page Sep 16, 2023 · 51 revisions

这里是HotSeconds插件的首页,即将为你打开HotSeconds新世界的大门

HotSeconds 能做什么?

  1. Java远程热部署代码,包括修改代码块,新增字段,新增方法,新增类,以及动态代理类。
  2. 支持热部署jar包中的.class和热部署整个jar包。
  3. 支持一些资源文件的上传和热部署(需要刷新缓存逻辑)。
  4. 支持单文件热更新, 批量热部署修改的文件,批量热部署git/svn差异文件,支持远程编译,支持自动热部署资源文件。
  5. 支持一些框架的热更新,比如Spring, SpringMVC,SpringBoot,MyBatis等。
  6. 支持远程执行静态无参函数功能(非静态和有参函数都可以通过静态无参函数调用),这样不用调HTTP和RPC接口就能触发某代码,结果会返回到控制台,配合热部署代码可以做到上天入地无所不能。
  7. 支持自定义扩展,这才是广义上的热部署,以兼容第三方框架多少论成败只是“术”,而以不变应万变让每个人都能为所欲为扩展,才是“道”。

常见问题和解决方案

一. 服务器启动失败问题

1. 版本问题

jdk版本和dcevm版本不一致,请先确保版本是一致的。

2. 报错Must use the serial GC这一类问题

请把用GC相关的jvm参数都删掉,包括但不限于 -XX:+UseParNewGC, -XX:+UseConcMarkSweepGC,-XX:ParallelGCThreads ,-XX:+UseCMSCompactAtFullCollection ,-XX:CMSInitiatingOccupancyFraction 等等,如果启动不起来也没有报错日志一般就是参数没删干净,如果不确定可以先只加最基本的jvm参数看看能不能起来

3. 没有报错日志,但就是起不来

先确保第2步中的参数都是正确的,如果都改完了,还是有问题
先用jps看看是哪个进程pid,然后用jstack -l pid > 1.log,搜索deadlock看看有没有具体的报错,报错信息可以发一下。

  • 目前发现Tomcat7可能存在死锁问题(不是一定),加上参数excludedClassLoaderPatterns可以解决,完整参数段为(注意是英文逗号不要中文逗号)
hotconf=$path2/hot-seconds-remote.xml,excludedClassLoaderPatterns=org.apache.catalina.loader.StandardClassLoader

服务器启动成功后有日志

HotDeployService热部署服务启动成功

二. 连接服务器失败问题

1.先确保远程端口起来了

服务端用netstat/lsof看看端口是不是起来了,客户端用telnet/nc -zv 能连通远程的端口

2.连接服务器失败报错,但是报错ip和远程ip不一致

升级到HotSecondsServer-future2版本以上,然后在服务端加上启动参数 -Djava.rmi.server.hostname=远程ip

三. 热加载任何一个类都失败(也有可能提示成功但是任何一个类都没有生效)

连接远程正常,但是热加载任何一个类报错fail或者报错Can't find classloader in server,please check hot-seconds-remote.xml,一般是hot-seconds-remote.xml中的classloader配错了,可以远程断点,然后随便找个类A,看看A.class.getClassLoader()是哪个,填到配置文件即可。

Clone this wiki locally