12 2019 档案

摘要:我们使用curator建立连接,curator有session维护,重试机制,对递归创建节点和删除节点有较好的支持: RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3); CuratorFramework client = C 阅读全文
posted @ 2019-12-31 15:58 soft.push("zzq") 阅读(1159) 评论(0) 推荐(0)
摘要:1 reactor网络服务模型 (1) handle (2)同步事件分离器 (3)dispatcher (4)事件处理器 2 reactor的两个线程组,其中一个是负责监听客户端连接事件,另一个负责将具体的事件处理接入netty的channelHandle责任链,进行数据入站出站。 3 责任链处理, 阅读全文
posted @ 2019-12-30 14:37 soft.push("zzq") 阅读(303) 评论(0) 推荐(0)
摘要:压力测试条件:16core(物理8核心) + 16G 机器将性能发挥到最好。 jmetter压测TCP也是不错的; 配置如下: 连接线程和channel处理链线程分别设置成1,都用单线程的方式进行,而实际处理业务逻辑则直接使用自定义线程池,自定义线程池线程数量为:core*2=16; 5000个客户 阅读全文
posted @ 2019-12-28 15:41 soft.push("zzq") 阅读(2212) 评论(1) 推荐(0)
摘要:收集医院设备信息时由于消息为较短的json字符串,所以我们使用netty的自定义协议进行简单的数据接收。 协议约定为:head(实际消息的字节长度)+body(实际需要解析的json数据) 解码器如下,分为两步骤,最后我们获取json字符串进行处理,如果想要使用byte[]直接解析,请忽略第二个解码 阅读全文
posted @ 2019-12-26 15:34 soft.push("zzq") 阅读(359) 评论(0) 推荐(0)
摘要:nio中ByteBuffer和netty中的ByteBuf相比确实后者更加的好用: (1)ByteBuf可以在用户使用数据区空间不足的情况下以2的指数倍扩容,相比ByteBuffer的char数组是final修饰的,一旦需要扩容只能人为手动干预,并且只能重新申请数组并copy才可以。 (2)Byte 阅读全文
posted @ 2019-12-24 10:33 soft.push("zzq") 阅读(594) 评论(0) 推荐(0)
摘要:在netty编程中我们绝大多数是要是用nio的,nio相比传统的io更加高效,而nio中核心概念离不开channel,buffer,selector三个重要的对象。 那么在netty中有一个channelPipeline的概念,表面理解起来是通道的意思,实际它是在数据传输过程中的通道容器。 之所以定 阅读全文
posted @ 2019-12-21 08:26 soft.push("zzq") 阅读(694) 评论(0) 推荐(0)
摘要:reactor中包含5个核心结构,那么从操作系统低层次的调度来看5部分是这样的。 (1)Handle(句柄资源描述符)本质是对客户端连接上来以后发生事件的处理机制,比如连接成功,读取数据,发送数据等状态。 (2)同步事件分离器,相对于nio来说可以理解为selector,对于客户端过来的事件需要一个 阅读全文
posted @ 2019-12-20 13:57 soft.push("zzq") 阅读(388) 评论(0) 推荐(0)
摘要:主要是通过AbstractByteBufAllocator类实现的ByteBuffer的申请。 代码如下: 会根据是否有Unsafe的类支持来判断是否需要使用“堆外内存”;如果配置了3种情况则不会使用 (1)io.netty.noUnsafe这个属性false (2)io.netty.tryUnsa 阅读全文
posted @ 2019-12-20 11:04 soft.push("zzq") 阅读(899) 评论(0) 推荐(0)
摘要:private static Map loadAllJarFromAbsolute(String directoryPath) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, IOException { File directory = n... 阅读全文
posted @ 2019-12-18 17:38 soft.push("zzq") 阅读(913) 评论(0) 推荐(0)
摘要:1 nginx的进程分为四种 master worker cacheLoader cacheManager。 实际接收请求的进程是 worker,master监控worker节点,之所以会多进程模式,也是保证高可用,某个进程挂掉后不影响集群正常工作 而cacheLoader cacheManager 阅读全文
posted @ 2019-12-11 11:11 soft.push("zzq") 阅读(175) 评论(0) 推荐(0)
摘要:1 http请求头referrer含义:通知服务器这个请求的来源url是什么,不过在ie7中发现过丢失的问题,使用window.location.href=url进行页面跳转会丢失,window.open一个新窗口也会出问题。 阅读全文
posted @ 2019-12-11 10:53 soft.push("zzq") 阅读(136) 评论(0) 推荐(0)
摘要:8核32G 3台 ELS机器,当时只给es配置了8G内存,es的总体数据量大小将近30G(查看GET /_cat/shards?v) 阅读全文
posted @ 2019-12-10 21:10 soft.push("zzq") 阅读(312) 评论(0) 推荐(0)
摘要:资源调度: (1)executor默认在集群中分散启动,可通过参数配置集中在某个work启动,不过分散启动有利于数据本地化。 (2)如果spark-submit提交任务时,如果不指定--executor-cores,则spark会在每个work中启动一个executor并消耗掉work中的所有cor 阅读全文
posted @ 2019-12-10 21:02 soft.push("zzq") 阅读(289) 评论(0) 推荐(0)
摘要:(1)maxConnections能接收的最大请求数(nio下默认1W,基本不用调整,足够了); (2)acceptCount在操作系统层面的请求堆积,linux操作系统下除了acceptCount参数队列以外还有其它的队列堆积请求(有需要的情况下可以增加)。 (3)还有就是我们处理请求的maxTh 阅读全文
posted @ 2019-12-10 11:43 soft.push("zzq") 阅读(163) 评论(0) 推荐(0)
摘要:1:mybatis首先构建SqlSessionFactory,这个工厂主要就是初始化与数据库操作有关的上下文信息。会收集xml中的配置,如environment,datasource,transactionManager,setting配置等等,而默认构建出来的是DefaultSqlSessionF 阅读全文
posted @ 2019-12-09 22:16 soft.push("zzq") 阅读(296) 评论(0) 推荐(0)
摘要:哨兵模式下有两种宕机状态,sdown和odown: (1)如果一个哨兵ping主节点,时间超过is-master-down-after-milliseconds配置的时间参数,该哨兵认为master已经sdown(主观宕机)。 (2)如果quorum数量的哨兵节点都认为主节点sdown,则哨兵的状态 阅读全文
posted @ 2019-12-07 10:13 soft.push("zzq") 阅读(326) 评论(0) 推荐(0)
摘要:(1)top 命令 -》查询出CPU使用率最高的 PID编号。 (2)top -H p PID编号 -》能查询出所有线程的CPU使用率的列表(线程编号也在PID列)。 (3)jstack xxxx(进程编号) -》列出当前进程所有线程的堆栈情况。 (4)将之前的线程编号转成16进制准确查找到指定线程 阅读全文
posted @ 2019-12-07 09:24 soft.push("zzq") 阅读(355) 评论(0) 推荐(0)
摘要:重入锁关键地带: 1:使用unsafe的cas方式对AQS中的state成员变量进行“原子加一”操作。 2:如果当前线程多次lock,相当于对state在原有值基础上继续加一操作;释放锁的条件为“原子减一”到0为止。 3:ReentrantLock在非公平锁问题: 严格上讲并不是完全的非公平,当线程 阅读全文
posted @ 2019-12-06 15:20 soft.push("zzq") 阅读(556) 评论(0) 推荐(0)
摘要:说起spring bean的初始化自然而然就离不开初始化阶段的循环引用;1 首先spring容器在启动后会创建一个beanFactory,new DefaultListableBeanFactory。 2 然后在spring容器启动过程中会调用核心的refresh方法,在这个方法中共调用了9个方法, 阅读全文
posted @ 2019-12-05 11:39 soft.push("zzq") 阅读(312) 评论(0) 推荐(0)
摘要:循环引用属性操作: 1)AbstractAutowireCapableBeanFactory类中的allowCircularReferences被设置为了false。 2)代码: AnnotationConfigApplicationContext a = new AnnotationConfigA 阅读全文
posted @ 2019-12-03 20:03 soft.push("zzq") 阅读(862) 评论(0) 推荐(0)