最近线上某个应用Native OOM
目前查找Native OOM最好的方法就是用google perftools了,于是挂上google perftools,等待应用再次native oom,很幸运,两天后,应用就再次native oom了,于是分析crash之前那段时间谁在不断的分配堆外的内存,pprof看到的结果主要是java.util.Inflater造成的,由于之前 已经碰到过类似的case,知道如果使用了Inflater,但不显式的调用Inflater.end的话,确实会造成这个现象。
于是剩下的问题就是找出代码里什么地方调用了Inflater,这种时候btrace这个神器就可以发挥作用了,一个简单的btrace脚本:
import static com.sun.btrace.BTraceUtils.*; import com.sun.btrace.annotations.*; @BTrace public class Trace{ @OnMethod( clazz="java.util.zip.Inflater", method="/.*/" ) public static void traceExecute(@ProbeMethodName String methodName){ println(concat("who call Inflater.",methodName)); jstack(); } }
执行后很快就找到了代码什么地方调用了Inflater,于是加上了显式的调用Inflater.end,搞定收工。
参考:http://rdc.taobao.com/team/jm/archives/684
相关推荐
google-perftools-1.8.3-1.el6.x86_64.rpm
google-perftools-1.6
google-perftools-1.8.2.tar.gz工具,帮助查看堆外内存
google_perftools是谷歌的内存池代码,可以支持嵌入程序。
支持nginx优化
perf tools p0
perf tools jre2
perf tools jre1
非常强大的Linux系统性能检测工具。非常强大的Linux系统性能检测工具。
rack-perftools_profiler, 使用 perftools.rb 配置 rack 兼容应用程序的中间件 Rack::PerftoolsProfiler使用 perftools.rb 配置机架兼容应用的中间件快速启动假定应用程序使用 Rails 3 ( 你已经在下一节中安装了需求...
使用Google tcmalloc进行内存申请释放,解决内存没有真正释放
perf tools p2
google-perftools 需要在目标代码的开始和结尾点分别调用剖析模块的启动和终止函数,这样在目标程序运行时就可以对这段时间内程序实际占用的 CPU 时间片进行统计和分析。工具的启动和终止可以采用以下两种方式。 a. ...
perf 性能分析工具
perf tools p1
perf tools p3
下面为大家介绍google-perftools的安装,并配置Nginx和MySQL支持google-perftools。 首先,介绍如何优化Nginx: 1,首先下载并安装google-perftools: 注意,如果是64位系统: 那么你需要做:1)先安装libunwind或者2)在...
我们见过的最快的malloc; 与线程和STL配合使用特别好。 另外:线程友好的堆检查器,堆分析器和cpu分析器。
perftools.rb gperftools for ruby code (c) 2012 Aman Gupta (tmm1) http://www.ruby-lang.org/en/LICENSE.txt gperftools (formerly known as google-perftools): http://gperftools.googlecode.com 用法(在...