jvm内存溢出实例-Netty参数抽取

内存溢出, 高级程序员的必修课
而且往往是伴随着大压力并发一起来

下面是一个实例

线程实例在另一个贴子里有讲, 这个实例线程上没问题, 就没有截图了

把JVM设置在最大内存64M, 好快速产生瓶颈


运行程序, 打开jconsole监控


查看内存


打开jmeter, 100个线程, 循环100次, 由于前面调低了内存, 所以不需要跑太猛, 而且我的是notebook, 4G内存, win7, mysql, netbean等一堆后台, 资源有限












100个线程, 循环100次跑下来, 内存爆了
JVM尝试了很多次GC, 但没办法
程序陷入GC死循环, 进入假死状态, 再过一会就直接out of memory
注意看曲线直接上升的势头, 多美妙

-----一轮蛋疼的调试, 过程略过-----

下面是弄好后的结果


再次打开jconsole


清空jmeter


100个线程, 循环100次跑完


内存才用了25m, 有升有降的曲线说明内存很健康


执行下GC, OLD GEN 果断下降, 至此, 内存溢出问题解决

-----下面是代码分析-----


这是原代码, 作用是抽取netty的post请求参数


这是分析解决后的代码, 这种事情, 往往1,2天的调试下来, 就是1,2句代码的事
当然这也从另一方面证明了该程序员的代码质量是很好的


这是"坑货" HttpDataFactory,
为什么不把HttpDataFactory放在函数里呢
这是出于性能考虑, 为了减少初始化的次数, 把它放外面, 符合资深程序员的思维
只是一方面对API不熟悉, 另一方面忽略了长期持有的情况

猜你喜欢

转载自mocha-c-163-com.iteye.com/blog/2302071