自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 攻防战

爱奇艺建成全球领先流量防刷系统 维护公平公正内容生态腾讯基于用户画像大数据的电商防刷架构继爱奇艺、优酷土豆之后,腾讯终对刷量痛下狠手   视频刷量软件   ...

2017-03-04 22:38:59 245

原创 修改/dev/shm空间大小

/dev/shm默认情况下为物理内存大小的50%,遇到空间紧张时可以扩大。vim /etc/fstab## /etc/fstab# Created by anaconda on Wed Dec 21 20:56:58 2016## Accessible filesystems, by reference, are maintained under '/dev/disk'...

2017-02-24 04:11:15 2007

原创 丛林法则:华尔街大鳄的“狠”秘诀

时机未到前充分忍耐       伟大的成功者都能充分地看到自身的不足--至少是当下尚不成熟的方面,然后耐心地去改进,潜心积蓄实力,等待着未来的机会,而不会急于冒进。要想克服赢的渴望与输的恐惧,耐心地等待机会和遵守严酷的规则,才是最好的办法。这就是我在美国看到的那些华尔街大鳄的成功之道。他们每个人都是狠角色,不会倚仗财富去豪掷亿万砸出机会,而是选择对自己狠一些,他们擅长压制内心的欲望,善于机...

2017-02-03 23:00:10 425

原创 狠关键:怎样才能对自己狠一点

我赢了因为我敢于进场!      人生中遇到的每一件事情,做出的每一次尝试,都有撞到南墙甚至输得一塌糊涂的风险,就看你是不是有勇气来承受暂时的失败。如果你抚摸着满是伤痛的胳膊,告诉自己只要再试几次,坚硬的墙壁就会被你装穿,你的诚意必定能打动命运,如果你贪图舒适或者惧怕受伤,转身寻求他途,你一定会很容易地被困难击倒,陷入无法摆脱的“困境”。        很多人突破了自我之后才发现:有些...

2017-02-02 23:02:25 754

原创 Java重排序

         重排序是指编译器和处理为了优化程序性能而对指令序列进行重新排序的一种手段。数据依赖        如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分为下列3中类型。名称代码示例说明写后读a=1;b=a;写一个变量之后,再读这个位置写后写a=1;a=2;写一个变...

2017-01-19 00:55:24 501

原创 Java内存模型

         Java线程之间的通信对程序员完全透明,内存可见性问题很容易困扰Java程序员。 Java内存模型        并发编程模型的两个关键问题,线程之间如何通信及线程之间如何同步,通信是指线程之间使用什么机制来交换信息。在命令式编程中,线程之间的通信机制由两种:共享内存和消息传递。       在共享内存的并发模型里,线程之间共享程序的公开状态,通过写-读内...

2017-01-16 23:17:19 123

原创 Java并发机制的底层实现原理

         Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU指令。 volatile的应用         在多线程并发编程中synchronized和volatile都扮演着重要的角色,volatile是轻量级synchronized,它在多处理开发中...

2017-01-15 22:04:56 126

原创 并发编程的挑战

             并发编程的目的是为了让程序运行得更快,但是,并不是启动更多的线程就能让程序最大限度地并发执行。在并发编程时,如果希望通过多线程执行任务让程序运行得更快,会面临非常多的挑战,比如:上下文的切换问题、死锁问题、以及受限制于硬件和软件资源限制问题。             上下文切换         即使单核处理器也支持多线程执行代码,CPU通过给每个线程分配C...

2017-01-10 22:37:05 128

原创 2016年书架整理

        书架上的书有很多,有的只看了目录,有的只看了很少的内容,为了避免成为目录党,整理一下2016年已经看过的书以及下一阶段要看的书,目的是督促自己要把看书计划落实下来,同时简单回顾一下看书过程中的收获。 第一部分是2016年已经看过的书:<<Java7并发编程与实战手册>> 这是一本书的内容非常偏重于练习,学习之前更好的选择是先看并发相关...

2017-01-01 00:22:08 190

原创 Linux目录贴

Linux进程管理Linux进程调度Linux中断和中断处理Linux内核同步Linux内核数据结构Linux内存管理Linux页高速缓存和页回写Linux页表

2016-12-16 01:28:43 150

原创 Linux页表

        虽然应用程序操作的对象是映射到物理内存之上的虚拟内存,但是处理器直接操作的却是物理内存。所以当应用程序访问一个虚拟地址时,首先必须将虚拟地址转化成物理地址,然后处理器才能解析地址访问请求。地址的转换工作需要通过查询页表才能完成,地址转换需要将虚拟地址分段,使每段虚拟地址都作为一个索引指向页表,而页表项则指向下一级别的页表或指向最终的物理页面。       Linux中使用三...

