推特的JVM调优

JVMPerformanceOptimization At Twitter

  1. Memory tuning

  2. CPU usage tuning

  3. Lock contention tuning

  4. 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 位