JVM参数-Dsun.io.serialization.extendedDebugInfo
阅读原文时间:2021年04月20日阅读:1

2019独角兽企业重金招聘Python工程师标准>>>

    前段时间,公司上线一个项目,需要从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,慢慢学吧!

转载于:https://my.oschina.net/javamaster/blog/2987164