2016-12-15 01:32:28 306

原创 Linux页高速缓存和页回写

        页高速缓存(cache)是Linux内核实现磁盘缓存。它主要用来减少对磁盘I/O操作。是通过把磁盘中的数据缓存到 物理内存中,把对磁盘的访问变为对物理内存的访问。       磁盘高速缓存有两个重要因素:第一,访问磁盘的速度要远低于访问内存的速度,若从处理器L1和L2高速缓存访问则速度更快。第二,数据一旦被访问,就很有可能短时间内再次访问。正是由于基于访问内存比磁盘快的多,...

2016-12-14 00:26:55 428

原创 Linux内存管理

页       内核把物理页作为内存管理的基本单位。尽管处理器的最小可寻址单位通常为字(甚至字节),但是内存管理单元(MMU 管理内存并把虚拟地址转换为物理地址的硬件)通常以页为单位进行处理。正是因为如此,MMU以页(page)大小为单位来管理系统中的页表。从虚拟内存的角度来看,页就是最小单位。    struct page{   unsigned long flags;   ...

2016-12-12 23:52:40 107

原创 Linux内核数据结构

链表       链表是Linux内核中最简单、最普通的数据结构。链表是一种存放和操作可变数量元素(常称为节点)的数据结构。链表和静态数据的不同之处在于,它所包含的元素都是动态创建并插入链表的,在编译时不知道具体需要创建多少个元素。另外链表中每个元素的创建时间各不相同,所以他们在内存中无须占用连续内存区。正是因为元素不连续地存放,所以各元素需要通过某种方式被连接在一起。于是每个元素都包含一...

2016-12-11 22:47:43 162

原创 Linux内核同步

临界区和竞争条件       所谓临界区(也称为临界段)就是访问和操作共享数据的代码段。多个执行线程并发访问同一个资源通常是不安全的,为了避免在临界区中并发访问,必须保证这些代码原子执行,操作在执行结束前不可被打断,就如同整个临界区是一个不可分割的指令一样。如果两个执行线程有可能处于同一个临界区中同时执行,那么就是程序包含一个bug。如果这种情况确实发生了,我们就称它是竞争条件(race ...

2016-12-08 23:53:15 117

原创 Linux中断和中断处理

            众所周知,处理器的速度跟外围的硬件设备的速度往往不在一个数量级上,因此,如果内核采取让处理器发送一个请求,然后专门等待回应的办法,显然差强人意。既然硬件处理的这么慢,那么内核就应该在这期间去处理其他事务,等待硬件真正完成了请求的操作后,再回过头来对它进行处理。            轮询(polling)可能会是一种解决办法。它可以让内核定期对设备的状态进行查询,然...

2016-12-07 23:43:07 182

原创 Linux进程调度

多任务      多任务系统可以划分为两类:非抢占式(cooperative multitasking)和抢占式多任务(preemptive multitaskin)。由调度程序来确定什么时候停止一个进程的运作,以便其他进程能够得到执行的机会,这个强制挂起的动作就叫作抢占(preemption)。进程在被抢占之前能够运行的时间是预先设置好的,而且有一个专门的名字,叫作进程的时间片(time...

2016-12-06 00:20:57 116

原创 Linux进程管理

 进程      进程是处于执行期的程序(目标码存放在某种存储介质上)。但进程并不仅仅局限于一段可执行程序代码。通常进程还要包含其他资源,像打开的文件,挂起的信号,内核内部数据,处理器状态,一个或多个具有内存映射的内存地址空间以及一个或多个执行线程(Thread of execution),当然还包括用来存放全局变量的数据段等。实际上,进程就是正在执行的程序代码的实时结果。内核需要有效...

2016-12-05 01:27:09 122

原创 TCP目录贴

 IP头部结构IP分片TCP/IP协议封装与DemultiplexingIP 差错控制运输层协议 TCP头部结构TCP状态转换TCP中的窗口TCP拥塞控制TCP的计数器TCP差错控制TCP编号系统TCP选项TCP流量控制         ...

2016-12-03 00:19:43 193

原创 运输层协议

   TCP/IP协议使用的运输层协议或者是对这些协议之一的改进,或者是他们的组合。 简单协议        简单协议时一个无连接协议,它既没有流量控制,也没有差错控制。我们假设接收方能够及时处理它收到的任何分组。换言之,接收方永远不会因为涌入的分组太多而处理不过来,下图是这个协议的概要。       发送方的运输层从应用那里得到一个报文,用他产生一个分组,然后发送这个分组...

2016-12-02 00:51:47 378

原创 TCP流量控制

       流量控制平衡了生产者产生数据的速度和消费者消费数据的速度。TCP把流量控制从差错控制中独立出来。下图所示为发送方和接收方之间的单向数据传送。双向数据传送过程可以从单向传送中推断出来。        图中描绘的数据走向是从发送进程向下发送TCP,再从发送TCP到接收TCP,然后从接收TCP向上到达数据接收进程(路径1、2、和3)。不过,流量控制的反馈走向是从接收TCP到发送...

2016-12-01 01:08:41 295

原创 TCP选项

       TCP首部可以由多达40字节的可选信息。选项用于把附加信息传递给终点,或用来填充对齐其他选项。我们将定义两大类选项:1字节选项和多字节选项。第一类选项包括两种选项:选项列表结束和误操作。在大多数实现中,第二类选项包括了五种选项:最大报文段长度、窗口扩大因子、时间戳、允许SACK和SACK,见下图。 选项结束(EOF)       选项结束(end of optio...

2016-11-28 00:48:25 760

原创 TCP编号系统

      虽然TCP软件需要掌握正在传送的或已接收到的每一个报文段,但在报文段首部中并没有存放报文段编号的字段。实际上,在这个首部中由两个叫作序号和确认号的字段。这两个字段所指的都是字节的编号而不是报文段的编号。 字节号       TCP把在一个连接中要发送的所有数据字节(8位组)都编上号。两个方向的编号是相互独立的。当TCP接收来自进程的数据字节时,就把它们存储在发送缓存中,...

2016-11-27 22:55:57 307

原创 TCP差错控制

      TCP是可靠的运输层协议。这就表示应用层程序把数据流交付给TCP后要依靠TCP把整个数据流交付给另一端的应用程序,并且是按序的,没有差错、也没有任何一部分丢失或重复。       TCP使用差错控制来提供可靠性。差错控制包括以下的一些机制:检测和重传受到损伤的报文段、重传丢失的报文段、保存失序到达的报文段直至缺失的报文到期,以及检测和丢弃重复的报文段。TCP通过三个简单的工具来...

2016-11-27 01:54:28 1864 1

原创 TCP的计数器

           为了能够顺利的进行TCP的操作,大多数的TCP实现至少要使用4个计时器,见下图。 重传计数器为了重传丢失的报文段,TCP应用了一个重传计时器(在整个连接期间)来处理重传超时(RTO),也就是对报文段的确认的等待时间。我们可以以为重传计时器定义一下规则:当TCP发送了位于发送队列最前端的报文段后,就启动这个计时器。当这个计时器超时后,TCP重传...

2016-11-27 01:45:00 723

原创 TCP拥塞控制

       因特网中存在一个重要的问题是拥塞(congestion)。如果一个网络中的负载(load)(也就是发送到网络上的分组数量)大于网络的容量(也就是网络能够处理的分组数量),这个网络就有可能发生拥塞。拥塞控制(congestion control)指的是用来控制拥塞,以使负载保持低于容量的机制和技术。       我们可能会问为什么网络中会出现拥塞?只要是涉及到等待的系统都会发生...

2016-11-26 02:27:25 309

原创 TCP中的窗口

滑动窗口        因为序号是模2的m次方,所以从0至2的m次方-1的序号可以表示为一个环。缓存被表示为一组小格子,称为滑动窗口(sliding window),在任何时候它们都占据了圆的一部分。在发送方,当一个分组被发送出去,相应的小片就被标记。当所有的小片都被标记后,就表示缓存已满,不允许从应用层接收更多的报文。当一个确认达到后,相应的小片的标记就被取消。如果这个窗口前端连续多...

2016-11-26 01:03:37 936

原创 IP 差错控制

        绝大多数TCP/IP协议采用的差错检测方法称为检验和(checksum)。检验和能够防止分组在传输期间出现的损坏。检验和是附加在分组上的冗余信息。        发送端计算出检验和,并把得到的结果与分组一起发送出去。接收端对包括检验和在内的整个分组重复同样的计算。若得到了满意的结果则接收这个分组,否则就把它丢弃。          发送端计算检验和     ...

2016-11-25 00:57:06 2526

原创 TCP状态转换

        为了清楚的掌握连接建立,连接终止以及数据传送时发生的所有不同事件,下图以有限状态机的形式来定义。  TCP各种状态状态                               说明CLOSED                      没有连接LISTEN                         收到了被动打开;等待SYNSYN-SE...

2016-11-23 01:46:48 112

原创 TCP头部结构

 源端口(source port)16位的字段,定义了发送这个报文段的主机中的应用程序的端口号。 目的端口(destination port)16位的字段,定义了接收这个报文段的主机中的应用程序的端口号。 序列号(sequence number)32位的字段,定义了指派给本报文段第一个数据字节的编号。为了保证连接性,要发送的每一个字节都要编上号。序号可以告诉...

2016-11-22 02:17:59 476

原创 IP头部结构

 IP头部结构        RFC 751定义了因特网协议,IP是一个无连接的协议,这意味着它将每个IP分组都看成是与其他IP分组无关的独立数据单元。IP不具备通常为了确保数据的认证机制,如果再分组转发过程中发生错误,IP不会启动任何动作来更正这个错误。分组头部的字段和为之服务的协议功能的复杂度之间存在着直接的联系,头部越简单,相应的协议越简单。        I...

2016-11-18 03:02:21 2234

原创 missing power_meter release() function

      前段时间 一台服务器重启过,查看系统日志发现一堆可疑信息,根据这些信息追查到是内核bug。 尝试升级内核版本解决。同一批机器机器中有全部有这个问题。 操作系统uname -aLinux a08.hbase.javagc.com 2.6.18-308.el5 #1 SMP Tue Feb 21 20:06:06 EST 2012 x86_64 x86_64 x86...

2016-11-16 16:28:59 194

原创 IP分片

 最大传输单元MTU【Maximum Transmission Unit】以太网和IEEE 802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492字节,链路层的这个特性称作MTU,最大传输单元,不同类型的网络大多数都有一个上限。 如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就需要进行切片(fragmentation),把数据报分成若...

2016-11-16 02:43:41 750

原创 TCP/IP协议封装与Demultiplexing

 TCP/IP的分层       TCP和UDP是两种最为著名的运输层协议,二者都使用IP作为网络协议。虽然TCP使用不可靠的IP服务,但它却提供一种可靠的运输层服务。 封装       当应用程序应用TCP传输数据时,数据被送入协议栈中,然后逐个通过每一层都被当做一串比特流送入网络。其中每一层对收到的数据都要加一些首部信息(有时还需要增加尾部信息)。TCP传给IP的数...

2016-11-15 01:24:38 498

原创 百万用户同时在线之Strom任务设计

 在线人数需求当天总在线人数同时在线人数同时在线人数统计周期1分钟 用户心跳数据采集登陆后前30秒每10秒汇报一次心跳登陆超过30秒每30秒汇报一次心跳Max心跳QPS=500W/30s=170W+ Strom任务设计使用Hyperloglog结构代替HashMap做过滤spout发送bolt使用localOrShuffleGrou...

2016-11-10 23:37:57 230

原创 Storm Bolt中读取Tuple数据

  Tuple接口有很多方法可以读取从上游组件发送过来的数据,这些方法可以分为2类。根据下标获取数据根据字段名获取数据读取数据方法public class TupleImpl extends IndifferentAccessMap implements Seqable, Indexed, IMeta, Tuple { private List<Ob...

2016-11-10 22:35:14 509

原创 短连接导致端口耗尽

 场景回放A机器的服务请求B机器的服务短连接请求,动态创建连接端口A机器服务会主动关闭连接短时间内高并发请求A机器的tcpssports被耗尽了大部分网络连接处time_wait状态 内核配置net.ipv4.ip_local_port_range = 1024 65000net.ipv4.ip_local_reserved_port...

2016-11-09 23:44:05 4180

原创 Zookeeper 目录贴

  Zookeeper Session机制Zookeeper 磁盘IO高问题Zookeeper 测试   

2016-11-06 23:59:31 72

原创 Storm 反压机制

反压机制       Storm的反压机制不成熟直接带来的后果是洪峰流量或者流量预估不准确导致任务的worker OOM,频繁漂移。Storm1.0版本已经使用新的反压机制,社区解决方案:https://issues.apache.org/jira/browse/STORM-886https://github.com/apache/storm/pull/700     ...

2016-11-06 23:46:32 1181

原创 Storm Spout nextTuple策略

       Storm从0.8.1之后,在Spout调用nextTuple方法时,如果没有emit tuple,那么默认需要休眠1ms,这个具体的策略是可配置的,因此可以根据自己的具体场景,进行设置,以达到合理利用cpu资源。             ISpoutWaitStrategy是Spout没有emit时等待策略的接口,目的是合理利用Cpu,默认提供了2个实现,一个什么也...

2016-11-03 21:00:51 1101

空空如也

空空如也

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

TA关注的人

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