自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 博客关而复开

前段时间密码泄露,账户丢了。导致自己博客连绵很多非法的盗链,但是自己比较懒,今天才发现博客被封禁了。联系客服,还好咱们csdn的客服还是很赞的,很热心的帮忙清理了博客解封博客。非常感谢!接下来的一年,要多积累了。博客荒芜的不行了。。。

2015-02-16 16:46:26 768 1

转载 定制mapreduce输出

这里以redis数据库为例。这里的例子是,我想统计日志文件中的某天各个小时的访问量,日志格式为:?12014-02-1004:52:34127.0.0.1xxx我们知道在写mapreduce job时,要配置输入输出,然后编写mapper和reducer类,hadoop默

2014-11-02 14:22:24 687

转载 hbase MapReduce程序样例入门

1、先看一个标准的hbase作为数据读取源和输出源的样例:View Code JAVA12345678Configuration conf = HBaseConfiguration.create();Job job = new Job(conf, "job name ");job.setJarByClass(test.class)

2014-11-02 13:43:07 556

转载 Sendfile Linux 系统中的零拷贝

如今几乎每个人都听说过Linux中所谓的"零拷贝"特性,然而我经常碰到没有充分理解这个问题的人们。因此,我决定写一些文章略微深入的讲述这个问题,希望能将这个有用的特性解释清楚。在本文中,将从用户空间应用程序的角度来阐述这个问题,因此有意忽略了复杂的内核实现。什么是”零拷贝”为了更好的理解问题的解决法,我们首先需要理解问题本身。首先我们以一个网络服务守护进程为例,考虑它在将存储在文件

2014-09-30 15:30:06 884

转载 SkipList

SkipList是链表的一种,是有序单向链表的一种改进,使用跳表可以将查询操作的复杂度控制到O(lg n),而普通的链表只能通过顺序查找,复杂度为O(n),如此跳表的优势就很明显了,虽然它是通过以空间换时间搞定的。它实现起来简单,而且查找效率高,因此被一些数据库应用采纳为底层的数据结构,比如leveldb,redis等。redis里面的sorted set就是使用skiplist作

2014-09-14 15:49:53 991

转载 Linux协议栈accept和syn队列问题

环境:       Client 通过tcp 连接server,server端只是listen,但是不调用accept。通过netstat –ant查看两端的连接情况。server端listen,不调用accept。client一直去connect server。问题:运行一段时间后,为什么server端的ESTABLISHED连接的个数基本是固定的12

2014-08-23 20:38:32 917

转载 SQL常见的可优化点

###################################################   # 索引相关   # ###################################################   1. 查询(或更新,删除,可以转换为查询)没有用到索引   这是最基础的步骤,需要对sql执行explain查看执行计划中是否用到

2014-08-23 20:15:08 441

转载 cache 缓存算法

LRU(Least Recent Used)是我们在cache替换算法中最普遍使用的算法,在缓存块已满,而需要缓存新的数据块的时候,这时需要从缓存中找到一个“没有价值”的块用新的数据块去替换它。Cache有两个问题:一个是前面提到的降低锁粒度,另一个是提高精准度,或者称为提高命中率。LRU在大多数情况下表现是不错的,但是有如下的问题:1, 顺序扫描。顺序扫描的情况下LRU没

2014-08-23 19:41:20 1609

转载 将登博整理的较好的博客拿来,留个底

前段时间,我在微博上分享了自己订阅的博客Feeds,一共有200个左右,内容覆盖多个领域,包括有:Database(MySQL、Oracle、PostgreSQL),Programming,Distributed Systems,Systems 等。俗话说,过犹不及,太多的选择,往往意味着没有选择。在过去的几年,对于自己订阅的所有博客,我基本上做到每天都看,因此对每个博客的内容有了一定的了解。本文

2014-08-11 18:08:10 702

转载 C/C++ Volatile关键词深度剖析

背景前几天,发了一条如下的微博 (关于C/C++ Volatile关键词的使用建议):此微博,引发了朋友们的大量讨论:赞同者有之;批评者有之;当然,更多的朋友,是希望我能更详细的解读C/C++ Volatile关键词,来佐证我的微博观点。而这,正是我写这篇博文的初衷:本文,将详细分析C/C++ Volatile关键词的功能 (有多种功能)、Volatile关键词在多线程

2014-08-11 17:12:39 504

转载 tcp 连接关闭详解

注:tcp关闭连接不区分客户端和服务端,哪一端口可以主动发起关闭连接请求。所以为了描述方便,描述中的“主动方”表示主动发起关闭连接一方,“被动方”表示被动关闭连接一方。1. tcp关闭连接状态转换 上图是tcp连接主动关闭端的状态转换图:(1)应用层调用close函数发起关闭连接请求(2)发送FIN到对端,关闭写通道,自己进入FIN_WAIT1状

