JVMTI随记

JVM工具接口(JVM TI)是供工具使用的本机编程接口。它提供了一种检查状态和控制Java虚拟机中运行的应用程序执行的方法。JVMTI支持需要访问JVM状态的各种工具。

阅读全文

100个为什么

CPU执行的第一条指令是什么

引导指令,将操作系统加载到内存中
当用户启动计算机的电源时,计算机硬件会自动产生一个中断信号,这个中断信号触发计算机处理器(CPU)中的一段指令执行。该段指令的执行结果将是发现外部存储设备中操作系统引导区(boot block)的位置。如果已经安装了操作系统,则操作系统引导区中的代码将被自动导入计算机的内存,并开始执行。引导区代码的执行结果是将操作系统程序加载到计算机内存中的指定区域,并初始化计算机的有关硬件,例如存储器,终端设备,以及各种计算机运行所需的数据结果等。至此操作系统程序开始启动,并未用户提供相应的用户界面,开始提供各种服务

阅读全文

KVM初尝

虚拟化技术的含义很广泛。将任何一种形式的资源抽象成另一种形式的技术都是虚拟化。在常用的操作系统中就存在某种意义上的“虚拟化技术”,例如虚拟内存空间和进程。如果把内存看作是一个设备,虚拟内存就是将物理内存虚拟成多个内存空间。虚拟内存的容量可以少于或多于物理内存。进程的概念实际是对于物理硬件执行环境的一个抽象,每个进程都享有一个完整的硬件执行环境,并且与其他进程相隔离。
相对于进程级的虚拟化,虚拟机是另外一个层面的虚拟化,即系统级虚拟化。与虚拟单个进程的执行环境所不同,系统级虚拟化所抽象的环境是整个计算机,其抽象出的环境称为虚拟机,包括CPU、内存和I/O。在每个虚拟机中都可以运行一个操作系统,在一台计算机上可以虚拟出多个虚拟机。

KVM内核模块源码分析

阅读全文

Java并发编程-线程饥饿死锁

最近公司项目上遇到一个问题,同事反映服务一直没有收到回调(异步接口),查看日志没看到任何的异常信息,重启服务后偶尔又出现,通过分析可能存在三种情况:第一种是数据库发生死锁了,第二种情况线程死锁。第三种情况redis连接池为空一直在等待空闲的资源
使用查看数据库锁查询语句查询没有任何锁,那就只可能存在第二、第三种情况了。

阅读全文

WEB性能优化手段

前端

静态资源独立域名

浏览器请求并发数是针对同一域名下的,一般现代浏览器都是6个了解更多查看,这样的设计目的其实是对服务器的一种保护,通常使用多个独立域名作为提供网站响应速度的一种有效手段。可以大大拓展这个并发连接数,也就是令浏览器并行下载更多资源,提高站点性能。 具体的实施方案是将静态资源 图片、css、js 放到一个子域名服务器下。这样带来的好处不仅是提供了浏览器并发请求数量还能减少http 头的数据大小。很明显的就是能减少cookie的传输。

阅读全文

HTTP Keep-Alive

Keep-Alive是什么

在早期的HTTP1.0版本中,每个http请求都要求打开一个tcp socket连接,并且使用一次之后就断开这个tcp连接。这种效率和性能是最低的,因为建立一个TCP连接需要3次握手,而断开一个链接需要TCP四次握手。而在一个网页页面中含有的大量引入的js、css、img文件,如果每个请求都为之创建一个socket连接,这不仅是性能的底下而且还会给服务器带来很大的压力。 为了改善这种状态希望在一个页面中能重复的利用一个Socket连接来发送请求数据,
于是就发明了keep-alive即在一次TCP连接中可以持续发送多份数据而不会断开连接。通过使用keep-alive机制,可以减少tcp连接建立次数,也意味着可以减少TIME_WAIT状态连接,以此提高性能和提高httpd服务器的吞吐率(更少的tcp连接意味着更少的系统内核调用,socket的accept()和close()调用)。但是,keep-alive并不是免费的午餐,长时间的tcp连接容易导致系统资源无效占用。配置不当的keep-alive,有时比重复利用连接带来的损失还更大。所以,正确地设置keep-alive timeout时间非常重要。
keepalvie timeout。

阅读全文

HTTP协议:不可小觑的Content-Length

Content-Length首部告诉浏览器报文中实体主体的大小。这个大小是包含了内容编码的,比如对文件进行了gzip压缩,Content-Length就是压缩后的大小(这点对我们编写服务器非常重要)。除非使用了分块编码,否则Content-Length首部就是带有实体主体的报文必须使用的。使用Content-Length首部是为了能够检测出服务器崩溃而导致的报文截尾,并对共享持久连接的多个报文进行正确分段。

阅读全文

Netty-4.1.4源码分析二之管道设计模式

管道模式的好处

  • 在Netty中对数据的处理编码解码读取都是通过管道模式串连起来,这些handler都是管道中的一个阀门。对于管道模式的好处在这里简单的说下。在一个比较复杂的大型系统中,假如存在某个对象或数据流需要被进行繁杂的逻辑处理的话,我们可以选择在一个大的组件中进行这些繁杂的逻辑处理,这种方式确实达到了目的,但却是简单粗暴的。或许在某些情况这种简单粗暴的方式将带来一些麻烦,例如我要改动其中某部分处理逻辑、我要添加一些处理逻辑到流程、我要在流程中减少一些处理逻辑时,这里有些看似简单的改动都让我们无从下手,除了对整个组件进行改动。整个系统看起来没有任何可扩展性和可重用性。
    是否有一种模式可以将整个处理流程进行详细划分,划分出的每个小模块互相独立且各自负责一段逻辑处理,这些逻辑处理小模块根据顺序连起来,前以模块的输出作为后一模块的输入,最后一个模块的输出为最终的处理结果。如此一来修改逻辑时只针对某个模块修改,添加或减少处理逻辑也可细化到某个模块颗粒度,并且每个模块可重复利用,可重用性大大增强。

    阅读全文

Netty-4.1.4源码分析一

Netty是什么

  • Netty是一个异步的事件驱动的网络应用程序框架用于快速开发可维护的高性能协议服务器和客户端。基于NIO客户端服务器框架,可以快速,轻松地开发网络应用程序,如协议服务器和客户端。 它大大简化和简化了网络编程,如TCP和UDP套接字服务器。

    阅读全文

react-redux

react-redux是基于redux javascript轻量级框架,为了更好的和react结合对redux提供了一些封装,一种更科学的代码组织方式,让我们更舒服地在React的代码中使用Redux。
react-redux很简单他就提供了两个模块:Provider和connect。

阅读全文