推特的JVM调优
JVMPerformanceOptimization At Twitter
Memory tuning
CPU usage tuning
Lock contention tuning
I/O tuning
潜在的贡献者
垃圾回收器
其他为不分先后顺序:
进程锁和线程调度
I/O
程序算法效率低
性能优化点
- 内存优化
- CPU使用率优化
- 锁争用优化
- I/O优化
内存优化点
内存占用优化
so you got an OutOfMemoryError….
可能你的数据量太大
通过jvm 参数 -verbose:gc运行程序
观察Full GC消息里的GC数据数量 [Full GC $before->$after($total), $time secs]
思考是否可以给JVM分配更多的内存
思考是否在内存中需要所有的数据,考虑使用:
- 一个LRU 缓存。或者其他
- 考虑使用软引用
可能你的数据定义很臃肿
当你做些怪异的事情,可能出现问题
- 载入twitter全部的社会关系图在一个JVM中
- 载入全部的用户元数据在一个JVM中
简化数据内部的代表
也可能是真正的内存泄露
内存分配频率优化
垃圾回收优化
Fat Data Object Header
- JVM 对象头 通常消耗两个机器字节码
- 16字节,或者在64位JVM上占用128 位