自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(113)
  • 收藏
  • 关注

原创 关于TCP连接极端异常情况的处理方法的思考

这里说的极端异常情况,不是对方(服务器或者客户端)一般的异常情况,即引用该TCP连接的进程异常退出而由OS直接发出FIN或者RST包,从而关闭这个连接。这样本方会受到SOCKET_ERR返回,或者len=0的数据。这里说的极端情况是对方主机或者网络设备突然断电造成的连接直接中断。对方没有任何机会发送报文来通知本方。这样的情况下,本方的TCP连接不会上报任何错误,而是认为对方

2017-06-11 21:37:21 923 1

转载 pthread多线程同步大全

线程的最大特点是资源的共享性,但资源共享中的同步问题是多线程编程的难点。Linux下提供了多种方式来处理线程同步,最常用的是互斥锁、条件变量和信号量。1)互斥锁(mutex)    通过锁机制实现线程间的同步。同一时刻只允许一个线程执行一个关键部分的代码。int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_

2017-04-23 21:38:14 670

转载 fastsocket优化网络性能原理

fastsocket是一个fastos的一个网络方面的优化,由新浪开源。fastsocket主要优化内核中的accept因为锁而导致的串行,对于短连接会极大的提高其性能,cpu核越多性能提升越明显。基于内核模块和一个动态链接库,对于某些应用程序不需修改就可使用。但是并非所有应用都能通过fastsocket获得性能提升。 fastsocket比较适用于一下场景:Ø  系统至少不少于8个cpu

2017-04-12 10:39:10 685

转载 高性能的内核 Socket 实现 Fastsocket

2014年10月18日,当时就职于新浪操作系统团队的林晓峰在Github上开源了名为Fastsocket的项目,并在之后一天的中国Linux内核开发者大会上对该项目的原理和应用效果进行了介绍(演讲slides在此)。根据Github官网的介绍,Fastsocket是:高度可扩展的socket是Linux内核层面的底层网络实现在多核机器上可实现极佳性能,24核以内的性能增长呈线性

2017-04-01 18:01:22 891

转载 intel DPDK简介

DPDK是什么Intel® DPDK全称Intel Data Plane Development Kit,是intel提供的数据平面开发工具集,为Intel architecture(IA)处理器架构下用户空间高效的数据包处理提供库函数和驱动的支持,它不同于Linux系统以通用性设计为目的,而是专注于网络应用中数据包的高性能处理。具体体现在DPDK应用程序是运行在用户空间上利用自身提供的数

2017-04-01 18:00:42 4797

转载 Linux的RCU锁机制

看了一堆RCU的文档,总结一下,这玩意儿实际编程用得不多,权当自娱自乐https://www.ibm.com/developerworks/cn/linux/l-rcu/LDD3rd中 Linux同步机制 章节有对RCU比较透彻的介绍http://hi.baidu.com/j_fo/blog/item/6e7f74c60711381d9c163df2.h

2017-04-01 17:54:17 460

原创 关于send和sendto阻塞和非阻塞模式的底层细节

在套接口编程中,负责发送数据的是send或者sendto,调用这2个函数必然要把发送数据的基地址的指针传递进去,由于一般使用的是阻塞或者异步通知的I/O模型,没有太注意这个指针指向的内存的是否必须是堆内存,最近在回看以前一个项目的时候才发现,使用的是异步的WSASendTo,而发送数据的指针指向的则是一个函数的临时char数组,如果wsasendto在返回之后再执行数据拷贝,而这个操作在用户层的函

2017-03-28 20:58:26 8771

原创 nginx中的阻塞和非阻塞设置

纵然对于select,epoll这2个模型,既可以使用阻塞模式的socket api也可以使用非阻塞的但是,在这2个模型的消息通知可以防止accetp,recv在阻塞模式下的进入阻塞状态,但却不能防止NGINX主动发出的connect和send进入阻塞状态特别是NGINX是但线程模型,任何调用的阻塞状态都会造成整个线程阻塞甚至进入进入挂起状态,这对NGINX来说是完全不能接受的

2017-03-27 20:58:43 3372

原创 chromium最新代码的获取和编译方法

chromium的代码管理已经全面转向git,并且对VS工程来说,也用新的方法来生产工程文件,很早前写过一遍的文章,现在看来需要重新书写了首先是获取最新的depot_tools:直接用git clone就行,比以前方便点,前提是你的系统必须安装git,在linux或者win下执行同样的命令行:git clone https://chromium.googlesource.com/chr

2017-03-20 10:19:12 852

转载 codis2.0的文档

Codis 使用文档Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接

2017-01-18 18:32:24 647

转载 TCP连接的状态详解以及故障排查

我们通过了解TCP各个状态,可以排除和定位网络或系统故障时大有帮助。(总结网络上的内容)1、TCP状态linux查看tcp的状态命令:1)、netstat -nat  查看TCP各个状态的数量2)、lsof  -i:port  可以检测到打开套接字的状况3)、  sar -n SOCK 查看tcp创建的连接数4)、tcpdump -iany