2014-07-13 16:48:51 1089

转载 从TCP协议的原理来谈谈rst复位攻击

在谈RST攻击前,必须先了解TCP:如何通过三次握手建立TCP连接、四次握手怎样把全双工的连接关闭掉、滑动窗口是怎么传输数据的、TCP的flag标志位里RST在哪些情况下出现。下面我会画一些尽量简化的图来表达清楚上述几点,之后再了解下RST攻击是怎么回事。1、TCP是什么?TCP是在IP网络层之上的传输层协议,用于提供port到port面向连接的可靠的字节流传输。我来用土语解释下上

2014-03-04 08:44:29 583

转载 linux c 进程跟踪工具:strace、ltrace、truss

strace命令详解strace 命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用。  strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。  下面记录几个常用 option .  1 -f -F选项告诉strace同时跟踪fork和vfork出来的进程  2 -o xxx.txt 输出到某个文

2014-02-28 15:56:17 1036

转载 高性能网络编程七--tcp连接的内存使用

当服务器的并发TCP连接数以十万计时,我们就会对一个TCP连接在操作系统内核上消耗的内存多少感兴趣。socket编程方法提供了SO_SNDBUF、SO_RCVBUF这样的接口来设置连接的读写缓存,linux上还提供了以下系统级的配置来整体设置服务器上的TCP内存使用,但这些配置看名字却有些互相冲突、概念模糊的感觉,如下(sysctl -a命令可以查看这些配置):[cpp]

2014-02-19 11:44:52 796

转载 python 自动补全

1. 设置"PYTHONSTARTUP"环境变量 root@localhost:~$ cat .bashrc ...# setting python env PYTHONSTARTUP='/root/.pythonstartup'export PYTHONSTARTUP2. 添加.pythonstartup文件

2014-02-17 21:23:53 887

转载 网络编程中重要函数总结:如何判断socket关闭

