dispatcher

记录一次Flink作业异常的排查过程

让人想犯罪 __ 提交于 2020-08-10 03:51:20
本文来自: PerfMa技术社区 PerfMa(笨马网络)官网 最近2周开始接手apache flink全链路监控数据的作业,包括指标统计,业务规则匹配等逻辑,计算结果实时写入elasticsearch. 昨天遇到生产环境有作业无法正常重启的问题,我负责对这个问题进行排查跟进。 第一步,基础排查 首先拿到jobmanager和taskmanager的日志,我从taskmanager日志中很快发现2个基础类型的报错,一个是npe,一个是索引找不到的异常 elasticsearch sinker在执行写入数据的前后提供回调接口让作业开发人员对异常或者成功写入进行处理,如果在处理异常过程中有异常抛出,那么框架会让该task失败,导致作业重启。 npe很容易修复,索引找不到是创建索引的服务中的一个小bug,这些都是小问题。 重点是在日志中我看到另一个错误: java.lang.OutOfMemoryError: unable to create new native thread at java.lang.Thread.start0(Native Method) at java.lang.Thread.start(Unknown Source) at org.apache.flink.runtime.io.network.api.writer.RecordWriter.<init>

京东智联云在 Serverless 的探索

有些话、适合烂在心里 提交于 2020-08-08 18:41:31
本文整理自 ServerlessDay · China 大会 - 《京东智联云在 Serverless 的探索》的分享,讲师为京东智联云的 PaaS 产品负责⼈朱琅。 本文主要分为三部分: ⾸先会介绍下 Serverless 的概念和定义,期间会讲讲我个⼈对 Serverless 的理解; 第⼆部分,我会着重介绍下 Serverless 在京东智联云的应⽤; 最后,会讲述我对 Serverless 未来的展望。 Serverless 的概念和定义 提到 Serverless,⼤家基本上第⼀时间会想到的就是 AWS lambda,没错,让 Serverless 这个名称真正⽕起来的其实就是 AWS 推出的 FaaS 服务 -- Lambda,它是⼀个平台,允许你在云上允许独⽴的代码段,通过预先设置好的事件触发代码的运⾏。 除了 FaaS 之外,还有BaaS,虽然和 Blockchain as a Service 的缩写⼀样,但它其实是 Backend as a Service -- 后端即服务的缩写,⽆需编写/管理所有服务端组件,与虚拟机和容器相⽐,概念上更接近 SaaS(软件即服务),BaaS 服务都是领域通⽤的组件服务,通过 API 调⽤的⽅式来使⽤。 说完了定义,再来看下 Serverless 的发展史。 最早可以追溯到 2006 年,Zimki 推出的代码执⾏平台,它是

网络请求专题博客导航(不断更新直至完成)

筅森魡賤 提交于 2020-08-08 08:03:23
1.网络协议 1.DNS 2.TCP/IP 2. SpringCloud 2.1 Eureka server client 2.2 SpringGateway 3.Redis 4.MySQL 4.1 select执行过程 1. select语句执行过程-网络通信 2 select语句执行过程-缓存& 语法解析/预处理 3. select语句执行过程-优化器 4.2 insert/update 执行过程 5.Tomcat 5.1 Connector ProtocolHandler EndPoint Adapter 5.2 Container Pipeline valve 6. Java-NIO 6.1 Channel 6.2 Selector 6.3 buffer 7.Java-并发 7.1 线程 7.2 锁 8. SpringMVC 2. DispatcherServlet是个什么 2.1 Dispatcher请求过程2-doDispatch 2.2 Dispatcher请求过程-获取HandlerAdapter 2.3 Dispatcher请求过程-执行Adapter 3. DispatcherServlet 初始化 3.1 DispatcherServlet 初始化-initHandlerMappings/initHandlerAdapters ps:更新顺序不按以上顺序更新

CGLIB(Code Generation Library) 简介

