-
Notifications
You must be signed in to change notification settings - Fork 54
常见问题和解决方案
jdk版本和dcevm版本不一致,请先确保版本是一致的。
请把用GC相关的jvm参数都删掉,包括但不限于 -XX:+UseParNewGC, -XX:+UseConcMarkSweepGC,-XX:ParallelGCThreads ,-XX:+UseCMSCompactAtFullCollection ,-XX:CMSInitiatingOccupancyFraction 等等,如果启动不起来也没有报错日志一般就是参数没删干净,如果不确定可以先只加最基本的jvm参数看看能不能起来
先确保第2步中的参数都是正确的,如果都改完了,还是有问题
先用jps看看是哪个进程pid,然后用jstack -l pid > 1.log,搜索deadlock看看有没有具体的报错,报错信息可以发一下。
- 目前发现Tomcat7可能存在死锁问题(不是一定),加上参数excludedClassLoaderPatterns可以解决,完整参数段为(注意是英文逗号不要中文逗号)
hotconf=$path2/hot-seconds-remote.xml,excludedClassLoaderPatterns=org.apache.catalina.loader.StandardClassLoader
服务器启动成功后有日志
HotDeployService热部署服务启动成功
服务端用netstat/lsof看看端口是不是起来了,客户端用telnet/nc -zv 能连通远程的端口
升级到HotSecondsServer-future2版本以上,然后在服务端加上jvm参数 -Djava.rmi.server.hostname=远程ip
和问题2类似,先在目标机器上看看hostname -i是否和配置的远程ip一致,是否存在端口映射,如果不一致,请在服务端上加上jvm参数 -Djava.rmi.server.hostname=配置的远程ip,客户端真正热部署的服务ip是-Djava.rmi.server.hostname的值,port即配置的port
k8s/docker容器/虚拟机连接方案
本地->宿主机器:端口1->容器:端口2,这样一个交互流程,如果本地能直连容器,则直接连接即可,在不通的情况下则需要采用以下方案连接。
需要满足两个条件
- 首先需要保证端口1和端口2相同,比如宿主机端口2023映射到容器端口2023
- 本地和宿主机端口是能正常连通
然后容器添加jvm参数-Djava.rmi.server.hostname=宿主机器,最后本地插件连接宿主机的机器+端口1即可。
这样当有多组容器服务器的时候,相当于是通过不同的端口来区分不同的内网服务器。
这个方案的缺点是每个容器ip都需要宿主机暴露一个端口,如果容器比较多的时候还是很费劲的,还有一种方案就是用代理服务器的方式 : 代理服务器连接
配置里面的remote_port和其他端口共用了,remote_port必须是一个独立的端口仅用于热部署,不要和其他端口共用,可以换个端口试试
连接远程正常,但是热加载任何一个类报错fail或者报错Can't find classloader in server,please check hot-seconds-remote.xml,一般是hot-seconds-remote.xml中的classloader配错了,可以远程断点,然后随便找个类A,看看A.class.getClassLoader()是哪个,填到配置文件即可。
看看HotSecondsClient控制台上面连接远程的tab框,点击开关会优先连接tab框上面的连接源,关闭tab上面的连接源则会默认读取配置文件的ip和端口。