jdk1.6升級jdk1.8踩出的神坑

cjlcc發表於2020-12-04

過程:

週四當晚jdk從1.6升級到1.8,生產流程未出現異常。

第二天上午就炸了,被運維通知系統執行緩慢,業務人員已經炸鍋。

然後,可怕的系統問題排查之路開始了。

排查過程:

1、從weblogic控制檯看,發現有獨佔執行緒72個

此獨佔執行緒我分析和系統執行緩慢有關,但排查執行緒檔案也未發現問題,等待執行緒和鎖執行緒都未發現問題

2、使用者反饋外網不行,內網可以(這就奇怪了)

通過排查確實外網巨慢,內網能接受,但是也是有點慢的

網路組排查未發現問題,nginx配置排查也無問題

3、排查資料庫

未發現佔用時間長的sql

這就走進了死衚衕,似乎看不到希望了

然後一頓看日誌百度,都無濟於事

4、調整jvm引數

百度後調整jvm引數,這個方向應該也沒問題,畢竟升級了jdk1.8

https://www.cnblogs.com/jtlgb/p/10276258.html

但是調整了jvm也於事無補,沒有任何優化

然後發現伺服器cpu佔用過高,發現系統頻繁GC,新生代頻繁GC,一秒好幾次,都未到老年代就full gc

後來調整了GC記憶體的大小以及垃圾回收的jvm優化

垃圾回收調優:https://blog.csdn.net/leeket/article/details/10995321

發現都解決不了問題

cpu過高抓取相關程式:https://blog.csdn.net/u010248330/article/details/80080605

5、迴歸程式碼問題

本地啟動能重現,但是通過日誌各種列印都無法定位到問題,最後發現

Spring MVC的註解功能,完成請求和註解POJO的對映(前端form表單提交,後端實體類接受,通過springbean反射實現)

巨慢。

配置如下:

<!-- 啟動Spring MVC的註解功能,完成請求和註解POJO的對映 -->
    <mvc:annotation-driven conversion-service="conversionService">
        <mvc:message-converters register-defaults="true">
            <!-- fastjosn spring support 解決返回json亂碼問題 -->
            <bean id="jsonConverter"
                class="ins.framework.utils.support.MappingFastJsonHttpMessageConverter">
                <property name="supportedMediaTypes" value="application/json" />
                <property name="serializerFeature">
                    <list>
                        <value>WriteMapNullValue</value>
                        <value>QuoteFieldNames</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
        <mvc:argument-resolvers>
            <bean class="ins.framework.web.bind.method.annotation.FormModelMethodArgumentResolver" />
        </mvc:argument-resolvers>
    </mvc:annotation-driven>

通過這一點結合升級jdk版本及jar包依賴,發現spring從3.2.6升級到了4.0.0,最後百度發現4.0.0存在問題,

https://www.jianshu.com/p/69ccaab0add7

最後升級到4.0.6版本,我去,問題得以解決。。。。

不知道是不是運氣不好,踩到了4.0.0的spring版本坑上面,奉勸大家,不要用這些外掛的大版本,要用小版本

自此問題得以解決。

 

相關文章