北城以北 提交于 2020-08-06 06:29:48
CGLIB是一个功能强大,高性能的代码生成包。它为没有实现接口的类提供代理,为JDK的动态代理提供了很好的补充。通常可以使用Java的动态代理创建代理,但当要代理的类没有实现接口或者为了更好的性能,CGLIB是一个好的选择。 一、什么是 CGLIB? CGLIB是一个功能强大,高性能的代码生成包。它为没有实现接口的类提供代理,为JDK的动态代理提供了很好的补充。通常可以使用Java的动态代理创建代理,但当要代理的类没有实现接口或者为了更好的性能,CGLIB是一个好的选择。 CGLIB作为一个开源项目,其代码托管在github,地址为:https://github.com/cglib/cglib 二、CGLIB 原理 CGLIB 原理:动态生成一个要代理类的子类,子类重写要代理的类的所有不是final的方法。在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势织入横切逻辑。它比使用java反射的JDK动态代理要快。 CGLIB 底层:使用字节码处理框架ASM,来转换字节码并生成新的类。不鼓励直接使用ASM,因为它要求你必须对JVM内部结构包括class文件的格式和指令集都很熟悉。 CGLIB缺点:对于final方法,无法进行代理。 三、CGLIB 的应用 广泛的被许多AOP的框架使用,例如Spring AOP和dynaop。Hibernate使用CGLIB来代理单端single

js-signals学习以及应用

心不动则不痛 提交于 2020-08-05 02:40:47
说在前面:写js时候,当一个变量一旦发生变化,就自动执行相应的程序,而不用手动执行, js-signals可以很方便的解决这个问题。 一.js-signals简介   js-signals是用于在JavaScript中的软件组件之间定义和触发基于事件的消息的库, 它是一个类似于Event Emitter / Dispatcher或Pub / Sub系统的 事件/消息系统,主要区别在于每个事件类型都有自己的控制器功能,而不依赖于字符串来广播/订阅事件,它还具有通常在其他系统上不可用的一些额外功能。   本人因为项目需要,寻找关于js-signals的学习资料,发现都是英文的,所以自己写个学习小结,也希望帮助后来需要学习的同学们。后面第三部分用户指南,会详细介绍js-signals的具体用法。 github: https://github.com/millermedeiros/js-signals example: http://www.javascriptoo.com/js-signals 官方使用详解: https://millermedeiros.github.io/js-signals/ 官方documentation :https://millermedeiros.github.io/js-signals/docs/ 作者博客: http://blog

guava EventBus 学习二 源码

人走茶凉 提交于 2020-07-29 02:08:48
上篇 介绍了guava包中的event bus的使用, 本篇深入源码了解实现细节 EventBus 了解 首先当然要看EventBus类, 类上的注释说了很多, 总结如下: 1 EventBus保证在多线程环境下, 不会同时访问订阅者, 除非订阅者标注了AllowConcurrentEvents注解. 如果没有使用这个注解, 订阅者不需要担心消息重入的问题. 2 消息接收方法只能接收一个参数, 而且会根据消息类型路由消息到指定的订阅者. 如果消息类型存在父子关系, 那么发送子类消息, 父类订阅者也会收到. 3 当执行call方法时, 所有该事件的订阅者会顺序执行, 如果一个订阅者处理耗时(比如数据库操作), 那么整个线程会阻塞, 为了解决这个问题, 我们一来可以尽量减少订阅者的耗时操作, 比如可以异步. 另一种就是可以使用AsyncEventBus, AsyncEventBus采用多线程执行订阅者方法. 4 发出消息后, 如果没有任何消费者消费, 那么认为这个消息是"dead". 我们定义了DeadEvent类来专门处理这些消息, 我们可以监听这类的消息. 如果订阅者监听的消息是Object, 那么会收到所有的消息, 就不存在"dead" 消息了. EventBus 属性如下 // event bus 标识, 就是个名字 private final String

聊聊puma的DefaultTaskExecutor

