- 博客(17)
- 资源 (1)
- 收藏
- 关注
转载 OOM原理分析
OOM原理分析 OOM全称是Out Of Memory,指的是kernel因分配不出内存而报的错误,同时会触发kernel调用OOM killer杀进程来解除这种状况。 OOM发生的条件一般有两个: 1. VM里面分配不出更多的page(注意linux kernel是延迟分配page策略,及用到的时候才alloc;所以malloc + memset才有效)。 2. 用户地址
2015-10-30 14:07:19 2227
转载 大型网站系统架构演化之路
大型网站系统架构演化之路 前言 一个成熟的大型网站(如淘宝、京东等)的系统架构并不是开始设计就具备完整的高性能、高可用、安全等特性,它总是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式、技术架构、设计思想也发生了很大的变化,就连技术人员也从几个人发展到一个部门甚至一条产品线。所以成熟的系统架构是随业务扩展而完善出来的,并不是一蹴而就;不同业务特征的系统,
2015-10-30 11:28:26 529
转载 浅析SkipList跳跃表原理及代码
浅析SkipList跳跃表原理及代码 SkipList在leveldb以及lucence中都广为使用,是比较高效的数据结构。由于它的代码以及原理实现的简单性,更为人们所接受。我们首先看看SkipList的定义,为什么叫跳跃表? “ Skip lists are data structures that use probabilistic balancing
2015-10-29 00:42:13 1190 1
原创 LevelDB整体架构分析
LevelDB整体架构分析 1. 整体架构 2. 简要分析 具体参见:http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.html
2015-10-25 15:09:24 1817
原创 LSM树设计思想以及存储模型
LSM树设计思想以及存储模型 一. LSM树的设计思想 1. 哈希存储系统 哈希表的持久化实现,支持增、删、改以及随机读取操作,但不支持顺序扫描,对应的存储系统为key-value存储系统。对于key-val...
2015-10-25 12:42:10 3438
原创 linux oprofile解析
linux oprofile解析 oprofile利用cpu硬件层面提供的性能计数器(performance counter),通过计数采样,帮助我们从进程、函数、代码层面找出占用cpu的"罪魁祸首"。下面我们通过实例,了解oprofile的具体使用方法。 常用命令 使用oprofile进行cpu使用情况检测,需要经过初始化、启动检测、导出检测数据、查看检测结果
2015-10-23 22:49:20 750
原创 让机器所有的cpu核打满
让机器所有的cpu核打满 下面的程序可以将一个机器所有的cpu核打满: #include #include #include #define __USE_GNU #include #include #include #include void thread_func(int n) { cpu_set_t mask; CPU_Z
2015-10-19 20:40:59 2805
原创 条件变量之倒计时(CountDownLatch)
条件变量之倒计时(CountDownLatch) 倒计时是一种常用且易用的同步手段,其用途是: 主线程发起多个多个子线程,等这些子线程各自都完成一定的任务之后,主线程才继续执行。通常用于主线程等待子线程完成初始化。 主线程发起多个子线程,子线程都等待主线程,主线程完成其他一些任务之后通知所有子线程开始执行。通常用于多个子线程等待主线程发出“起跑”命令。
2015-10-18 18:39:04 850
原创 Linux IO协议栈框图
Linux IO协议栈框图 来源 http://www.thomas-krenn.com/en/oss/linux-io-stack-diagram/linux-io-stack-diagram_v0.1.pdf
2015-10-17 23:37:27 3389
转载 blktrace 深度了解linux系统的IO运作
blktrace 深度了解linux系统的IO运作 我们在Linux上总是要保存数据的,数据要么保存在文件系统里(如ext3),要么就在裸设备里面。我们在使用这些数据的时候都是通过文件这个抽象来访问的,操作系统会把我们需要的数据给我们,我们通常无需和块设备打交道。 从下图我们可以很清楚的看到:
2015-10-17 22:54:11 1053
转载 频繁分配释放内存导致的性能问题的分析
频繁分配释放内存导致的性能问题的分析 现象 1 压力测试过程中,发现被测对象性能不够理想,具体表现为: 进程的系统态CPU消耗20,用户态CPU消耗10,系统idle大约70 2 用ps -o majflt,minflt -C program命令查看,发现majflt每秒增量为0,而minflt每秒增量大于10000。 初步分析 majflt代表ma
2015-10-17 00:20:25 1318
原创 ptmalloc分析之基础二
ptmalloc分析之基础二 内存管理器为什么难写?在设计内存管理算法时,要考虑什么因素?管理内存这是内存管理器的功能需求。正如设计其它软件一样,质量需求一样占有重要的地位。分析内存管理算法之前,我们先看看对内存管理算法的质量需求有哪些: 1. 最大化兼容性 要实现内存管理器时,先要定义出分配器的接口函数。接口函数没有必要标新立异,而是要遵循现有标
2015-10-16 00:35:54 829
原创 ptmalloc分析之基础一
ptmalloc分析之一 一. 内存布局 下面给出32位模式下进程默认内存布局: 从上图可以看到,栈至顶向下扩展,并且栈是有界的。堆至底向上扩展,mmap 映射区域至顶向下扩展,mmap 映射区域和堆相对扩展,直至耗尽虚拟地址空间中的剩余区域,这种结构便于 C 运行时库使用 mmap 映射区域和堆进行内存分配。上图的布局形式是在内核2.6.
2015-10-16 00:19:38 694
原创 libev ev_io源码分析
libev ev_io源码分析 1. ev_watcher和ev_loop ev_watcher: libev中所有事件的基础类型ev_watcher,所有的事件都可以通过(W)watcher转换成ev_watcher,大写的W在libev定义的是ev_watcher *。抽象出ev_watcher作用是所有的watcher都可以共用ev_start、ev_stop函
2015-10-14 22:42:38 1682
原创 Libev源码分析—常用watcher
Libev源码分析—常用watcher 在上一篇文章里,我们分析了libev整体设计思想和主循环的工作原理,也提到了watcher是衔接开发者代码的主要入口。watcher与开发者最接近,也与具体事件处理逻辑最接近。所以,watcher的具体实现,与性能的关系也相当密切。下面,我们就来分析一下,libev中常用的几种watcher的设计与实现。 ev_io ev_io
2015-10-14 22:07:07 1509
原创 如何将GDB中需要的调试信息输出到文件
如何将GDB中需要的调试信息输出到文件 # (gdb) set logging file # (gdb) set logging on # (gdb) thread apply all bt # (gdb) set logging off # (gdb) quit 详细说明: 1、# (gdb) set logging file 设置输出的文件名称
2015-10-08 21:10:05 4783
原创 深刻认识CGI
深刻认识CGI 1. cgi是什么 最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html。事物总是不断发展,网站也越来越复杂,所以出现动态技术。但是服务器并不能直接运行 php,asp这样的文件,自己不能做,外包给别人吧,但是要与第三做个约定,我给你什么,然后你给我什么,就是握把请求参数发送给
2015-10-08 16:20:10 2017
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人