2016-10-28 17:37:31 794

原创 linux及win系统关于阻塞,非阻塞,同步I/O,异步I/O概念的统一解析

对于

2016-10-26 17:09:45 454

原创 location的配置过程以及http流程中的使用情况

先看看ngx_http_init_listening,在系列文章中已经提到过这个函数,他的第三个参数port是一个结构体,定义如下typedef struct {    ngx_int_t                  family;    in_port_t                  port;    ngx_array_t                addrs;

2016-09-22 16:54:00 1154

原创 Nginx源代码分析之HTTP2.0(二十)

http/2在谷歌的推动下几乎就是spdy的升级,nginx目前已经加入了http2的代码,结构跟spdy有一定相似度。其入口函数是ngx_http_v2_init

2016-09-13 17:53:02 1799

原创 Nginx源代码分析之accept细节(十九)

现在单独说说accept中与一些具体I/O模型相关的细节。        其实前面已经提过这个问题,这一系列I/O模型中最大差别是iocp,我们前面也说了,linux的几个模型,不管是select,epoll,kqueue,其实都是基于异步通知的,也就是说系统只关心哪个socket有接受和发送完成的消息,然后设置一定的标志,当某个work线程调用select,epoll_wait,kevent

2016-09-09 17:37:52 1818

转载 Nginx源代码分析之锁的实现(十八)

转载一篇nginx锁的细节的文章 http://wang.peng.1123.blog.163.com/blog/static/129821112201381311441180/ Nginx中的锁是自己实现的,分为两种,一种是支持原子实现的原子锁,另外一种是文件锁。本文我们重点介绍原子锁的实现。       我们可以看到在线程中实现锁就是通过一个共享的堆上的内存(通过mal

2016-09-06 09:43:05 1159

原创 Nginx源代码分析之群惊问题(十七)

接上一节,在accept初始化的时候有一个ngx_use_accept_mutex变量,这是用来解决当多个进程在一个套接口上同时调用accept引起的群惊问题的。

2016-09-01 17:26:53 975

原创 Nginx源代码分析之accept(十六)

accpet 的初始化和调用可以从work进程的启动开始讲起在unix系平台上,work进程的主函数是ngx_worker_process_cyclengx_worker_process_cycle首先会执行进程初始化动作,调用的是ngx_worker_process_init,这个函数会执行一些初始化进程环境变量,信号的任务在前面章节已经介绍过,到某一步会调用ngx_ev

2016-09-01 15:05:29 846

原创 Nginx源代码分析之spdy(十五)

nginx作为服务端,在建立socket并listen之后,会设置accept返回的异步回调,代码在ngx_http_add_listening中: ls->handler = ngx_http_init_connection;在ngx_event_accept.c的ngx_event_accept函数中会执行这个回调,再来看看ngx_http_init_connection,

2016-08-30 18:02:32 880

原创 Nginx源代码分析之HTTP请求响应基本流程(十四)

HTTP的处理请求流程我们从ngx_http_init_connection开始论述里面注册了一个处理函数rev->handler = ngx_http_wait_request_handler;ngx_http_wait_request_handler的参数是ngx_event_t rev,一旦有请求到达,数据已经被复制到rev->data中,这时会调用ngx_http_proc

2016-08-29 14:45:18 4055

原创 linux下在应用层打印调用堆栈

如下函数可以在任意函数中打印出当前的调用堆栈输出到标准输出设备,一般就是命令行了需要注意的是必须包含下面的标准库头文件#includevoid print_trace(void)  {      int i;      int MAX_CALLSTACK_DEPTH = 32;     void *traceback[MAX_CALLSTACK_DEPTH]

2016-08-11 11:03:49 3369

原创 Nginx源代码分析之反向代理(十三)

。。。

2016-08-09 13:45:34 3546

转载 Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)

互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的。现在核心业务抽取出来,作为独立的服务,使前端应用能更快速和稳定的响应。第一:介绍Dubbo背景    大规模服务化之前,应用可能只是通过RMI或Hessian等

2015-12-16 13:36:32 902

原创 linux平台几个压力,网络流量的工具

压力方面有perftop top -n 1流量方面有iotopiftopifstatnethogstrafshownloadiptrafntop

2015-12-10 10:26:27 846

原创 ubuntu下自动打开多终端的多个标签并执行不同脚本的方法

打开一个终端,执行gnome-terminal打开多个终端,多个标签,命令如下gnome-terminal --window --tab--tab 后面可跟执行参数,有几个--tab 就会打开几个标签打开一个终端,并打开多个标签的命令要实现打开标签并执行脚本,则要带上参数-x 或者-e-e 可以出现多次,如果在所有--window前面,表示对所有wi

2015-10-27 23:04:27 5781

原创 git 配置自动补全

1. 下载git-completion.bashgithub地址:https://github.com/markgandolfo/git-bash-completion.git然后执行cp目录把此文件拷贝的~/目录,也就是当前用户目录下然后vim 编辑~/目录下的.bashrc文件,这是每次打开新的终端窗口时自动执行的脚本文件在里面加入一行命

