最近做了一个内部系统之间的数据同步服务器,client端通过socket发送经过压缩的json数据到server端,server完成数据解码和保存。server架构:netty+Gson解码
在做压力测试的时候,竟然发现server内存泄露。分析内存泄露的时候,其实我们可以从简单方法入手,因为jdk1.6后自身就带有不错的内存分析工具,而且我认为使用好这些工具基本足够高,因为如果你对这些工具的理解不深入,即使再强大的工具也是对你帮助不大。
开始分析:
第一步:jmap -heap <pid> 看个内存快照
using thread-local object allocation.
Parallel GC with 4 thread(s)
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 536870912 (512.0MB)
NewSize = 1310720 (1.25MB)
MaxNewSize = 17592186044415 MB
OldSize = 5439488 (5.1875MB)
NewRatio = 2
SurvivorRatio = 8
PermSize = 21757952 (20.75MB)
MaxPermSize = 6