本小妞迷上赌 提交于 2020-07-28 10:11:24
序 本文主要研究一下puma的DefaultTaskExecutor TaskExecutor puma/puma/src/main/java/com/dianping/puma/taskexecutor/TaskExecutor.java public interface TaskExecutor extends LifeCycle { boolean isStop(); boolean isMerging(); void stopUntil(long timestamp); void cancelStopUntil(); void setContext(PumaContext context); void initContext(); PumaContext getContext(); String getTaskId(); void setTaskId(String taskId); String getTaskName(); void setTaskName(String taskName); String getDefaultBinlogFileName(); void setDefaultBinlogFileName(String binlogFileName); Long getDefaultBinlogPosition(); void

Laravel模型事件的实现原理详解

旧巷老猫 提交于 2020-07-28 03:59:16
模型事件在 Laravel 的世界中,你对 Eloquent 大多数操作都会或多或少的触发一些模型事件,下面这篇文章主要给大家介绍了关于Laravel模型事件的实现原理,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴。 前言 Laravel的ORM模型在一些特定的情况下,会触发一系列的事件,目前支持的事件有这些:creating, created, updating, updated, saving, saved, deleting, deleted, restoring, restored,那么在底层是如何实现这个功能的呢? 下面话不多说了,来一起看看详细的介绍吧。 一.如何使用模型事件 先来看看如何使用模型事件,文档里面写了两种方法,实际上总共有三种方式可以定义一个模型事件,这里以saved事件来做例子,其他事件都一样。 1.events属性 直接上代码: class User extends Authenticatable { use Notifiable; protected $events = [ 'saved' => UserSaved::class, ]; } 这个比较难以理解,而且文档并没有详细说明,刚开始以为saved被触发后会调用UserSaved里面的handle方法,实际上并不是。这个数组只是对事件做的一个映射

JVM源码分析之Attach机制实现完全解读

回眸只為那壹抹淺笑 提交于 2020-07-27 04:32:40
本文来自: PerfMa技术社区 PerfMa(笨马网络)官网 Attach是什么 在讲这个之前,我们先来点大家都知道的东西,当我们感觉线程一直卡在某个地方,想知道卡在哪里,首先想到的是进行线程dump,而常用的命令是jstack ,我们就可以看到如下线程栈了 大家是否注意过上面圈起来的两个线程,”Attach Listener”和“Signal Dispatcher”,这两个线程是我们这次要讲的Attach机制的关键,先偷偷告诉各位,其实Attach Listener这个线程在jvm起来的时候可能并没有的,后面会细说。 那Attach机制是什么?说简单点就是jvm提供一种jvm进程间通信的能力,能让一个进程传命令给另外一个进程,并让它执行内部的一些操作,比如说我们为了让另外一个jvm进程把线程dump出来,那么我们跑了一个jstack的进程,然后传了个pid的参数,告诉它要哪个进程进行线程dump,既然是两个进程,那肯定涉及到进程间通信,以及传输协议的定义,比如要执行什么操作,传了什么参数等 Attach能做些什么 总结起来说,比如内存dump,线程dump,类信息统计(比如加载的类及大小以及实例个数等),动态加载agent(使用过btrace的应该不陌生),动态设置vm flag(但是并不是所有的flag都可以设置的,因为有些flag是在jvm启动过程中使用的,是一次性的)

分享一个新出炉的JVM里不痛不痒的BUG(Attach机制相关)

扶醉桌前 提交于 2020-07-25 15:48:24
本文来自: PerfMa技术社区 PerfMa(笨马网络)官网 概述 老早之前写过一篇文章,关于attach机制的,可以看下这篇老文章了解一下 JVM源码分析之Attach机制实现完全解读 ,比如大家常用的jstack,jmap等工具的主要原理都和attach机制有关,在JVM里处理这些命令的线程主要是 Attach Listener 这个线程,这个线程在JVM里是唯一的,我之前也一直以为是唯一的,但是我们同事最近在做一个线程分析产品的时候,发现我们抓到了多个 Attach Listener 线程,这让我也很疑惑,我第一感觉是不可能,肯定是数据抓错了,直到亲眼看到了两个同名的 Attach Listener 线程我才不得不相信原来还真有这种情况。 问题分析 不过从 Attach Listener 的实现来看,它设计的初衷不应该是一个多线程的设计,于是我昨晚上又翻了一遍代码,发现还真可能存在这种情况。举个栗子,当我们很多人同时执行jstack的时候,就可能会发生,当然有个前提是之前都没有做过任何和attach相关的操作。 Attach Listener 线程默认情况下不会在JVM启动的时候就创建,当然也有一个JVM参数可以指定在JVM启动的时候就启动这个线程,这个就不会存在我们今天讨论的这个问题了,这个JVM参数是- XX:+StartAttachListener 。