1、阻塞模式与非阻塞模式下recv的返回值各代表什么意思?有没有区别?(就我目前了解阻塞与非阻塞recv返回值没有区分,都是 0接收到数据大小,特别:返回值 2、阻塞模式与非阻塞模式下write的返回值各代表什么意思?有没有区别?(就我目前了解阻塞与非阻塞write返回值没有区分,都是 0发送数据大小,特别:返回值 3、阻塞模式下read返回值 非阻塞模式下read返回值 0表示接收

2014-02-11 11:15:41 3853

转载 位运算总结及应用

一、C语言的六种位运算符:& 按位与| 按位或^ 按位异或~ 取反左移>> 右移 1.   按位与运算按位与运算符"&"是双目运算符。        其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。例如:9&5可写算式如下: 00001001 (9的二进制补码)&0000010

2014-01-17 12:12:32 638

转载 高性能网络编程六--reactor反应堆与定时器管理

反应堆开发模型被绝大多数高性能服务器所选择,上一篇所介绍的IO多路复用是它的实现基础。定时触发功能通常是服务器必备组件,反应堆模型往往还不得不将定时器的管理囊括在内。本篇将介绍反应堆模型的特点和用法。首先我们要谈谈,网络编程界为什么需要反应堆?有了IO复用,有了epoll,我们已经可以使服务器并发几十万连接的同时,维持高TPS了,难道这还不够吗?我的答案是,技术层面足够了,但在软件

2013-12-26 18:24:56 702

转载 高性能网络编程五--IO复用与并发编程

对于服务器的并发处理能力,我们需要的是:每一毫秒服务器都能及时处理这一毫秒内收到的数百个不同TCP连接上的报文,与此同时,可能服务器上还有数以十万计的最近几秒没有收发任何报文的相对不活跃连接。同时处理多个并行发生事件的连接,简称为并发;同时处理万计、十万计的连接,则是高并发。服务器的并发编程所追求的就是处理的并发连接数目无限大,同时维持着高效率使用CPU等资源,直至物理资源首先耗尽。并

2013-12-12 09:00:50 896

转载 linux shell 将多行文件转换为一行

说实话,虽然对shell编程包括awk有所了解,但是对sed的多行与一行的处理还是不甚理解,在网上搜罗了一篇文章觉得还不错,记录一下:  今天一个工程师问我,怎么将一个文件中的多行转换成一行。      我给出了如下三种方法:      1. 采用awk      awk BEGIN{RS=EOF}'{gsub(/\n/," ");print}' f

2013-12-11 16:27:06 59039 1

转载 Raw Socket和Socket编程

1.原始套接字(raw socket)  1.1 原始套接字工作原理与规则         原始套接字是一个特殊的套接字类型,它的创建方式跟TCP/UDP创建方法几乎是一摸一样,例如,通过CODE:[Copy to clipboard]       int sockfd;       sockfd = socktet(AF_INET, SOCK_

2013-12-11 09:33:42 6689

转载 Linux 的多线程编程的高效开发经验

背景Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多线程 API 有一些细微和隐晦的差别。不注意这些 Linux 上的一些开发陷阱,常常会导致程序问题不穷,死锁不断。本文中我们从 5 个方面总结出 Linux 多线程编程上的问题,并分别引出相关改善的开发经验,用以避免这些的陷阱。我们希望这些经验可以帮助读者们能更好更快的熟悉 Linux 平台的多线程编程。

2013-11-21 11:14:42 801

原创 Memcached 学习的感想

很早就想看看memcached的源代码,比较关系其多线程处理模型、内存管理机制。由于各种原因,都没有实施。今天抽时间看了一下,主要是看了多线程模型部分。觉得有两篇博客介绍还是比较全面的,对于学习还是很有帮助的。Memcached源码分析(线程模型): 讲的比较全面,但是感觉贴的代码有点多(数据结构的代码)。memcache 线程模型。总体下来觉得:1. 基于libevent 实

2013-11-16 17:43:10 602

转载 内存管理机制

为什么必须管理内存内存管理是计算机编程最为基本的领域之一。在很多脚本语言中,您不必担心内存是如何管理的,这并不能使得内存管理的重要性有一点点降低。对实际编程来说,理解您的内存管理器的能力与 局限性至关重要。在大部分系统语言中,比如 C 和 C++,您必须进行内存管理。本文将介绍手工的、 半手工的以及自动的内存管理实践的基本概念。追溯到在 Apple II 上进行汇编语言编程的时代,

2013-11-12 09:37:10 778

转载 高性能网络编程(四)---- tcp 连接的关闭

TCP连接的关闭有两个方法close和shutdown,这篇文章将尽量精简的说明它们分别做了些什么。为方便阅读,我们可以带着以下5个问题来阅读本文:1、当socket被多进程或者多线程共享时,关闭连接时有何区别?2、关连接时,若连接上有来自对端的还未处理的消息,会怎么处理?3、关连接时,若连接上有本进程待发送却未来得及发送出的消息,又会怎么处理?4、so_linger这个功能的

2013-11-06 14:56:06 733

转载 __attribute__机制介绍

1. __attribute__ GNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)__attribute__前后都有两个下划线,并且后面会紧跟一对原括弧,括弧里面是相应的__attrib

2013-10-31 18:39:52 424

转载 c++ 项目中的extern c

引言在用C++的项目源码中,经常会不可避免的会看到下面的代码:?123456789#ifdef __cplusplusextern"C" { #endif   /*...*/  #ifdef __cplusplus} #endif它到底

2013-10-22 11:23:17 572

转载 extern 关键字详解

基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。      也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是

2013-10-22 11:22:46 616

转载 MongoDB 连接数高产生原因及解决

MongoDB Sharding架构下连接数很容易达到很高,这里连接数分为几个概念:tcp 连接数 netstat可以统计的,一般这个是最高.如果mongod/mongos在同一台服务器,更明显。参考命令:netstat -ant|awk '{print $5}' |awk -F: '{print $1}'|sort |uniq -c|sort -rnmongos/mongod 连接数

2013-10-11 09:33:13 20256

转载 kmemcache源码浅析

简介   kmemcache是memcache的linux内核移植版, 这两天断断续续的看了其网络方面的实现.   简单来说, kmemcache不落窠臼, 摈弃了epoll通知机制. 它借助skb的回调函数, 实现packet级别的调度. 在网路模型上, kmemcache分为一个dispatcher和多个workers(均为workqueue线程). dispatcher服务于TCP和

2013-09-25 09:27:37 799

转载 深入理解Linux用户空间的锁机制

1.         缘起     随着SMP(Symmetrical Multi-Processing)架构的流行和epoll类系统调用对非阻塞fd监视的支持,高性能服务器端的开发已经能够实现CPU计算和IO的分离。为了充分发挥CPU的计算能力,服务器端的设计必须要尽量减少线程切换。引起线程切换最重要的原因之一就是对mutex和semaphor等锁的使用。本文从计算机体系架构、操作系统的

2013-09-21 21:05:33 2096

转载 高性能网络编程(三)----TCP消息的接收

这篇文章将试图说明应用程序如何接收网络上发送过来的TCP消息流,由于篇幅所限,暂时忽略ACK报文的回复和接收窗口的滑动。为了快速掌握本文所要表达的思想,我们可以带着以下问题阅读:1、应用程序调用read、recv等方法时,socket套接字可以设置为阻塞或者非阻塞,这两种方式是如何工作的?2、若socket为默认的阻塞套接字,此时recv方法传入的len参数,是表示必须超时(SO_RC

2013-09-02 09:21:59 1023

转载 高性能网络编程(二)----TCP消息的发送

在上一篇中,我们已经建立好的TCP连接,对应着操作系统分配的1个套接字。操作TCP协议发送数据时,面对的是数据流。通常调用诸如send或者write方法来发送数据到另一台主机,那么,调用这样的方法时,在操作系统内核中发生了什么事情呢?我们带着以下3个问题来细细分析:发送方法成功返回时,能保证TCP另一端的主机接收到吗?能保证数据已经发送到网络上了吗?套接字为阻塞或者非阻塞时,发送方法做的事情有何不

2013-09-01 11:11:04 1276

转载 高性能网络编程(一)----accept建立连接

最近在部门内做了个高性能网络编程的培训,近日整理了下PPT,欲写成一系列文章从应用角度谈谈它。编写服务器时,许多程序员习惯于使用高层次的组件、中间件(例如OO(面向对象)层层封装过的开源组件),相比于服务器的运行效率而言,他们更关注程序开发的效率,追求更快的完成项目功能点、希望应用代码完全不关心通讯细节。他们更喜欢在OO世界里,去实现某个接口、实现这个组件预定义的各种模式、设置组件参数来达到目

2013-09-01 10:42:50 792

转载 Linux中的同步机制 -- Futex

Linux中的同步机制(一)--Futex引子在编译2.6内核的时候,你会在编译选项中看到[*] Enable futex support这一项,上网查,有的资料会告诉你"不选这个内核不一定能正确的运行使用glibc的程序",那futex是什么?和glibc又有什么关系呢?1. 什么是FutexFutex 是Fast Userspace muTexes的缩写,由Hubertus F

2013-08-29 09:17:18 541

转载 Perf -- Linux下的系统性能调优工具,第 2 部分

本文内容简介之前介绍了 perf 最常见的一些用法,关注于 Linux 系统上应用程序的调优。现在让我们把目光转移到内核以及其他 perf 命令上面来。在内核方面,人们的兴趣五花八门,有些内核开发人员热衷于寻找整个内核中的热点代码;另一些则只关注某一个主题,比如 slab 分配器,对于其余部分则不感兴趣。对这些人而言,perf 的一些奇怪用法更受欢迎。当然,诸如 perf top,

2013-08-27 10:36:04 1032

转载 Perf -- Linux下的系统性能调优工具,第 1 部分

Perf 简介Perf 是用来进行软件性能分析的工具。通过它,应用程序可以利用 PMU,tracepoint 和内核中的特殊计数器来进行性能统计。它不但可以分析指定应用程序的性能问题 (per thread),也可以用来分析内核的性能问题,当然也可以同时分析应用代码和内核,从而全面理解应用程序中的性能瓶颈。最初的时候,它叫做 Performance counter,在 2.

2013-08-27 10:32:44 865

转载 TCP协议疑难问题讲解

说明:1).本文以TCP的发展历程解析容易引起混淆,误会的方方面面2).本文不会贴大量的源码,大多数是以文字形式描述,我相信文字看起来是要比代码更轻松的3).针对对象:对TCP已经有了全面了解的人。因为本文不会解析TCP头里面的每一个字段或者3次握手的细节,也不会解释慢启动和快速重传的定义4).除了《TCP/IP详解》(卷一,卷二)以及《Unix网络编程》以及Linux源代码之外,

2013-08-24 11:05:19 866

转载 ISTQB AL高级认证系列01:ISTQB AL-TM测试经理学习目标

ISTQB AL-TM(ISTQB高级测试经理模块)主要是针对测试管理人员设立的知识和实践。学习完ISTQB AL-TM模块之后,测试经理应能负责完成下列工作:(1)        定义被测系统的总体测试目标和测试策略。(2)        计划任务、进度控制和任务追踪。(3)        描述和组织必要的活动。(4)        选择、获取、分派任务所需的足够资源。(5)

2013-08-22 20:47:58 807

转载 linux网络编程之socket(十):shutdown 与 close 函数 的区别

假设server和client 已经建立了连接,server调用了close, 发送FIN 段给client(其实不一定会发送FIN段,后面再说),此时server不能再通过socket发送和接收数据,此时client调用read,如果接收到FIN 段会返回0,但client此时还是可以write 给server的,write调用只负责把数据交给TCP发送缓冲区就可以成功返回了,所以不会出

2013-08-22 19:03:07 4311

提示
确定要删除当前文章?
取消 删除