前段时间,公司上线一个项目,需要从docker里面迁移到物理服务器。该项目运行一直是好的,在把相关文件配置搬到服务器上时,启动后登陆,报了一个序列化的问题:
java.lang.IllegalArgumentException: java.io.NotSerializableException: java.util.PropertyResourceBundle
at org.redisson.RedissonObject.encodeMapValue(RedissonObject.java:248)
at org.redisson.RedissonMap.fastPutOperationAsync(RedissonMap.java:917)
at org.redisson.RedissonMap.fastPutAsync(RedissonMap.java:902)
at org.redisson.RedissonMap.fastPut(RedissonMap.java:922)
at org.redisson.tomcat.RedissonSession.fastPut(RedissonSession.java:132)
at org.redisson.tomcat.RedissonSession.setAttribute(RedissonSession.java:179)
at org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1428)
乍一看,猜到可能是session里面存在不能序列化的实例变量,但是如何发现这个变量是哪个呢?
在GG上面找了资料,最后发现了一个JVM参数:sun.io.serialization.extendedDebugInfo (Locating Serialization Issue in Complex Bean)。
试着加上这个参数:
-Dsun.io.serialization.extendedDebugInfo=true
重启服务器,重新访问,最后打印出了详细的序列化异常的信息:
java.lang.IllegalArgumentException: java.io.NotSerializableException: java.util.PropertyResourceBundle
- field (class "com.leasing.emogo.business.common.BaseGlobalData", name: "logMsg", type: "class java.util.ResourceBundle")
- root object (class "com.leasing.emogo.business.common.GlobalInfo", com.leasing.emogo.business.common.GlobalInfo@63768274)
at org.redisson.RedissonObject.encodeMapValue(RedissonObject.java:248)
at org.redisson.RedissonMap.fastPutOperationAsync(RedissonMap.java:917)
at org.redisson.RedissonMap.fastPutAsync(RedissonMap.java:902)
at org.redisson.RedissonMap.fastPut(RedissonMap.java:922)
at org.redisson.tomcat.RedissonSession.fastPut(RedissonSession.java:132)
at org.redisson.tomcat.RedissonSession.setAttribute(RedissonSession.java:179)
at org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1428)
有了详细的信息,就能对症下药,解决问题了~
感觉JVM这块,有好多内容需要学的,anyway,慢慢学吧!
手机扫一扫
移动阅读更方便
你可能感兴趣的文章