Unix 编程
文章平均质量分 88
arrow_pig
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Watch in DGB
Posted on三月 18, 2009byarrowpig1979<br /><br />有没有这样的经历,程序崩溃或者running abnormal, 经过一番调查,发现是某个变量被意外的改动了,但是到底是什么地方意外修改了我的数据呢?一般我们可以采用2分法逐步缩小怀疑对象的范围,可问题是很多“坏人”不是那么容易发现的。比如你看:<br /> <br /> class arrowpig<br />{<br /> private: <br /> char* m_pText原创 2011-01-07 16:30:00 · 745 阅读 · 0 评论 -
汇编级Call Stack的构成
Posted on十一月 13, 2008byarrowpig1979<br />为什么要学习这么底层的东西,因为能帮助我们分析core文件,从而定位production上的问题。往往我们production或者QA的机器上没有安装GDB,也没有源代码。学会一点基本的汇编知识配合mdb就能帮上大忙。<br /> <br /> <br />先看一个core stack:<br />-bash-3.00$ g++ -o Test Test.cpp<br />-bash-3.00$ ./Test<br />原创 2011-01-07 16:36:00 · 1080 阅读 · 0 评论 -
Solaris Slab Allocator–Magazines[3]
Posted on十一月 4, 2008byarrowpig1979<br />Object Construction<br />经典的slab allocator在slab创建的时候给slab中的每个object应用constructor。这样当从slab中申请object的时候,拿到的object都是初始化好的。但是我们看这样一个极端的情况:假设每个object是8个字节大小,如果一个slab含有一个8K的页面,那一个slab可以容纳1024个object,如果该object的构造函数中为每个obj原创 2011-01-07 16:40:00 · 812 阅读 · 0 评论 -
Solaris Slab Allocator–Magazines[4]
Posted on十一月 4, 2008byarrowpig1979<br />Dynamic Magazine Resizing<br />现在来讨论一下,magazine中的rounds M是如何确定的。M越大,cache命中率越高,但是内存消耗越大。solaris使用的是自适应的方法:给M设定一个比较小的初始值,depot layer中维护一个变量contention_rate表示cache miss的程度 每次试图访问depot的时候,注意depot是所有的CPU共享的,我们先试图加一个no原创 2011-01-07 16:40:00 · 660 阅读 · 0 评论 -
C++运行库版本问题
Posted on十二月 10, 2008byarrowpig1979<br />问题描述:编译时没有问题,成功编译目标文件arrowpig 程序启动时,系统报错:<br />ld.so.1: arrowpig: fatal: relocation error: file /view/jianxu1_arrowpig/vobs/Voyager/framework/arrowpig: symbol _ZNSs4_Rep26_M_set_length_and_sharableEj: referenc原创 2011-01-07 16:32:00 · 1486 阅读 · 0 评论 -
Solaris下如何检测‘资源竞争
Posted on十二月 1, 2008byarrowpig1979<br />我们有一个application运行时的速度离我们的预期有距离。在多线程的高并发应用程序中,我们可能怀疑是由于资源竞争导致过多的“等待”。<br /> <br />-bash-3.00$ prstat -mp 21746<br />PID USERNAME USR SYS TRP TFL DFL LCK SLP LAT VCX ICX SCL SIG PROCESS/NLWP<br />21746 arrow原创 2011-01-07 16:34:00 · 877 阅读 · 0 评论 -
Solaris Slab Allocator –Magazines[1]
<br />Overview<br />经典的slab allocator算法在多CPU系统中scalability不是很好,因为它的slab list是一个全局结构,分配和释放的时候需要一个global lock来保护list数据,这样等于线性化了所有分配操作。为了弥补这个不足,Solaris提出了per-CPU cache的策略。基本思想就是为每个CPU维护一个可以容纳M个Object的Cache, 学名叫作Magazine, Magazine除了杂志的意思外,还有一个意思是‘弹药库’。原创 2011-01-07 16:38:00 · 1253 阅读 · 0 评论 -
Solaris Slab Allocator–Magazines[2]
Posted on十一月 3, 2008byarrowpig1979<br />Thrashing<br />Wikipedia上的解释:Thrash(computer_science) 。我在这里就暂时叫做"抖动"吧。<br />首先从我的理解说一下为什么在CPU Layer和Slab Layer之间要有一个Depot Layer。从slab layer拿到的是slab, slab layer和cpu layer都没有把slab切分成magazine的逻辑。还有一点就是我们知道cpu la原创 2011-01-07 16:39:00 · 740 阅读 · 0 评论 -
如何判断程序处于I/O等待
<br /> <br />现象:<br />程序启动后正常运行,使用prstat -p <PID>看到内存在逐步增加。使用tail -f <logfile>看到不停的有log输出。突然在log打印一条SQL被送往DB Server以后,程序似乎停下来了。没有报错,没有core dump。 <br /> <br /> <br />诊断:<br />程序PID=6208。要求MIT做pfile,pstack,pflags。XuXu帮助我将现场保存到/var/tmp下 <br /> <br /原创 2011-01-07 16:57:00 · 1397 阅读 · 0 评论 -
TCP Echo Server(select)
<br />到现在,我Unix,数据库的扫盲基本完成了,就差网络这一块了。从今天开始网络扫盲。上周五开始看HTTPD的实现,我们的httpd是AA(AA是我们SBE的元老之一)开发的,只要是AA开发的东西,学习一遍都很有收获。因为AA是一位非常优秀的架构师,而且自己写过很多代码。<br />上周五开林和徐辰已经跟我讲过一篇大概的流程了,可我直接看代码还是有点吃力。于是我下载了<Unix Network Programming– Volume1: The Sockets Networking API>,原创 2011-01-07 17:24:00 · 1414 阅读 · 0 评论
分享