- 博客(167)
- 收藏
- 关注
原创 构建docker私有仓库
有了docker hub和阿里或者网易的镜像仓库等之后,为什么还有自己构建仓库呢?一是为了安全,二是为了内网访问,本文我们就介绍如何构建自己的docker仓库。环境准备环境:两个装有Docker 17.09.0-ce 的centos7虚拟机虚拟机一:192.168.0.175 用户开发机虚拟机二:192.168.0.174 用作私有仓库搭建私有仓库在174机器上面docker pul...
2018-11-19 16:19:08 308
原创 jvm字节码解析i++和++
i++和++i是编码中比较常用的代码,并且也是初学者容易混淆的。我们知道i++是先赋值再+自己,而++i是先+自己再赋值。为什么是这样呢?他们之间效率对比又是怎么样呢?本文我们从字节码层面来分析。前面的文章介绍过了jvm字节码的基本知识还有如何分析字节码,我们现在还是写个小demopublic class TestSelfAdd { public static void f1() {...
2018-11-19 10:27:39 308
原创 jvm字节码浅析
本文通过一个简单的例子,分析jvm字节码的一些基本的概念。例子:public static void main(String args) { int a=2; int b=3; int c = a + b; System.out.println(c); }将它编译为class文件,通过javap查看字节码并输出到Test.txt里面:javap -verbose Test...
2018-11-18 21:39:20 272
转载 Elasticsearch技术shard&replica机制
shard&replica机制1.index包含多个shard2.每个shard都是一个最小工作单元,承载部分数据,lucene实例,完整的建立索引和处理请求的能力3.增减节点时,shard会自动在nodes中负载均衡4.primary shard和replica shard,每个document肯定只存在于某一个primary shard以及其对应的replica shard中,...
2018-11-16 10:48:06 451
原创 jvm层gc调优
jvm的内存结构运行时数据区运行时数据区有:方法区、虚拟机栈、本地方法栈、堆、程序计数器计数器pc register垃圾回收算法垃圾收集器可视化gc日志分析工具Tomcat的gc调优实战...
2018-11-07 15:20:52 1364
原创 在mysql 中查询时间最大的一条记录
首先如下这样写是错的:SELECT name,MAX(last_updated) FROM digital_asset GROUP BY name;这样子查到的数据last_updated确实是最大的,但是和name没有关系;用这个方法可以实现:SELECT A.* FROM digital_asset A,(SELECT name, max(last_updated) max_day...
2018-10-27 13:50:02 27887 8
转载 大日志分割的几种方法
对于大日志分割的几种方法当日志容量上G的时候,用vi查看具体内容效率就会变得特别低,这个时候就需要将大日志进行分割。 为了比较各种分割方法的效果,我选取的测试日志基本信息如下:# ls -lrth test.log-rw-r--r-- 1 root root 645M 5月 30 20:42 test.log# wc...
2018-10-24 17:57:00 3307
原创 nginx使用笔记
nginx使用笔记nginx好用的指令监控nginxngx_http_stub_status监控连接信息安装配置使用ngxtop监控请求信息nginx rrd监控合理的创建标题,有助于目录的生成如何改变文本的样式nginx好用的指令查看nginx各种信息 nginx -v,能看到配置文件的位置和使用到的模块,例如:监控nginxngx_http_stub_status监控连接信息...
2018-10-22 23:18:01 278
转载 Intellij IDEA基于Springboot的远程调试
简介本篇博客介绍一下在Intellij IDEA下对Springboot类型的项目的远程调试功能。所谓的远程调试就是服务端程序运行在一台远程服务器上,我们可以在本地服务端的代码(前提是本地的代码必须和远程服务器运行的代码一致)中设置断点,每当有请求到远程服务器时时能够在本地知道远程服务端的此时的内部状态。方法首先,打开Edit configur...
2018-10-16 17:46:36 588
转载 如何快速转发csdn博客?
来源:http://blog.csdn.net/bolu1234/article/details/51867099 前言 对于喜欢逛CSDN的人来说,看别人的博客确实能够对自己有不小的提高,有时候看到特别好的博客想转载下载,但是不能一个字一个字的敲了,这时候我们就想快速转载别人的博客,把别人的博客移到自己的空间里面,当然有人会说我们可以收藏...
2018-10-16 17:43:28 157
原创 netty源码阅读之性能优化工具类之Recycle异线程获取对象
在这篇《netty源码阅读之性能优化工具类之Recycler获取对象》文章里面,我们还有一个scavenge()方法没有解析,也就是在别的线程里面回收对象。下面我们开始介绍,从这个方法开始进入: boolean scavenge() { // continue an existing scavenge, if any if (s...
2018-10-08 19:20:53 338 1
原创 netty源码阅读之性能优化工具类之Recycle异线程回收对象
异线程回收对象分为以下几点分析:1、获取WeakOrderQueue2、如果WeakOrderQueue获取不到,说明是第一,那就创建WeakOrderQueue3、获取到或者创建完WeakOrderQueue之后,将对象追加到WeakOrderQueue里面我们从这个push开始看代码: void push(DefaultHandle<?> it...
2018-10-08 17:38:19 459
原创 netty源码阅读之性能优化工具类之Recycle同线程回收对象
我们从handle的recycle方法开始: @Override public void recycle(Object object) { if (object != value) { throw new IllegalArgumentException("object does not belong to...
2018-10-08 12:10:43 365
原创 netty源码阅读之性能优化工具类之Recycler获取对象
Recycler获取对象主要分为以下几部分:1、获取当前线程的Stack2、从Stack里面弹出对象3、如果弹出对象为空,那就创建对象并且绑定到Stack里面我们从Recycler的get方法进入,就是这个源码: @SuppressWarnings("unchecked") public final T get() { if (maxCapac...
2018-10-08 11:09:59 306 1
原创 netty源码阅读之性能优化工具类之Recycler的创建
我们进入到Recycler的构造函数: protected Recycler() { this(DEFAULT_MAX_CAPACITY_PER_THREAD); }然后在这个类里面,有一个threadLocal,里面放了一个stack: private final FastThreadLocal<Stack<T>> th...
2018-10-08 10:23:08 462
原创 netty源码阅读之性能优化工具类之Recycler的使用
先看我们一个用户端的代码:public class RecycleTest { private static final Recycler<User> RECYCLER = new Recycler<User>() { @Override protected User newObject(Handle<User> h...
2018-10-07 18:02:13 466
原创 netty源码阅读之性能优化工具类之轻量级对象池Recycler
netty里面这个Recycler经常出现,例如在ByteBuf里面,由于我们经常创建很ByteBuf,所以回收利用ByteBuf很有必要。接下去我们就分析下这个Recycler的,主要分以下几部分分析:1、Recycler的使用2、Recycler的创建3、从Recycler里面获取对象4、在同一个线程里面回收对象5、在不同的线程里面回收对象6、在不同的线程里面获取对象...
2018-10-07 17:36:29 304
原创 netty源码阅读之性能优化工具类之FastThreadLocal的set方法实现
FastThreadLocal的set方法实现我们从以下三点分析:1、获取ThreadLocalMap2、直接通过索引set对象3、如果需要remove对象,那就remove我们还是从set方法源码开始: /** * Set the value for the current thread. */ public final void set(...
2018-10-07 14:55:20 327
原创 netty源码阅读之性能优化工具类之FastThreadLocal的get方法实现
FastThreadLocal的get方法实现我们通过以下三部分分析:1、获取ThreadLocalMap2、直接通过索引找到对象3、如果对象为空,那就初始化对象 我们从FastThreadLocal的get方法进入: /** * Returns the current value for the current thread */ pu...
2018-10-07 11:40:32 392
原创 netty源码阅读之性能优化工具类之FastThreadLocal的创建
创建的话我们直接从FastThreadLocal的构造方法进入: public FastThreadLocal() { index = InternalThreadLocalMap.nextVariableIndex(); }可见他是现在这里创建了index,这个index就是每个线程里面FastThreadLocal唯一的标识。看这个nextVari...
2018-10-07 10:47:59 374
原创 netty源码阅读之性能优化工具类之FastThreadLocal的使用
先说明FastThreadLocal使用的效果。1、比jdk原生的ThreadLocal的快2、不同线程之间能保证线程安全这是我们的用户代码:public class FastThreadLocalTest { private static FastThreadLocal<Object> threadLocal = new FastThreadLocal<...
2018-10-07 10:38:35 801
原创 netty源码阅读之性能优化工具类之FastThreadLocal
jdk的threadLocal我们之前分析过了,那么这个ThreadLocal凭什么说是“fast”呢,接下去我们会分析。分析FastThreadLocal我们又分了一下几部分:1、FastThreadLocal的使用2、FastThreadLocal的创建3、FastThreadLocal的get实现4、FastThreadLocal的set实现 ...
2018-10-06 21:24:44 362
原创 netty源码阅读之性能优化工具类
netty为了优化性能可谓是费尽心思了,所以我们必须学习学习,接下去就分析两个性能优化的工具类吧。1、fastThreadLocal2、Recycler
2018-10-06 21:19:04 695
原创 netty源码阅读之编码之flush刷新buffer队列
flush也是从headContext的unsafe的flush开始的: @Override public void flush(ChannelHandlerContext ctx) throws Exception { unsafe.flush(); }然后看unsafe的flush: @Ove...
2018-10-06 21:15:38 763
原创 netty源码阅读之编码之write写buffer队列
不管我们之前处理没处理我们的对象,也就是说不管我们有没有使用编码器,wriiteAndFlush之后,最终都会调用到headcontext的write和flush方法。我们把这个headcontext的方法分为以下几个步骤:1、direct化ByteBuf2、插入写队列3、设置写状态这是我们headContext的write方法: @Override ...
2018-10-06 20:31:02 1982
原创 netty源码阅读之编码之MessageToByteEncoder
MessageToByteEncoder的write过程,我们分析以下几步:1、匹配对象2、分配内存3、编码实现4、释放对象5、传播数据6、释放内存源码在这里: @Override public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) thro...
2018-10-02 18:36:00 1120
原创 netty源码阅读之编码之writeAndFlush抽象步骤
我们首先把对象变成字节流,最终写到socket底层的流程 在pipeline中,从tail节点开始传播,业务流程biz这个hander处理完之后,调用writeAndFlush把对象user传递过去;然后有个encode编码器把user编码成bytebuf;最后在head里面把bytebuf变成二进制调用jdk底层的写方法写到网络里面去。我们写了一个用户代码,启动客户端:pu...
2018-10-02 11:53:04 1271
原创 netty源码阅读之编码
编码的文章主要有以下几篇:1、writeAndFlush抽象步骤2、抽象编码器MessageToByteEncoder3、写buffer队列4、刷新buffer队列
2018-10-02 11:02:09 286
原创 netty源码阅读之解码之基于长度域解码器分析
基于长度域解码器LengthFieldBasedFrameDecoder我们主要分析以下三点:1、计算需要抽取的数据包的长度2、跳过字节逻辑处理3、丢弃模式下的处理首先源码还是LengthFieldBasedFrameDecoder的decode方法: /** * Create a frame out of the {@link ByteBuf} and re...
2018-10-01 12:00:52 1197
原创 netty源码阅读之解码之基于长度域解码器参数分析
这篇文章我们放松一点,只分析基于长度域解码器的几个参数,lengthFieldOffset :长度域的偏移量,也就是长度域要从什么地方开始lengthFieldLength:长度域的长度,也就是长度域占多少个字节lengthAdjustment:长度域的值的调整,也就是我们去到长度域里面的值,然后还要做多少调整才是符合要求的,这个值可以是正值,可以是负值,正值表示还要加多少,负值表示还...
2018-09-30 18:33:19 978
原创 netty源码阅读之解码之基于分隔符解码器分析
基于分隔符解码器DelimiterBasedFrameDecoder也算是比较简单的,和基于行解码器差不多一样分析既可,首先我们看一个构造函数: public DelimiterBasedFrameDecoder(int maxFrameLength, ByteBuf... delimiters) { this(maxFrameLength, true, delimit...
2018-09-30 17:27:05 496
原创 netty源码阅读之解码之行解码器分析
行解码器LineBasedFrameDecoder,我们首先看这个类的一些成员变量:/** * A decoder that splits the received {@link ByteBuf}s on line endings. * <p> * Both {@code "\n"} and {@code "\r\n"} are handled. * For a more...
2018-09-29 21:53:23 739
原创 storm提交任务成功却没有执行任务
最近storm的任务需要修改,我提交上strom集群去了,提示我提交成功了,但是任务没有执行,num worker和task等都为0。首先我再提交之前的任务,也出现这个问题,那么说明问题出现在集群上面。我看了一下ui那里的supervisor summary的slots有4个,used slots也是4个,这个slot就是worker,worker都占满了,当然任务没办法执行。再看下s...
2018-09-27 09:56:03 1325
原创 netty源码阅读之解码之基于固定长度解码器分析
固定长度解码器FixedLengthFrameDecoder比较简单,我们看下它类的注释:/** * A decoder that splits the received {@link ByteBuf}s by the fixed number * of bytes. For example, if you received the following four fragmented p...
2018-09-25 16:48:26 522
原创 netty源码阅读之解码之抽象解码器ByteMessageDecoder
ByteMessageDecoder是所有解码器的基类,它主要通过以下步骤进行解码:1、累加字节流2、调用子类的decode方法进行解析3、将解析到的ByteBuf向下传播我们看ByteMessageDecoder的channelRead方法,这个方法就是解码的开始: @Override public void channelRead(ChannelHandle...
2018-09-25 16:26:09 513
原创 netty源码阅读之解码
netty编码我们分以下几点分析:1、抽象解码器ByteToMessageDecoder2、基于固定长度解码器分析3、行解码器分析4、基于分隔符解码器分析5、基于长度域解码器参数分析6、基于长度域解码器分析...
2018-09-13 11:08:32 380
原创 canal数据同步搭建及踩坑记录
最近开始做canal数据同步方案。canl的原理就是伪装成mysql的slave,然后悄悄地“偷数据”,复制数据吧。至于canal的搭建,自行查看官网mysql添加上配置并且赋上权限之后,最后canal的配置,一般只需要修改conf/example/instance.properties的这四个地方: canal.instance.mysql.slaveId = 1234 ca...
2018-09-12 11:55:32 35839
原创 netty源码阅读之ByteBuf之ButeBuf内存的释放
我们这一篇文章要使用的用户代码如下: public static void main(String[] args) { PooledByteBufAllocator allocator = PooledByteBufAllocator.DEFAULT; ByteBuf byteBuf = allocator.directBuffer(16); ...
2018-09-09 23:25:58 3658
原创 netty源码阅读之ByteBuf之内存subpage级别内存的分配
subpage级别的内存分配的主要方法为:allocateTiny()。主要分为以下三个步骤:1、定位一个subpage对象2、初始化subpage3、初始化pooledByteBuf这一次,我们的用户代码是分配16B的内存public class Test { public static void main(String[] args) { Po...
2018-09-09 17:44:22 639
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人