今天给各位分享asan的知识,其中也会对阿散井恋次进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
address sanitizer(简称asan)是一个用来检测c/c++程序的快速内存检测工具。相比valgrind的优点就是速度快,官方文档介绍对程序性能的降低2倍。
对Asan原理有兴趣的同学可以参考asan的算法这篇文章,它的实现原理就是在程序代码中插入一些自定义代码,如下:
编译前:
*address = ...; // or: ... = *address;
编译后:
if (IsPoisoned(address)) {undefined
ReportError(address, kAccessSize, kIsWrite);
}
*address = ...; // or: ... = *address;`
和valgrind明显不同的是,asan需要添加编译开关重新编译程序,好在不需要自己修改代码。而valgrind不需要编程程序就能直接运行。
address sanitizer集成在了clang编译器中,GCC 4.8版本以上才支持。我们线上程序默认都是使用gcc4.3编译,于是我测试时直接使用clang重新编译nginx:
--with-cc="clang" \
--with-cc-opt="-g -fPIC -fsanitize=address -fno-omit-frame-pointer"
其中with-cc是指定编译器,with-cc-opt指定编译选项, -fsanitize=address就是开启AddressSanitizer功能。
由于AddressSanitizer对nginx的影响较小,所以大压力测试时也能达到上万的并发,内存泄漏的问题很容易就定位了。
这里就不详细介绍内存泄漏的原因了,因为跟openssl的错误处理逻辑有关,是我自己实现的,没有普遍的参考意义。
最重要的是,知道valgrind和asan的使用场景和方法,遇到内存方面的问题能够快速修复。
性能热点分析
到此,经过改造的nginx程序没有core dump和内存泄漏方面的风险了。但这显然不是我们最关心的结果(因为代码本该如此),我们最关心的问题是:
1. 代码优化前,程序的瓶颈在哪里?能够优化到什么程度?
2. 代码优化后,优化是否彻底?会出现哪些新的性能热点和瓶颈?
这个时候我们就需要一些工具来检测程序的性能热点。
perf,oprofile,gprof,systemtap
主要作用为:(1)以平等与协作精神,共同努力促进本地区的经济增长、社会进步和文化发展;(2)遵循正义、国家关系准则和《联合国宪章》,促进本地区的和平与稳定;(3)促进经济、社会、文化、技术和科学等问题的合作与相互支援;(4)在教育、职业和技术及行政训练和研究设施方面互相支援;(5)在充分利用农业和工业、扩大贸易、改善交通运输、提高人民生活水平方面进行更有效的合作;(6)促进对东南亚问题的研究;(7)同具有相似宗旨和目标的国际和地区组织保持紧密和互利的合作,探寻与其更紧密的合作途径。
东南亚国家联盟(Associatioon of Southeast Asian Nations-ASAN)是这个吗?
关于asan和阿散井恋次的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
评论
游客
回复支持楼上的!http://obsy.cnj8.com
游客
回复看帖不回帖都是耍流氓!http://www.dnf70.com/22.html
正版4g彩票登录入口
回复今天的心情很不错啊http://u8tavr.mcgdp.com
四码组合中奖规则
回复不是惊喜,是惊吓!http://gk2.xmfeilin.com
游客
回复这个帖子好无聊啊!http://www.guangcexing.net/voddetail/yGktkAAQz.html
telegram官网
回复楼主就是我的榜样哦https://www.telegramlp.com/