前段時間結果leader分給我一個調優調性能的任務:把100w的MP3
數據下載到本地並壓縮成zip包。然後我看了之前的舊的代碼,問題多多。我決定重新新方法。使用多線程下載,使用countDownLatch來控制主線程子線程次級線程的執行次序。當我把數據從十萬,五十萬,一百萬進行測試的時候,在五十萬的時候就報了這個錯誤,然後按照網上的修改了jvm運行內存,WebLogic的內存等等,五十萬勉強可以通過,當數據到達一百萬的時候還是報了內存溢出的錯誤。因爲不知道如何去調節內存了,而且按理說一百萬的數據不應該會佔太大的內存;所以決定從代碼中入手,發現了這個:
因爲這裏log在控制檯輸出了100萬的數據並且寫入log文件中;這就導致內存激增一直溢出。把這些大數據量的數據log註釋掉從新下載運行,然後沒有內存溢出了。問題解決。
總結:很多容易忽略的代碼很可能導致問題的出現,所以開始越到問題時候要好好排查,不要忽略那些認爲不會出錯的地方。