<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[youaremoon的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/youaremoon</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; youaremoon]]></copyright><item><title><![CDATA[找出耗CPU的java线程脚本-优化版]]></title><link>https://blog.youkuaiyun.com/youaremoon/article/details/77461943</link><guid>https://blog.youkuaiyun.com/youaremoon/article/details/77461943</guid><author>youaremoon</author><pubDate>Mon, 21 Aug 2017 23:47:20 +0800</pubDate><description><![CDATA[查找java进程中耗CPU的线程，分为以下三步：

1.列出进程id
对应的线程
id

ps -mp {pid} -o THREAD,tid,time


2.将cpu
占用高的线程
id找出并转换为16进制

printf “%x\n” {tid}


3.打印出有问题的线程
jstack {pid} |grep {tid} -A 30


这样的方式有]]></description><category></category></item><item><title><![CDATA[dubbo参数调优说明]]></title><link>https://blog.youkuaiyun.com/youaremoon/article/details/51884644</link><guid>https://blog.youkuaiyun.com/youaremoon/article/details/51884644</guid><author>youaremoon</author><pubDate>Wed, 13 Jul 2016 22:28:50 +0800</pubDate><description><![CDATA[dubbo作为一个服务治理框架，功能比较完善（相对），性能也还过得去。但很多朋友在使用dubbo的时候，只是简单的参考官方说明进行搭建，并没有过多的去思考一些关键参数的意义（也可能是时间紧任务多，没空出来研究），最终做出来的效果不可预知。 这里我根据目前我们项目的使用情况列出几个性能调优的参数，供大家参考。
        在介绍参数之前，我们先了解下dubbo中配置的优先级，以免出现调优参数设]]></description><category></category></item><item><title><![CDATA[dubbo源码分析-consumer端6-数据发送与接收]]></title><link>https://blog.youkuaiyun.com/youaremoon/article/details/51520144</link><guid>https://blog.youkuaiyun.com/youaremoon/article/details/51520144</guid><author>youaremoon</author><pubDate>Thu, 07 Jul 2016 00:28:58 +0800</pubDate><description><![CDATA[consumer端的数据经过处理后，最终进入发送的流程。接下来我们继续跟着数据的流向进行分析。 首先进入到了DubboInvoker，DubboInvoker中包含了多个ExchangeClient， 每个ExchangeClient都对应了一个物理连接，同一个DubboInvoker中的所有ExchangeClient都是连接的同一个ip/port。DubboInvoker循环的从Exchang]]></description><category></category></item><item><title><![CDATA[redis集群客户端JedisCluster优化 - 管道(pipeline)模式支持]]></title><link>https://blog.youkuaiyun.com/youaremoon/article/details/51751991</link><guid>https://blog.youkuaiyun.com/youaremoon/article/details/51751991</guid><author>youaremoon</author><pubDate>Fri, 24 Jun 2016 18:26:50 +0800</pubDate><description><![CDATA[redis集群客户端JedisCluster优化 - 管道(pipeline)模式支持Redis在3.0版正式引入了集群这个特性，扩展变得非常简单。然而当你开心的升级到3.0后，却发现有些很好用的功能现在工作不了了， 比如我们今天要聊的pipeline功能。
我们知道，普通的情况下，redis client与server之间采用的是请求应答的模式，即：
  Client: command1]]></description><category></category></item><item><title><![CDATA[dubbo源码分析-consumer端5-Filter]]></title><link>https://blog.youkuaiyun.com/youaremoon/article/details/51226862</link><guid>https://blog.youkuaiyun.com/youaremoon/article/details/51226862</guid><author>youaremoon</author><pubDate>Sat, 07 May 2016 12:37:07 +0800</pubDate><description><![CDATA[前面一篇dubbo源码分析中，我们对ClusterInvoker和LoadBalance进行了分析，可以知道ClusterInvoker在一批Invoker中选择了一个Invoker来进行调用，而这里的Invoker是通过RegistryDirectory得到的，而RegistryDirectory返回的Invoker实现为：InvokerDelegete（RegistryDirectory的内部]]></description><category></category></item><item><title><![CDATA[dubbo源码分析-consumer端4-ClusterInvoker与LoadBalance]]></title><link>https://blog.youkuaiyun.com/youaremoon/article/details/51112284</link><guid>https://blog.youkuaiyun.com/youaremoon/article/details/51112284</guid><author>youaremoon</author><pubDate>Sat, 23 Apr 2016 16:10:13 +0800</pubDate><description><![CDATA[dubbo中提供了多种集群调用策略：
        1、FailbackClusterInvoker :  失败自动恢复，后台记录失败请求，定时重发，通常用于消息通知操作;
        2、FailfastClusterInvoker: 快速失败，只发起一次调用，失败立即报错，通常用于非幂等性的写操作;
        3、FailoverClusterInvoker: 失败转移，当出]]></description><category></category></item><item><title><![CDATA[dubbo源码分析-consumer端4-MockClusterInvoker]]></title><link>https://blog.youkuaiyun.com/youaremoon/article/details/50837913</link><guid>https://blog.youkuaiyun.com/youaremoon/article/details/50837913</guid><author>youaremoon</author><pubDate>Fri, 11 Mar 2016 08:56:49 +0800</pubDate><description><![CDATA[在前面几篇文章中，我们分析了consumer端的代理生成过程。创建完成后，应用就可以进行调用了，调用的代码如下：
  // 代理类中的sayHello方法
  public String sayHello(String paramString) {  
    // 将调用时的参数传入arrayOfObject中
    Object[] arrayOfObject = new Object]]></description><category></category></item><item><title><![CDATA[dubbo源码分析-consumer端3-Invoker创建流程]]></title><link>https://blog.youkuaiyun.com/youaremoon/article/details/50826649</link><guid>https://blog.youkuaiyun.com/youaremoon/article/details/50826649</guid><author>youaremoon</author><pubDate>Tue, 08 Mar 2016 14:04:19 +0800</pubDate><description><![CDATA[从前面一篇创建注册中心的流程当中，我们知道在从注册中心获取到provider的连接信息后，会通过连接创建Invoker。代码见com.alibaba.dubbo.registry.integration.RegistryDirectory的toInvokers方法：
