- 博客(27)
- 资源 (7)
- 收藏
- 关注
原创 boost property_tree read_json coredump
项目中使用boost::property_tree::read_json引发coredump,几乎是稳定复现,而且每次core也基本都在同一个地方但是,怎么看也不太像会出core的样子,所以就朝着内存写飞的方向排查了。搞了一上午的valgrind,最终还是报错这个问题之前也遇到过,试了几次安装libc6-debug也没搞定。好吧,终于想起来请教大牛了,大牛反馈这个不好搞;要hack valgrind的源码,改几个宏定义才能用;而且valgrind不好用,你用火焰图吧大牛建议我使用jemalloc
2020-06-08 14:19:46
673
原创 从一次python程序的性能优化说开去
一门编程语言入门是容易的,至少大家都知道从hello world开始。但这次性能优化的经历告诉我,“换语言”这件事是有门槛的。这次性能优化是针对数据入库流程中的一个环节(brief)做的。我们常说解决问题重要,发现问题更重要。没错,这次发现问题就占用了我较长时间。brief部署在X平台上,通过增加日志,我发现brief耗时较长的部分发生在平台内部,接下来主要工作就是找X平台的负责同学沟通了...
2018-03-03 23:32:20
286
原创 tcmalloc为什么快,如何替换系统malloc
使用了thread cache,小块的内存分配都可以从cache中分配。多线程分配内存的情况下,可以减少锁竞争。tcmalloc官方文档见: https://gperftools.github.io/gperftools/tcmalloc.htmltcmalloc可以替换大多数系统、不同编译器环境下的内存分配函数(malloc/free/new/delete),针对不同的编译器和操作系统,替换的方
2017-11-23 16:02:25
8861
原创 glibc内存管理
我们调用free函数释放之前分配的内存,其实是将内存还给glibc,但是glibc却并不一定会将内存还给操作系统,导致使用top命令查看进程占用的内存时,出现类似内存泄漏的现象。关于glibc的内存管理,待进一步完善
2017-11-23 11:42:37
301
原创 linux开发环境搭建
环境配置管理home目录采用git管理,这样避免配置配更改使用zsh一直使用zsh,感觉zsh的自动补全功能非常好,比bash好用(也许是我没配好吧)安装powerlinegit clone https://github.com/powerline/powerline.git powerline下载patched fontpowerline为保证很好的视觉效果,设计了自己的一些字体设置字体以iter
2017-10-27 14:52:16
259
原创 最长公共子串
Q: 求两个字符串的最长公共子串的长度 A:动态规划转移方程如下: 定义f[m][n] 为字符串A前m个字符和字符串B前n个字符的最长公共子串的长度,则if A[m] != B[n]: f[m][n] = max(f[m-1][n], f[m][n-1]) else if f[m-1][n-1] == 0: f[m][n] = 1 else if f[m-2][n-2]
2017-10-09 23:58:52
229
原创 c++ 多态的实现
什么是多态简单地说,就是允许将子类的指针赋值给赋值给基类的指针实现依赖于编译器给每个包含了虚函数的类增加的虚拟表virtual table来实现调用虚函数时,首先查虚表如 class A : public B 表示A继承B,B中定义了虚函数B* b = new A;A实例的内存起始部分和B的内存格局相同,这样当调用b->foo()时(foo为虚函数,A对foo进行了覆写),其实就是调用了A中对foo
2017-10-06 19:29:29
182
原创 c++ 右值引用
什么是右值 Generally, rvalues are values whose address cannot be obtained by dereferencing them, either because they are literals or because they are temporary in nature (such as values returned by functi
2017-10-06 19:08:44
257
原创 dynamic_cast vs static_cast
static_cast是编译器转换,如果能确定转换成功的话,采用static_cast运行效率更高dynamic_cast也能达到从基类指针转为子类指针的效果,但是转换是发生在运行时,相比与static_cast效率会较低未完待续…
2017-09-12 09:46:21
253
原创 hadoop MR任务优化总结
最近在做数据灌库工作,数据量较大不能基于单机进行灌库,需要编写MR任务。由于做MR开发经验不足,几经优化才满足灌库性能要求,这里总结一下。如非必要,请规避reduce任务reduce任务涉及跨计算节点拉取数据,shuffle及数据排序,而这些过程都是很耗资源的。 对于灌库任务来说,我们没有必要对数据做排序,完全不要reduce任务,不要画蛇添足地去将reduce设置为cat,看上去cat只是作了数
2017-08-25 16:17:16
2657
原创 logging TimedRotatingFileHandler不支持多进程
python程序中,我们经常会使用logging进行日志打印,logging的多线程支持得很好,但是对于多进程就无能为力了多个进程同时写一份日志文件会导致TimedRotatingFileHandler日志切割失败,亲测,我的应用场景是: 使用logging打印日志,分别对应xxx.log 和 xxx.log.wf 同时在调用python脚本的shell脚本中将shell脚本日志appen
2017-07-20 11:11:44
1964
原创 基于redis实现的分布式锁
先从字面理解,分布式锁(Distributed Lock)就是分布式部署的锁。那么什么是锁呢?这个大家应该比较熟悉了,和我们经常遇到的“在多线程写同一个变量时需要加锁”、“多个客户端在更新数据库同一条记录时需要加锁”等等这些场景中提到的“锁”是一样的,是一种同步方式。
2017-07-18 21:59:34
309
原创 linux中的软链(symbolic link)
当前虚拟化技术盛行,不可避免要使用软链,之前使用公司的PaaS平台,也遇到了软链相关的问题应用场景在实例上运行shell脚本,shell进一步调用python脚本通常我的做法是: 1)将python环境打包上线,目录结构如下: /home/work ./script ./python2.7.tar.gz 2) 固定写死shell脚本目录和python环境的期望目录结
2017-07-06 17:52:22
1103
原创 c++ linker warning: defined in discarded section
/usr/bin/ld: .gnu.linkonce.t._ZN5boost8signals25slot0IvNS_8functionIFvvEEEED1Ev' referenced in section.gnu.linkonce.r._ZN5boost8signals25slot0IvNS_8functionIFvvEEEED1Ev’ of ./libut_doraemon.a(ut_doraem
2017-03-16 20:26:39
2471
原创 type_info::before的用途
Compare order of types Returns whether the type precedes the type identified by rhs in some implementation-specific order.这是cplusplus.com 网站给的解释 bool before(const type_info& rhs) const; Effec
2017-03-16 19:35:37
1117
原创 ActiveMQ LevelDB/Zookeeper bug
ActiveMQ问题排查问题出现前使用activemq 5.11.1,排查问题中改用5.13.3:背景排查经过结果解决方案总结背景公司内使用ActiveMQ(以下简称“MQ”)作为消息中间件进行模块间的消息传递。特别地,我使用MQ作为实时检索系统增量接收的消息中间件。MQ按Replicated LevelDB Store + zookeeper master/slave方式部署。一开始上
2017-01-23 17:37:07
1218
C Standard ISO/IEC 9899:1999(E)
2011-11-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人