Archive

Archive for July, 2013

crash_dump中Taints项含义

July 2nd, 2013 Comments off

原创文章,转载请注明: 转载自系统技术非业余研究

本文链接地址: crash_dump中Taints项含义

erlang的应用程序出问题的时候通常会生成一个dump文件,这个文件很好的保存了当时的现场,很利于后面诊断问题。 比如:

=erl_crash_dump:0.1
Sun Jun 23 15:35:39 2013
Slogan: Kernel pid terminated (application_controller) ({application_start_failure,ump_proxy,{bad_return,{{ump_proxy_app,start,[normal,[]]},{‘EXIT’,{undef,[{cherly_server,start_link,[ump_proxy_cherly_server
System version: Erlang R15B02 (erts-5.9.2) [64-bit] [smp:16:16] [async-threads:5] [hipe] [kernel-poll:true]
Compiled: Fri Sep 14 13:23:22 2012
Taints: ump_proxy_partitioner_nifs,asn1rt_nif,crypto,dyntrace,ump_la_nifs
Atoms: 37857

crash_dump也开门见山的描述了出错的原因,系统的版本,编译时间,原子的个数,还有一个叫做Taints的东西。
前面这几个都很好理解,原子的个数也能理解,毕竟原子表是有大小限制的,爆了一定要crash的。 那这个Taints是哪路神仙,也要列在这么重要的位置。
从字面上理解,Taints的意思就是污染的意思,再看它的内容很明显都是nif模块的名字。
看到这些nif列表,大概就能明白了。由于nif是在vm里面运作的, 如果有bug或者问题,就会直接把vm挂掉,所以官方信任自己的vm代码,系统出了问题,第一时间就会怀疑到用户写的nif代码,也是很自然的。

Erlang开发组的人回答是:

The idea was a way to see all user libraries that has ever been loaded
and executed by the VM. Currently it only shows NIF libraries, but
driver names will hopefully be added as well in some future release.

/Sverker, Erlang/OTP Ericsson

我们从代码验证下:
Read more…

Post Footer automatically generated by wp-posturl plugin for wordpress.