// protocol实现为com.alibaba.dubbo.rpc.Protocol$Adpative，   
//   之前]]></description><category></category></item><item><title><![CDATA[javassist使用中遇到的问题记录]]></title><link>https://blog.youkuaiyun.com/youaremoon/article/details/50766972</link><guid>https://blog.youkuaiyun.com/youaremoon/article/details/50766972</guid><author>youaremoon</author><pubDate>Tue, 01 Mar 2016 11:07:41 +0800</pubDate><description><![CDATA[Javassit提供了运行时操作Java字节码的方法，其效率低于asm。javassist主要是提供了代码级别的修改(也有bytecode级别)，相比与asm的字节码级别的修改，学习成本低，开发效率高。因此，在实际应用中javassist是一个非常不错的选择。以下是在使用javassist的过程中碰到的问题及处理方法：
        1、ClassLoader问题]]></description><category></category></item><item><title><![CDATA[dubbo源码分析-consumer端2-创建注册中心]]></title><link>https://blog.youkuaiyun.com/youaremoon/article/details/50731139</link><guid>https://blog.youkuaiyun.com/youaremoon/article/details/50731139</guid><author>youaremoon</author><pubDate>Mon, 29 Feb 2016 14:27:41 +0800</pubDate><description><![CDATA[前面一篇文章我们分析了consumer代理的生成。在代理生成的过程中，会创建注册服务(com.alibaba.dubbo.registry.Registry)。通过注册服务提供url注册、订阅、查找的功能。本篇我们详细的看看注册中心的创建过程]]></description><category></category></item><item><title><![CDATA[dubbo源码分析-consumer端1-consumer代理生成]]></title><link>https://blog.youkuaiyun.com/youaremoon/article/details/50601889</link><guid>https://blog.youkuaiyun.com/youaremoon/article/details/50601889</guid><author>youaremoon</author><pubDate>Wed, 24 Feb 2016 14:56:47 +0800</pubDate><description><![CDATA[主要介绍dubbo的consumer代理类生成流程]]></description><category></category></item><item><title><![CDATA[netty5笔记-总体流程分析5-客户端连接过程]]></title><link>https://blog.youkuaiyun.com/youaremoon/article/details/50538666</link><guid>https://blog.youkuaiyun.com/youaremoon/article/details/50538666</guid><author>youaremoon</author><pubDate>Tue, 26 Jan 2016 18:00:52 +0800</pubDate><description><![CDATA[前面几篇文章，我们从服务端的视角，分析了从启动到接收连接，到连接的read-write-close。现在我们开始切换到客户端的视角，看看客户端连接服务端的一些实现细节。
还是从snoop的example代码开始，见HttpSnoopClient（稍有修改）]]></description><category></category></item><item><title><![CDATA[netty5笔记-总体流程分析4-NioSocketChannel之服务端视角]]></title><link>https://blog.youkuaiyun.com/youaremoon/article/details/50509563</link><guid>https://blog.youkuaiyun.com/youaremoon/article/details/50509563</guid><author>youaremoon</author><pubDate>Wed, 13 Jan 2016 11:40:19 +0800</pubDate><description><![CDATA[NioSocketChannel之服务端视角

上篇文章对NioServerSocketChannel进行了分析，了解了一个客户端连接在netty中是如何接收的。本篇我们将详细的了解服务端收到的连接的整个生命周期。需要说明的是由于采用的是服务端视角，因此一个连接的生命周期主要包括：


创建
读取数据
写数据
关闭






创建

快捷键


