tcprstat和tcpstat工作原理
1 tcprstat原理采用libpcap捕获tcp,计算请求响应时间并进行一系列聚集统计,响应时间 = diff(last inbound packet, first outbound packet);相较tcpstat,该工具侧重于响应时间而非通信流量的计算;可以直接监控网络接口(默认端口3306),或者读取tcpdump文件。 安装文件本身为二进...
tcmalloc的工作原理
Tcmalloc优势1 速度快ptmalloc在一台2.8GHz的P4机器上(对于小对象)执行一次malloc及free大约需要300纳秒。而TCMalloc的版本同样的操作大约只需要50纳秒。2 降低了锁争用TCMalloc减少了多线程程序中的锁争用情况。对于小对象,几乎已经达到了零争用。对于大对象,TCMalloc尝试使用粒度较好和有效的自旋...
memcache的线程模型
MC采用一master多worker的工作模型,由master负责accept客户端请求,然后以RR分发给worker;-t 线程数,用于处理请求,默认为4 -b backlog队列长度,默认1024 线程结构体 typedef struct { pthread_t thread_id;&n...
memcache的内存分配和重用机制
众所周知,memcache采用slab allocator管理内存,启动由-m指定可用的最大内存值(默认64M),默认是使用时再分配,-k可提前分配内存并锁定;每个slab包含若干大小为1M的内存页,这些内存又被分割成多个chunk,每个chunk存储一个item;在mc启动初始化时,每个slab都预分配一个1M的内存页,由slabs_preallocate ...
nginx proxy cache的实现原理
除了proxy cache,nginx还可对fastcgi的响应数据进行缓存,即fastcgi_cache,两者的配置和实现原理是一致的; 本文以fastcgi_cache为例,描述一下其实现原理,主要参考链接http://www.tuicool.com/articles/QnMNr23先回顾一下配置参数 proxy_cache_path:缓存的存储路径和索引信息; &n...
nginx proxy cache的配置实现
先了解一下http是如何使用和管理缓存的开启缓存时,http请求的流程如下1 接收请求,解析请求头2 查询本地副本3 新鲜度检测,验证副本是否足够新鲜4 创建响应并发送新鲜度检测expires:指定绝对过期日期,cache-control:http1.1引入,以秒为单位,为相对过期日期;服务器再验证文档过期不代表已经修改,缓存需要...
TCP segmentaion 和 checksum offload
为什么要offloading?TCP的分片和校验和计算原本都由CPU完成,最新的网络适配器实现了硬件级别的分片和校验和计算,减轻了主机CPU的负担从而提升本机网络包的吞吐量; 原理当数据包被内核tcp/ip 栈传递到驱动的时候, tcp/ip栈并不会利用CPU来进行tcp checksum的计算。所以在这个时刻,这个tcp check...
linux的中断负载均衡和RPS
中断类型 异常:又叫同步中断,由cpu产生,只有在一条指令终止后CPU才发出中断;取决于eip的值,又可分为故障fault,陷阱trap和中止abort; 中断:硬件外设依照CPU时钟信号随机产生的;分为 可屏蔽和不可屏蔽; 两者分别又称为软件中断(不是软中断)和硬件中断,本文只描述后一种; 硬件中...
日志管理工具logrotate
1运行原理Logrotate是基于CRON来运行的,其脚本是/etc/cron.daily/logrotate#!/bin/sh/usr/sbin/logrotate/etc/logrotate.confEXITVALUE=$?if [ $EXITVALUE != 0 ];then /usr/bin/logger -t logrotate "ALERT exited abnormally with[$EXITVALUE]"fiexit 0&nbs...
nginx处理http请求流程
监听套接字ngx_listenting_t->fd由获取accept_mutex的worker进程加入epoll监控,其handler为ngx_event_accept;注:每个fd赋予一个ngx_connection_t,且c->read->handler =ngx_event_accept(详见ngx_event_process_init);当客户端发起新连接时,epoll_wait返回,将其加入accepted队列,然后调用ngx_event_accep...
nginx的时间管理
gettimeofday()的开销在linux中,nginx通过gettimeofday()获取系统当前时间;gettimeofday是C库提供的函数(不是系统调用),它封装了内核里的sys_gettimeofday系统调用。Linux的系统调用通过int 80h实现,用系统调用号来区分入口函数,步骤大致如下:1 API将系统调用号存入EAX,然后通过中断调用使系统进入内核态;2 ...
http proxy原理
本文内容主要来自http://www.fenesky.com/blog/2014/07/25/how-http-tunnel-works.html,在其基础上稍加整理。 connect方法http 1.1定义了8种方法,connect为其中之一,HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。...
常见IO模型和epoll O(1)实现原理
同步和阻塞同步:发送方发送请求后,需要收到响应后才能接着发送下一步请求;阻塞;通常针对网络套接字socket,调用结果返回前,当前线程一直挂起等待;同步针对调用方,阻塞针对接受方;同步非阻塞:发送方发出请求后一直等待,接受方处理请求时立即返回,不用等待执行结果;异步阻塞:发送方发出请求后马上返回,接...
time_wait的成因和解决方案
建立TCP需要3次握手,而终止TCP需要4次交互; 主动关闭socket的一方最终为time_wait,被动关闭的则为close_wait;为什么time_wait需要2*MSL等待时间?MSL就是maximum segment lifetime(最大分节生命期),这是一个IP数据包能在互联网上生存的最长时间,超过这个时间将在网络中消失。假设最终的 ACK 丢失 , s...
TCP/IP header字段注释
标识符(Identifier):长度16比特。该字段和Flags和Fragment Offest字段联合使用,对较大的上层数据包进行分段(fragment)操作。路由器将一个包拆分后,所有拆分开的小包被标记相同的值,以便目的端设备能够区分哪个包属于被拆分开的包的一部分。 标记(Flags):长度3比特。该字段第一位不使用。第二位是DF(Don...
linux cache与buffer的区别
http://www.quora.com/Linux-Kernel/What-is-the-major-difference-between-the-buffer-cache-and-the-page-cache The page cache caches pages of files to optimize file I/O. The buffer cache caches disk blocks to optimize block I/O.Prior to Linux kernel version 2.4, the two caches were distinct: Fil...
ext3文件系统基础知识点
文件系统的构成引导块:存储引导代码超级块:单块大小/总块数;每组块数;i节点数/每组i节点数;卷名;最后写入时间/挂载时间/挂载路径;空闲i节点/块信息(分配新i节点/块时使用)组描述符表:每个32字节,描述每组块位图/i节点位图/i节点表起始块号,块组中空闲块数和目录数;文件系统中所有块被等分为若干块组,最后一...
oracle启动遭遇ORA-27102: out of memory
OS: linux 2.6.9-103.ELsmp #1 SMPDB: 10205, 4节点RAC背景:节点1前几天重启维护,3个instance起来了俩,第3个TEST03N1启动时不断报错$ $ORACLE_HOME/bin/sqlplus / as sysdba SQL*Plus: Release 10.2.0...
TCP连接状态和time_wait
TCP连接状态LISTEN: 侦听来自远方的TCP端口的连接请求 SYN-SENT:再发送连接请求后等待匹配的连接请求 SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认 ESTA...
stap监控IO脚本
IO相关ioblock.request--没有参数,当产生IO请求时出发ioblock.end--没有参数,在1个IO块请求transfer后出发ioblock_trace.request--对bio产生一个IO请求时触发ioblock_trace.end--IO块传输完毕后触发vfs.readvfs.wr...