操作系统
文章平均质量分 75
iteye_4064
这个作者很懒,什么都没留下…
展开
-
短连接导致端口耗尽
场景回放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 · 4209 阅读 · 0 评论 -
TCP目录贴
IP头部结构IP分片TCP/IP协议封装与DemultiplexingIP 差错控制运输层协议 TCP头部结构TCP状态转换TCP中的窗口TCP拥塞控制TCP的计数器TCP差错控制TCP编号系统TCP选项TCP流量控制 ...原创 2016-12-03 00:19:43 · 201 阅读 · 0 评论 -
Linux进程管理
进程 进程是处于执行期的程序(目标码存放在某种存储介质上)。但进程并不仅仅局限于一段可执行程序代码。通常进程还要包含其他资源,像打开的文件,挂起的信号,内核内部数据,处理器状态,一个或多个具有内存映射的内存地址空间以及一个或多个执行线程(Thread of execution),当然还包括用来存放全局变量的数据段等。实际上,进程就是正在执行的程序代码的实时结果。内核需要有效...原创 2016-12-05 01:27:09 · 129 阅读 · 0 评论 -
Linux进程调度
多任务 多任务系统可以划分为两类:非抢占式(cooperative multitasking)和抢占式多任务(preemptive multitaskin)。由调度程序来确定什么时候停止一个进程的运作,以便其他进程能够得到执行的机会,这个强制挂起的动作就叫作抢占(preemption)。进程在被抢占之前能够运行的时间是预先设置好的,而且有一个专门的名字,叫作进程的时间片(time...原创 2016-12-06 00:20:57 · 127 阅读 · 0 评论 -
Linux中断和中断处理
众所周知,处理器的速度跟外围的硬件设备的速度往往不在一个数量级上,因此,如果内核采取让处理器发送一个请求,然后专门等待回应的办法,显然差强人意。既然硬件处理的这么慢,那么内核就应该在这期间去处理其他事务,等待硬件真正完成了请求的操作后,再回过头来对它进行处理。 轮询(polling)可能会是一种解决办法。它可以让内核定期对设备的状态进行查询,然...原创 2016-12-07 23:43:07 · 190 阅读 · 0 评论 -
Linux内核同步
临界区和竞争条件 所谓临界区(也称为临界段)就是访问和操作共享数据的代码段。多个执行线程并发访问同一个资源通常是不安全的,为了避免在临界区中并发访问,必须保证这些代码原子执行,操作在执行结束前不可被打断,就如同整个临界区是一个不可分割的指令一样。如果两个执行线程有可能处于同一个临界区中同时执行,那么就是程序包含一个bug。如果这种情况确实发生了,我们就称它是竞争条件(race ...原创 2016-12-08 23:53:15 · 126 阅读 · 0 评论 -
Linux内核数据结构
链表 链表是Linux内核中最简单、最普通的数据结构。链表是一种存放和操作可变数量元素(常称为节点)的数据结构。链表和静态数据的不同之处在于,它所包含的元素都是动态创建并插入链表的,在编译时不知道具体需要创建多少个元素。另外链表中每个元素的创建时间各不相同,所以他们在内存中无须占用连续内存区。正是因为元素不连续地存放,所以各元素需要通过某种方式被连接在一起。于是每个元素都包含一...原创 2016-12-11 22:47:43 · 171 阅读 · 0 评论 -
Linux内存管理
页 内核把物理页作为内存管理的基本单位。尽管处理器的最小可寻址单位通常为字(甚至字节),但是内存管理单元(MMU 管理内存并把虚拟地址转换为物理地址的硬件)通常以页为单位进行处理。正是因为如此,MMU以页(page)大小为单位来管理系统中的页表。从虚拟内存的角度来看,页就是最小单位。 struct page{ unsigned long flags; ...原创 2016-12-12 23:52:40 · 114 阅读 · 0 评论 -
Linux页高速缓存和页回写
页高速缓存(cache)是Linux内核实现磁盘缓存。它主要用来减少对磁盘I/O操作。是通过把磁盘中的数据缓存到 物理内存中,把对磁盘的访问变为对物理内存的访问。 磁盘高速缓存有两个重要因素:第一,访问磁盘的速度要远低于访问内存的速度,若从处理器L1和L2高速缓存访问则速度更快。第二,数据一旦被访问,就很有可能短时间内再次访问。正是由于基于访问内存比磁盘快的多,...原创 2016-12-14 00:26:55 · 438 阅读 · 0 评论 -
Linux页表
虽然应用程序操作的对象是映射到物理内存之上的虚拟内存,但是处理器直接操作的却是物理内存。所以当应用程序访问一个虚拟地址时,首先必须将虚拟地址转化成物理地址,然后处理器才能解析地址访问请求。地址的转换工作需要通过查询页表才能完成,地址转换需要将虚拟地址分段,使每段虚拟地址都作为一个索引指向页表,而页表项则指向下一级别的页表或指向最终的物理页面。 Linux中使用三...原创 2016-12-15 01:32:28 · 323 阅读 · 0 评论 -
Linux目录贴
Linux进程管理Linux进程调度Linux中断和中断处理Linux内核同步Linux内核数据结构Linux内存管理Linux页高速缓存和页回写Linux页表原创 2016-12-16 01:28:43 · 156 阅读 · 0 评论 -
2016年书架整理
书架上的书有很多,有的只看了目录,有的只看了很少的内容,为了避免成为目录党,整理一下2016年已经看过的书以及下一阶段要看的书,目的是督促自己要把看书计划落实下来,同时简单回顾一下看书过程中的收获。 第一部分是2016年已经看过的书:<<Java7并发编程与实战手册>> 这是一本书的内容非常偏重于练习,学习之前更好的选择是先看并发相关...原创 2017-01-01 00:22:08 · 204 阅读 · 0 评论 -
TCP流量控制
流量控制平衡了生产者产生数据的速度和消费者消费数据的速度。TCP把流量控制从差错控制中独立出来。下图所示为发送方和接收方之间的单向数据传送。双向数据传送过程可以从单向传送中推断出来。 图中描绘的数据走向是从发送进程向下发送TCP,再从发送TCP到接收TCP,然后从接收TCP向上到达数据接收进程(路径1、2、和3)。不过,流量控制的反馈走向是从接收TCP到发送...原创 2016-12-01 01:08:41 · 308 阅读 · 0 评论 -
TCP选项
TCP首部可以由多达40字节的可选信息。选项用于把附加信息传递给终点,或用来填充对齐其他选项。我们将定义两大类选项:1字节选项和多字节选项。第一类选项包括两种选项:选项列表结束和误操作。在大多数实现中,第二类选项包括了五种选项:最大报文段长度、窗口扩大因子、时间戳、允许SACK和SACK,见下图。 选项结束(EOF) 选项结束(end of optio...原创 2016-11-28 00:48:25 · 792 阅读 · 0 评论 -
TCP编号系统
虽然TCP软件需要掌握正在传送的或已接收到的每一个报文段,但在报文段首部中并没有存放报文段编号的字段。实际上,在这个首部中由两个叫作序号和确认号的字段。这两个字段所指的都是字节的编号而不是报文段的编号。 字节号 TCP把在一个连接中要发送的所有数据字节(8位组)都编上号。两个方向的编号是相互独立的。当TCP接收来自进程的数据字节时,就把它们存储在发送缓存中,...原创 2016-11-27 22:55:57 · 319 阅读 · 0 评论 -
TCP/IP协议封装与Demultiplexing
TCP/IP的分层 TCP和UDP是两种最为著名的运输层协议,二者都使用IP作为网络协议。虽然TCP使用不可靠的IP服务,但它却提供一种可靠的运输层服务。 封装 当应用程序应用TCP传输数据时,数据被送入协议栈中,然后逐个通过每一层都被当做一串比特流送入网络。其中每一层对收到的数据都要加一些首部信息(有时还需要增加尾部信息)。TCP传给IP的数...原创 2016-11-15 01:24:38 · 512 阅读 · 0 评论 -
IP分片
最大传输单元MTU【Maximum Transmission Unit】以太网和IEEE 802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492字节,链路层的这个特性称作MTU,最大传输单元,不同类型的网络大多数都有一个上限。 如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就需要进行切片(fragmentation),把数据报分成若...原创 2016-11-16 02:43:41 · 763 阅读 · 0 评论 -
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 · 203 阅读 · 0 评论 -
IP头部结构
IP头部结构 RFC 751定义了因特网协议,IP是一个无连接的协议,这意味着它将每个IP分组都看成是与其他IP分组无关的独立数据单元。IP不具备通常为了确保数据的认证机制,如果再分组转发过程中发生错误,IP不会启动任何动作来更正这个错误。分组头部的字段和为之服务的协议功能的复杂度之间存在着直接的联系,头部越简单,相应的协议越简单。 I...原创 2016-11-18 03:02:21 · 2256 阅读 · 0 评论 -
TCP头部结构
源端口(source port)16位的字段,定义了发送这个报文段的主机中的应用程序的端口号。 目的端口(destination port)16位的字段,定义了接收这个报文段的主机中的应用程序的端口号。 序列号(sequence number)32位的字段,定义了指派给本报文段第一个数据字节的编号。为了保证连接性,要发送的每一个字节都要编上号。序号可以告诉...原创 2016-11-22 02:17:59 · 488 阅读 · 0 评论 -
TCP状态转换
为了清楚的掌握连接建立,连接终止以及数据传送时发生的所有不同事件,下图以有限状态机的形式来定义。 TCP各种状态状态 说明CLOSED 没有连接LISTEN 收到了被动打开;等待SYNSYN-SE...原创 2016-11-23 01:46:48 · 117 阅读 · 0 评论 -
IP 差错控制
绝大多数TCP/IP协议采用的差错检测方法称为检验和(checksum)。检验和能够防止分组在传输期间出现的损坏。检验和是附加在分组上的冗余信息。 发送端计算出检验和,并把得到的结果与分组一起发送出去。接收端对包括检验和在内的整个分组重复同样的计算。若得到了满意的结果则接收这个分组,否则就把它丢弃。 发送端计算检验和 ...原创 2016-11-25 00:57:06 · 2573 阅读 · 0 评论 -
TCP中的窗口
滑动窗口 因为序号是模2的m次方,所以从0至2的m次方-1的序号可以表示为一个环。缓存被表示为一组小格子,称为滑动窗口(sliding window),在任何时候它们都占据了圆的一部分。在发送方,当一个分组被发送出去,相应的小片就被标记。当所有的小片都被标记后,就表示缓存已满,不允许从应用层接收更多的报文。当一个确认达到后,相应的小片的标记就被取消。如果这个窗口前端连续多...原创 2016-11-26 01:03:37 · 963 阅读 · 0 评论 -
TCP拥塞控制
因特网中存在一个重要的问题是拥塞(congestion)。如果一个网络中的负载(load)(也就是发送到网络上的分组数量)大于网络的容量(也就是网络能够处理的分组数量),这个网络就有可能发生拥塞。拥塞控制(congestion control)指的是用来控制拥塞,以使负载保持低于容量的机制和技术。 我们可能会问为什么网络中会出现拥塞?只要是涉及到等待的系统都会发生...原创 2016-11-26 02:27:25 · 315 阅读 · 0 评论 -
TCP的计数器
为了能够顺利的进行TCP的操作,大多数的TCP实现至少要使用4个计时器,见下图。 重传计数器为了重传丢失的报文段,TCP应用了一个重传计时器(在整个连接期间)来处理重传超时(RTO),也就是对报文段的确认的等待时间。我们可以以为重传计时器定义一下规则:当TCP发送了位于发送队列最前端的报文段后,就启动这个计时器。当这个计时器超时后,TCP重传...原创 2016-11-27 01:45:00 · 744 阅读 · 0 评论 -
TCP差错控制
TCP是可靠的运输层协议。这就表示应用层程序把数据流交付给TCP后要依靠TCP把整个数据流交付给另一端的应用程序,并且是按序的,没有差错、也没有任何一部分丢失或重复。 TCP使用差错控制来提供可靠性。差错控制包括以下的一些机制:检测和重传受到损伤的报文段、重传丢失的报文段、保存失序到达的报文段直至缺失的报文到期,以及检测和丢弃重复的报文段。TCP通过三个简单的工具来...原创 2016-11-27 01:54:28 · 1898 阅读 · 1 评论 -
修改/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 · 2012 阅读 · 0 评论