加粗    Ctrl + B 
斜体    Ctr]]></description><category></category></item><item><title><![CDATA[netty5笔记-总体流程分析3-NioServerSocketChannel]]></title><link>https://blog.youkuaiyun.com/youaremoon/article/details/50488092</link><guid>https://blog.youkuaiyun.com/youaremoon/article/details/50488092</guid><author>youaremoon</author><pubDate>Sat, 09 Jan 2016 15:23:32 +0800</pubDate><description><![CDATA[前面我们讲了server的启动过程，同时介绍了其中非常重要的几个概念,ChannelPipeline,ChannelHandlerContext等。接下来我们看看server启动起来以后是如何运转的。]]></description><category></category></item><item><title><![CDATA[netty5笔记-总体流程分析3-ChannelHandlerContext]]></title><link>https://blog.youkuaiyun.com/youaremoon/article/details/50449867</link><guid>https://blog.youkuaiyun.com/youaremoon/article/details/50449867</guid><author>youaremoon</author><pubDate>Sat, 02 Jan 2016 23:29:41 +0800</pubDate><description><![CDATA[上面一篇文章介绍了ChannelPipeline，它维护了一个有序的ChannelHandler列表，但并非是直接关联，而是通过维护ChannelHandlerContext进行关联。ChannelPipeline的每一个节点都是一个ChannelHandlerContext实例，不存在线程安全问题，而对应的ChannelHandler如果未标记Sharable也是新建的实例，也不存在线程安全问题]]></description><category></category></item><item><title><![CDATA[netty5笔记-总体流程分析2-ChannelPipeline]]></title><link>https://blog.youkuaiyun.com/youaremoon/article/details/50414114</link><guid>https://blog.youkuaiyun.com/youaremoon/article/details/50414114</guid><author>youaremoon</author><pubDate>Sun, 27 Dec 2015 21:20:26 +0800</pubDate><description><![CDATA[上一篇文章中，我们介绍了ServerBootstrap的启动过程，在这个过程中引出了一个很重要的类ChannelPipeline。如果说内存池，线程模型是netty的基础，我们接触的相对来说并不是那么直接，那么ChannelPipeline则是我们开发中直接能够接触到的概念，如果对其不了解，很容易造成一些不正确的使用姿势或一些然并卵的优化。现在我们就来看看ChannelPipeline的作用到底是]]></description><category></category></item><item><title><![CDATA[netty5笔记-总体流程分析1-ServerBootstrap启动]]></title><link>https://blog.youkuaiyun.com/youaremoon/article/details/50371221</link><guid>https://blog.youkuaiyun.com/youaremoon/article/details/50371221</guid><author>youaremoon</author><pubDate>Mon, 21 Dec 2015 12:29:39 +0800</pubDate><description><![CDATA[前面我们分析了netty内存池、线程模型，比较难的两个点已经被一一消化，接下来我们开始进入大家最关心的环节，总体流程分析。 这里我选了io.netty.example.http.snoop来作为分析的入口，分别从server端、client端的维度来看看netty是如果设计的。这里你将了解比较详细的netty处理流程，让你在今后的应用中不再感到疑惑 。 如果还有不清楚的地方，可以直接交流，通过交流]]></description><category></category></item><item><title><![CDATA[netty5笔记-线程模型4-无锁队列MpscLinkedQueue]]></title><link>https://blog.youkuaiyun.com/youaremoon/article/details/50351929</link><guid>https://blog.youkuaiyun.com/youaremoon/article/details/50351929</guid><author>youaremoon</author><pubDate>Fri, 18 Dec 2015 15:10:27 +0800</pubDate><description><![CDATA[NioEventLoop里面使用了MpscLinkedQueue作为taskQueue，替换了父类中默认的LinkedBlockingQueue队列。taskQueue主要用于存放可执行任务，其调用的频率非常高，因此使用一个更高效的队列能带来很大的收益。 为什么在NioEvnetLoop里用MpscLinkedQueue替换了LinkedBlockingQueue，是使用了更好的算法？还是通过舍弃]]></description><category></category></item><item><title><![CDATA[netty5笔记-concurrent-FastThreadLocal]]></title><link>https://blog.youkuaiyun.com/youaremoon/article/details/50345651</link><guid>https://blog.youkuaiyun.com/youaremoon/article/details/50345651</guid><author>youaremoon</author><pubDate>Thu, 17 Dec 2015 19:05:16 +0800</pubDate><description><![CDATA[并发的一个很大的敌人就是锁，很多时候我们必须加锁来应对并发带来的线程安全问题。而ThreadLocal则给我们开辟了另外一个思路，将数据与线程关联，一个线程无法读到其他线程的数据， 这样的数据存储方式，自然就能线程安全了。 那么ThreadLocal本身还有没有可以挖掘的优化点呢，号称性能极高的netty告诉你，有！


        我们知道ThreadLocal的实现是在Thread里]]></description><category></category></item><item><title><![CDATA[netty5笔记-线程模型3-EventLoop]]></title><link>https://blog.youkuaiyun.com/youaremoon/article/details/50311341</link><guid>https://blog.youkuaiyun.com/youaremoon/article/details/50311341</guid><author>youaremoon</author><pubDate>Tue, 15 Dec 2015 10:17:17 +0800</pubDate><description><![CDATA[NioEventLoop相对NioEventLoopGroup来说就复杂很多了，需要一定的耐心来看这篇文章。
        首先从NioEventLoop的启动讲起，对于线程池来说，启动一般都是从第一个任务的添加开始的。经过跟踪，找到execute()方法在SingleThreadEventExecutor类中：
    public void execute(Runnable task)]]></description><category></category></item></channel></rss>