- 博客(22)
- 资源 (41)
- 收藏
- 关注
转载 TCP Socket: shutdown VS close
shoutshwn 半断开 close读写都关闭tcp断开的三个等待 发送fin后的等待ack ack后等待对方发送fin,返回ack ack后等待2ms,确保对方已经接收ackshutdown & close Muduo TcpConnection 没有提供 close,而只提供 shutdown ,这么做是为了收发数据的完整性。 TCP 是一个全双工协议,同一个文件描...
2018-02-27 10:08:35 394
原创 share_ptr 与enable_shared_from_this
enable_shared_from_this,是一个以其派生类为模板类型实参的基础模板,继承它,this指针就能变成shared_ptr。什么时候该使用enable_shared_from_this模板类 在看下面的例子之前,简单说下使用背景,单有一个类,某个函数需要返回当前对象的指针,我们返回的是shared_ptr,为什么使用智能指针呢,这是因为:当我们使用智能指针管理资源时,...
2018-02-27 09:47:31 323
转载 C++11之右值引用(二):右值引用与移动语义
上节我们提出了右值引用,可以用来区分右值,那么这有什么用处? 问题来源 我们先看一个C++中被人诟病已久的问题:我把某文件的内容读取到vector中,用函数如何封装?大部分人的做法是:void readFile(const string &filename, vector<string> &words){ words.clear(); //read X...
2018-02-26 16:05:22 210
转载 C++11之右值引用(一):从左值右值到右值引用
C++98中规定了左值和右值的概念,但是一般程序员不需要理解的过于深入,因为对于C++98,左值和右值的划分一般用处不大,但是到了C++11,它的重要性开始显现出来。C++98标准明确规定:左值是可以取得内存地址的变量。非左值即为右值。从这里可以看出,可以执行&取地址的就是左值,其他的就是右值。这里需要明确一点,能否被赋值不是区分C++左值和右值的区别。我们给出四个表达式:string o...
2018-02-26 16:04:15 201
原创 c++ RVO 和 NRVO
在查看std::move是否有必要在return localvar 中使用的时候,查看到了RVO和NRVO,因为std::move总是会调用移动构造函数所以会增加一次构造。关于RVO和NRVORVO (return value optimization) 和NRVO (named return value optimization) 是C++在处理 “返回一个class object的函数” 时常...
2018-02-25 16:24:24 1012 1
原创 gcc 内置函数-效率
在打印日志的时候,用到__FILE_,会显示绝对路径。使用strrchr()来单独分割出文件名。因为strrchr是gcc的内置函数。对于解析gcc的内置宏,完全可以在编译时期就生成结果。如果我们使用变量传入strrchr来处理就不会调用内置函数,而是当作普通的标准库函数使用,必然影响效率class SourceFile { public: template<int...
2018-02-24 18:25:10 557
转载 gdb 调试入门-bcc&perf-tools
bcc&perf-tools有空要研究一下这两个工具的使用方法没想到Brendan Gregg这样的大牛,会写出这样一篇gdb tutorials文章:gdb Debugging Full Example (Tutorial): ncurses 。但可能正如文章开头所说,大牛对网上的gdb文章都不太满意,所以才有了这篇高质量指南,gdb入门者的福音。—— 何登成如果你是系统管理员,但还不认...
2018-02-24 16:40:32 1601
转载 TCP协议的性能评测工具 — Tcpdive开源啦
Github地址:https://github.com/fastos/tcpdive 为什么要开发Tcpdive在过去的几年里,随着移动互联网的飞速发展,整个基础网络已经发生了翻天覆地的变化。 用户接入网络的方式,除了宽带和光纤之外,还有2G/3G/4G/WiFi,5G也已经在路上了。 作为使用范围最广的传输层协议,TCP诞生于固网时代,在设计之初并没有考虑到上述种种情况, 这导致了它在某些场景下...
2018-02-24 15:59:18 391
转载 系统级性能分析工具 — Perf
出处。 http://blog.csdn.net/zhangskd/article/details/37902159目录(?)[+]从2.6.31内核开始,linux内核自带了一个性能分析工具perf,能够进行函数级与指令级的热点查找。 perf Performance analysis tools for Linux.Performance counters for Linux are a ne...
2018-02-24 15:54:41 250
转载 Perf 简介 性能调试工具
Perf 简介Perf 是用来进行软件性能分析的工具。通过它,应用程序可以利用 PMU,tracepoint 和内核中的特殊计数器来进行性能统计。它不但可以分析指定应用程序的性能问题 (per thread),也可以用来分析内核的性能问题,当然也可以同时分析应用代码和内核,从而全面理解应用程序中的性能瓶颈。最初的时候,它叫做 Performance counter,在 2.6.31 中第一次亮相。...
2018-02-24 15:49:32 827
转载 服务端段错误
之所以有上篇文章,是因为那个方法就是我在解决这篇文章中的问题时使用的.为了避免篇幅过大,所以分成了两篇专栏.先说说这次崩溃吧,第一次崩溃是晚上7点多,运营同学发来了bt(gdb命令,就是backtrace stack),如下图:看见这种调用栈我的第一想法就是栈越界了,栈越界我一点都不担心,比什么野指针写坏堆好解决多了,因为离"犯罪现场"近啊.上一篇专栏里说过,无法回溯调用栈有可能是"调用栈链表头"...
2018-02-24 15:27:45 646
转载 一种处理栈越界的方法
在linux下,栈越界写坏返回地址会导致调用栈无法回溯,这就导致我们直接使用bt没有办法查看崩溃时调用栈,今天我讲一下我最近研究出来的一种方法(虽然是原创,但可能互联网上早有人发布过此种方法,只不过我没有查到而已).废话少说,步入正题,首先我写了个简单的程序来构造一个栈溢出的情况,为了使效果更加明显,我使用了一些递归来增加调用栈的深度,代码如下:不要吐槽命名方式,我也知道很丑,栈都能越界的程序,一...
2018-02-24 15:26:44 827
转载 一次虐心的调试-dump分析的基本流程
同事客户端崩溃,索dmp,上windbg:0:000> .ecxreax=00000000 ebx=19eeddb0 ecx=19eeddb0 edx=2b7e011c esi=05beaf80 edi=0167d4c0 eip=004d7bd8 esp=0018f304 ebp=0018f310 iopl=0 nv up ei pl nz na po nccs=0023 ss=002b d...
2018-02-24 15:22:09 518
转载 SysAdmim 必备:系统性能大牛 Brendan Gregg 分享的 Linux 性能工具
Brendan Gregg 目前是 Netflix 的高级性能架构师 ,他在那里做大规模计算机性能设计、分析和调优。他是《Systems Performance》等技术书的作者,因在系统管理员方面的成绩,获得过 2013年 USENIX LISA 大奖。他之前是 SUN 公司是性能领头人和内核工程师,他在 SUN 开发过 ZFS L2ARC,研究存储和网络性能。他也发明和开发过一大波性能分析工具,...
2018-02-24 14:23:28 629
转载 linux 写时拷贝
string的写时拷贝:linux fork 时候的写时拷贝 :http://www.cnblogs.com/biyeymyhjob/archive/2012/07/20/2601655.html 方案三class String{ private: char* _str; int* _refCou
2018-02-06 14:18:24 275
转载 利用进程信息追查内存泄漏
一、问题现象Bigpipe是Baidu公司内部的分布式传输系统,其服务器模块Broker采用异步编程框架来实现,并大量使用了引用计数来管理对象资源的生命周期和释放时机。在对Broker模块进行压力测试过程中,发现Broker长时间运行后,内存占用逐步变大,出现了内存泄漏问题。二、初步分析针对近期Broker的升级改造点,确定Broker中可能出现内存泄漏的对象。Broker新增了监控功能,其中一项...
2018-02-06 14:14:54 1008
原创 gdb 调试无堆栈??---pthread_join coredump
1) 编译的时候添加编译选项-fstack-protector 和 -fstack-protector-all 这两个选项指示编译器开启栈保护,这样在栈乱序的第一时间可以dump出来现场。可加在Makefile里面, 顺便扯一句,Makefile这种东西对于搞开源软件的人,还真是得精通,我随便想写个Makefile玩着,突然感觉自己头脑一片空白。-fno-omit-frame-pointer 一个...
2018-02-06 14:13:14 2088
原创 linux程序内存信息pmap
pmaplddstace要熟悉的几个调试命令!两个查看内存的文件$ cat /proc/<pid>/stat | awk '{print $23 / 1024}'$ cat /proc/<pid>/status | grep -i vmsize其中,关于内存的是 VSZ 和 RSS 这两个概念man ps 看看它们的含义:rss RSS resident...
2018-02-05 10:41:26 335 1
转载 gdb调试宏、条件断点、命令行参数
gdb调试宏、条件断点、命令行参数例子:#include <stdlib.h>#include <stdio.h>#define MACRO1(x) (++(x))#define MACRO2(x) (MACRO1(x)+100)#define MACRO3(x) (MACRO2(x)+200)int main(void){ int a = 0; ...
2018-02-05 09:52:09 1832
转载 GDB 调试C++异常
调试C++异常的两种办法:1) 直接获取异常的相关调用函数,在相应函数处设置断点。2) 利用gdb的catch throw/catch。(程序执行后,方有效)(gdb) bt#0 0x0000003cf592e2ed in raise () from /lib64/tls/libc.so.6#1 0x0000003cf592fa3e in abort () from /lib64/tls/libc...
2018-02-05 09:36:11 2241
转载 gdb 栈破坏 寄存器
gdb调试秘籍(寄存器、栈)GDB的常用调试命令大家可以查阅gdb手册就可以快速的上手了,在这儿就不给大家分享了,需要的可以到GDB的官网去下载手册。这里重点分享下GDB调试中的一些寄存器和栈的相关知识用于解决下列gdb调试时的问题:优化的代码在printf或其它glibc函数处core没有检查返回值的函数调用异常导致的异常优化的代码的计算异常的中间过程分析栈溢出导致的core局部变量越界导致栈异...
2018-02-02 17:10:42 670
转载 losf 和strace 句柄泄漏
1. 确定哪个进程在泄漏, 可以用命令 lsof -n|awk '{print $2}'| sort | uniq -c | sort -nr | head ,这个命令找的是打开句柄数目最多的进程, 多敲入几次, 就知道是那个进程在增长了。 而且累积到一定阶段, 泄漏的进程打开的句柄数会增长。 此步骤可以找到泄漏的进程号xxx 2. 利用ps -aux | grep xxx...
2018-02-01 19:26:55 432
C++类型转换(char* string cstring unicode ansi )转换
2015-04-01
gn_project.zip
2019-12-06
lib-mp4v2_IOS_build.zip
2015-11-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人