前段时间结果leader分给我一个调优调性能的任务:把100w的MP3
数据下载到本地并压缩成zip包。然后我看了之前的旧的代码,问题多多。我决定重新新方法。使用多线程下载,使用countDownLatch来控制主线程子线程次级线程的执行次序。当我把数据从十万,五十万,一百万进行测试的时候,在五十万的时候就报了这个错误,然后按照网上的修改了jvm运行内存,WebLogic的内存等等,五十万勉强可以通过,当数据到达一百万的时候还是报了内存溢出的错误。因为不知道如何去调节内存了,而且按理说一百万的数据不应该会占太大的内存;所以决定从代码中入手,发现了这个:
因为这里log在控制台输出了100万的数据并且写入log文件中;这就导致内存激增一直溢出。把这些大数据量的数据log注释掉从新下载运行,然后没有内存溢出了。问题解决。
总结:很多容易忽略的代码很可能导致问题的出现,所以开始越到问题时候要好好排查,不要忽略那些认为不会出错的地方。