2015-10-27 19:31:44 2420

转载 epoll内核源代码剖析

epoll原理简介通过上面的分析,poll运行效率的两个瓶颈已经找出,现在的问题是怎么改进。首先,每次poll都要把1000个fd 拷入内核,太不科学了,内核干嘛不自己保存已经拷入的fd呢?答对了,epoll就是自己保存拷入的fd,它的API就已经说明了这一点——不是 epoll_wait的时候才传入fd,而是通过epoll_ctl把所有fd传入内核再一起"wait",这就省掉了不

2015-09-12 15:48:07 1306

转载 poll内核源代码剖析

poll和epoll的使用应该不用再多说了。当fd很多时,使用epoll比poll效率更高。我们通过内核源码分析来看看到底是为什么。poll剖析poll系统调用:int poll(struct pollfd *fds, nfds_t nfds, int timeout);内核2.6.9对应的实现代码为:[fs/select.c -->sys_poll]456 asmli

2015-09-12 15:44:16 691

原创 Nginx源代码分析之进程模型(十二)

,。。。

2015-08-07 12:48:40 510

原创 Nginx源代码分析之I/O细节(十一)

至于每个平台和模型里面具体I/O的细节,我们简单分析一下,先看看发送的具体实现,我们先以iocp模型来进行具体分析。在Upstream部分,最后提到真正的发送函数是一个send_chain指针,对于不同的系统,指向不同的调用函数,对于win平台,其指向的是ngx_overlapped_wsasend_chain,此函数比较负责,我们看看等同的调用ngx_overlapped_wsasend

2015-07-31 22:12:47 920

转载 docker的原理和类比

从虚拟化的种类和层级说起cpu虚拟化:可以模拟不同CPU,例如bochs完全虚拟化:只能模拟同样CPU,但是可以执行不同系统,例如vmware半虚拟化:guest必须打补丁,例如Xen硬件虚拟化:可以当作获得硬件加速的完全虚拟化系统虚拟化:host和guest共享一样的内核,例如Openvz语言沙盒:只能在语言的范围内使用虚拟化的级别越偏底层,速度越慢,用户越难察觉到虚拟化的存

2015-07-21 17:22:36 1035

转载 QT 的信号与槽机制介绍

QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象、易于扩展、真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT 库的基础之上。QT 支持下列平台:MS/WINDOWS-95、98、NT 和 2000;UNIX/X11-Linux、Sun Solaris、HP-UX、Digital Unix、IBM AIX、S

2015-07-21 16:09:58 576

原创 Nginx源代码分析之accept(十)

瞅瞅瞅

2015-07-20 12:42:51 528

原创 Nginx源代码分析之网络超时管理(九)

。。。

2015-07-20 12:38:40 1138

原创 Nginx源代码分析之upstream(八)

upstream 是从ngx_http_upstream_init开始的

2015-07-18 12:18:01 2896

原创 Nginx源代码分析之I/O模型细节(七)

这里谈谈源码的具体实现作为统一框架,每个模型都有统一的处理接口包括,这里定义在typedef struct {    ngx_int_t  (*add)(ngx_event_t *ev, int event, u_int flags);    ngx_int_t  (*del)(ngx_event_t *ev, int event, u_int flags);

2015-07-10 20:16:36 673

翻译 提高日志质量的 5 大技巧

最近涌现出各种各样能帮助你理解日志的新工具,有类似 Scribe、Logstash 这样的开源项目,也有类似 Splunk 的预付费工具,还有托管服务如 SumoLogic 和 PaperTrail。这些工具的共同点是对日志数据进行清洗,在大量日志中提取一些更有价值的文件。但有一件事这些工具却爱莫能助,因为它们完全依赖你实际投入的日志数据,而如何保证数据的质量和数量则需要用户自行完

2015-07-10 11:35:20 500

转载 使用 JMeter 完成常用的压力测试

讲到测试,人们脑海中首先浮现的就是针对软件正确性的测试,即常说的功能测试。但是软件仅仅只是功能正确是不够的。在实际开发中,还有其它的非功能因素也起着决定性的因素,例如软件的响应速度。影响软件响应速度的因素有很多,有些是因为算法不够高效;还有些可能受用户并发数的影响。在众多类型的软件测试中,压力测试正是以软件响应速度为测试目标,尤其是针对在较短时间内大量并发用户的访问时,软件的抗压能力。本文

2015-05-28 22:50:14 1484

转载 apache高负载性能调优

先阅读apache配置优化建议如下,再对相关参数进行调整,观察服务器状况.Apache配置优化建议:进入/usr/local/apache2/conf/extra 目录下Apache优化,经过上述操作后,Apache已经能够正常运行。但是,对于访问量稍大的站点,Apache的这些默认配置是无法满足需求的,我们仍需调整Apache的一些参数,使Apache能够在大访问量环境下发挥出更

2015-05-28 09:55:48 408

原创 Nginx源代码分析之I/O模型(六)

....

2015-04-25 13:23:45 891

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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