`
lc_koven
  • 浏览: 349876 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

perftools查看堆外内存并解决hbase内存溢出

阅读更多
    最近线上运行的hbase发现分配了16g内存,但是实际使用了22g,堆外内存达到6g。感觉非常诡异。堆外内存用一般的工具很难查看,可以通过google-perftools来跟踪:
http://code.google.com/p/google-perftools/downloads/list
    它的原理是在java应用程序运行时,当调用malloc时换用它的libtcmalloc.so,这样就能做一些统计了


    通过perftools查看到以下内容:
Total: 3263.2 MB
  3145.2  96.4%  96.4%   3145.2  96.4% zcalloc
    83.8   2.6%  99.0%     83.8   2.6% os::malloc
    30.0   0.9%  99.9%     30.0   0.9% init
     2.2   0.1%  99.9%      2.2   0.1% ObjectSynchronizer::omAlloc
     1.0   0.0% 100.0%   3144.1  96.4% Java_java_util_zip_Deflater_init
     0.6   0.0% 100.0%      0.7   0.0% readCEN

    可见调用了java.util.zip.Deflater占用绝大多数。了解到这个deflater存在无法释放内存的bug,于是编写btrace查看是否进入了这个函数:
import static com.sun.btrace.BTraceUtils.*;
import com.sun.btrace.annotations.*;

import java.nio.ByteBuffer;
import java.lang.Thread;

@BTrace public class TestRegion1{
   @OnMethod(
      clazz="java.util.zip.Deflater",
      method="deflate"
   )
   public static void traceCacheBlock(){
println("deflate?");
   }
}

    发现果然在不停调用这行代码。应该如何办呢?
  由于deflater是gzip需要使用的代码,查看用户创建的表,发现COMPRESSOR设置的是GZ,尝试调整为LZO,结果发现btrace无法进入上述代码,再通过perftools查看时,堆内存不再申请,完全不再申请...
  小插曲,perftools的作者是个老实人,提供了zip版下载,但是不提供安装文件,原因?在README中有以下一段话:
  
I don't know very much about how to install DLLs on Windows, so you'll
have to figure out that part for yourself.
分享到:
评论
6 楼 huanghaifeng1990 2014-03-24  
您好,我想请问一下,我执行了会发生OOM溢出的Deflater程序,但是google perftool没能跟踪到我运行的程序,即在/home/user/perftools目录下没有关于Deflater的heap文件,请问这是怎么回事呢,perftool我确定已经正确安装了
5 楼 zdx3578 2014-03-21  
你好:请教个问题,分配了16g内存,但是实际使用了22g

你这里的22G看的是系统的什么指标?
4 楼 he_wen 2012-08-16  
请问一下 使用这个工具对线上服务器影响大吗?
3 楼 lc_koven 2011-09-13  
不知道,没遇到过,你jstack或者strace跟踪一下代码在做什么事吧
2 楼 iammonster 2011-09-12  
iammonster 写道
The first profile should be a remote form to use /pprof/symbol
why?how to do?

我的命令打错了,才出现的,不好意思。

我的跟踪为啥会使程序会卡死掉呢?
开头可以运行,几秒钟后就停止了, 必须kill -9 才能结束掉。
1 楼 iammonster 2011-09-12  
The first profile should be a remote form to use /pprof/symbol
why?how to do?

相关推荐

Global site tag (gtag.js) - Google Analytics