一步一步写APM(七)--Dubbo插件及跨服务的链构造

Dubbo插件比较简单,此处不做过多说明,阶段Tag:添加Dubbo插件 到目前为止已经有几种比较常见的插件了:Tomcat,Jdbc,Jedis,Dubbo。已经基本涵盖了大部分开发组件,当然还有其他的比如ES、grpc、http、jetty、mongodb、memcached等等,这些如果非特殊

Btrace使用教程

注意,测试过程中发现如果用Idea启动一个java程序然后再到命令行中执行btrace会失败,idea中会打印 java.io.FileNotFoundException: . (拒绝访问。) at java.util.zip.ZipFile.open(Native Method)

一步一步写APM(六)--Mysql插件

Jdbc拦截是一个比较特殊的情况 首先,我们需要拦截的依然是Jdbc的查询,更新等操作,具体涉及的函数就是:execute、executeQuery和executeUpdate。 但是对于Statement是有多种的,具体见:https://my.oschina.net/heweipo/blog/3

一步一步写APM(五)--数据的收集与简单展示

(四)中我们已经简单的构造出了链,现在我们想把数据收集起来 public class ContextManager { ... public static Span stopSpan(){ Span span = get().stopSpan();

一步一步写APM(四)--Jedis插件、线程内链的构造

一点修改和准备工作 在tomcat测试项目中添加jedis相关代码(需要本地开一个redis),代码省略 提取Enhancer公共部分 public abstract class PluginEnhancer { public abstract String getEnhanceClas

一步一步写APM(三)--拦截以及Interceptor重构

问题在前面的代码中,为了用最简单的代码理清逻辑以及实现功能,我们使用了很多的常量值,比如named("org.apache.catalina.core.StandardWrapperValve"),named("invoke");而且现在只能拦截某些类的某些方

一步一步写APM(二)--拦截Tomcat监控WebApp

知识准备,org.apache.catalina.core.StandardWrapperValve StandardWrapper代表的是一个Servlet,那么它也就是容器调用栈中的最终点.Http请求到达后进行的处理也不单单只是调用了Servlet的方法.它还经过了一层的过滤器.它对外服务与

一步一步写APM(一)--ByteBuddy初步应用及初步搭建

准备 前面我们已经通过相关知识知道一般APM项目都是通过javaagent来对原项目代码进行一些改造以实现调用链需要的相关操作-- 比如加入上下文,添加必要的调用监控数据。 我们的主要开发工具就是ByteBuddy 注意,本系列相关文章涉及的源码放在了github上,有些代码不会贴出,请查看源码。地

通过使用Byte Buddy便捷地创建Java Agent

现有的APM项目为了保证监控服务和被监控服务互相独立且对被监控服务有低侵入性甚至无侵入性,会采取javaagent的方法对原项目远吗进行一些“改造”以实现想要的功能--比如插入想要的数据,上下文操作。 Java agent是在另外一个Java应用(“目标”应用)加载class文件之前做拦截把字节码

线程池将守护线程转换成用户线程导致的tomcat shutdown失败

现象 上线过程中出现调用tomcat的shutdown.sh 卡住导致tomcat无法停止的情况。 执行了tomcat的shutdown脚本后,java进程仍然存在。其实无法停止不是tomcat问题,是应用有问题,否则可以跑一个空tomcat,保证shutdown百分之百生效。 先说一下tomcat

新版tomcat类加载机制改变导致的不同类加载器加载同一个类的实例赋值出错

出现问题 调用链部署过程中某个项目出现: Caused by: java.lang.IllegalArgumentException: Can not set static XXX field redis.clients.jedis.Jedis.delegate$5975b70 to XXX at

接下来准备总结的相关技术

准备总结 zookeeperByteBuddyElasticSearch调用链相关 & SpringCloudBTrace 同时优化 本网站的交互以及移动端适配

RPC服务追踪的原理与实践

在分布式服务化架构下,由于分布式服务间存在相互依赖,彼此协同来完成各类业务场景。下图是一个典型的业务场景,从前端发起一个请求,到最后的业务完成,需要经过很多环节,这些环节可能都是分布式服务的方式提供,部署在不同的服务器上进行。而在这种复杂的分布式服务场景下,为了定位问题、性能瓶颈查询、异常日志跟踪等

实测MD

分为四个模块 interface:接口定义,需要消费者和生产者分别引用service:生产者具体实现,这里使用mysqlprovider:生产者HTTP请求方式的Tomcat实现,可以通过调用接口实现和dubbo一样的功能,主要用于测试比较consumer:消费者,两种方式调用生产者服务:dubbo

sonar-pmd 插件添加 P3C 支持

Sonar 是一个用于代码质量管理的开放平台。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具。与持续集成工具(例如 Hudson/Jenkins 等)不同,Sonar 并不是简单地把不同的代码检查工具结果(例如 FindBugs,PMD 等)直接显示在 Web 页面

Nginx下载文件名进行重命名

首先,在上传文件的服务中为了保证上传的文件不会有文件名冲突的情况,一般会在服务器进行文件名重命名为乱码 但是下载的时候为了效率问题不会直接走tomcat而是走Nginx进行,那怎么让下载的时候拿到原始文件名呢? location ~* .*\.(rar|zip|doc|docx|ppt|pptx|x

Spring中的applicationContext与SpringMVC的xxx-servlet的区别

一直搞不明白两者的区别。 如果使用了SpringMVC,事实上,bean的配置完全可以在xxx-servlet.xml中进行配置。为什么需要applicationContext.xml?一定必须? 一、 因为直接使用了SpringMVC,所以之前一直不明白xxx-servlet.xml和applic

nginx使用proxy_pass反向代理时,cookie丢失的问题

场景: 公司的某个项目是tomcat的Java项目,在本地部署已经没有问题,部署到线上通过内网IP+端口访问没有问题。 接下来要做的就是映射成官网的一个二级域名,映射后测试发现怎么都登不上去,登录页面反复刷新就是不进去。 F12发现已经过了用户校验接口,然后发现浏览器Cookie为空,测试本地项目C

SpringMVC上传文件的三种方式

直接上代码吧,大伙一看便知 这时:commonsmultipartresolver 的源码,可以研究一下 http://www.verysource.com/code/2337329_1/commonsmultipartresolver.java.html 前台: <%@ page langu

context:component-scan 分开扫描的相关

背景:最近在搭建新工程的时候发现有些Spring的配置不是很了解,比如Spring 配置里面明明配置了component-scan,为啥Spring MVC配置文件还需要配置一下,这样岂不是多此一举?由于以前基本是在现有的工程上直接开发或者别的工程的配置文件直接拷贝过来,所以也没太关注这个问题。 于
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×