横云断岭的专栏

日落黄金台金黄落日--微信公众号:横云断岭的专栏
私信 关注
横云断岭
码龄12年

在国内大型互联网公司负责6K+应用,80K+机器的Spring Boot微服务技术落地,关注开发体验,微服务,APM,应用诊断,dubbo开源。 Github: https://github.com/hengyunabc

  • 2,638,833
    被访问量
  • 178
    原创文章
  • 1,974
    作者排名
  • 1,127
    粉丝数量
  • 于 2008-09-10 加入CSDN
获得成就
  • 博客专家认证
  • 获得530次点赞
  • 内容获得464次评论
  • 获得342次收藏
荣誉勋章
TA的专栏
  • Arthas实践--排查Java疑难问题
    9篇
  • 深入Spring Boot
    16篇
  • Java
    91篇
  • C++
    16篇
  • spring
    22篇
  • spring-boot
    16篇
  • jvm
    8篇
  • Python
    3篇
  • Linux
    9篇
  • Qt
    2篇
  • 实践点滴
    15篇
  • 网络编程
    9篇
  • 算法
    3篇
  • 虚拟机
    4篇
  • 读书笔记
    1篇
  • 面试笔试相关
    2篇
  • MongoDB
    6篇
  • 代码
    2篇
  • Go
    4篇
  • mysql
    2篇
  • redis
    5篇
  • cpu
    2篇
  • 序列化
    1篇
  • Unicode
    1篇
  • ActiveMQ
    3篇
  • 资料
    1篇
  • tomcat
    3篇
  • 安全
    7篇
  • 缓存
    3篇
  • zookeeper
    2篇
  • lua
    1篇
  • 分布式
    1篇
  • 并行
    7篇
  • rest
  • web
    2篇
  • memcached
    2篇
  • http
    2篇
  • push
    2篇
  • ios
    2篇
  • ruby
    1篇
  • 日志收集
    2篇
  • javascript
    4篇
  • ElasticSearch
    2篇
  • xss
    2篇
  • Android
    4篇
  • kafka
    2篇
  • HBase
    1篇
  • proxy
  • devops
    1篇
  • jdk9
    1篇
  • dubbo
    2篇
  • grpc
    2篇
  • kotlin
    1篇
  • Arthas
    11篇
公众号
欢迎关注公众号:横云断岭的专栏
专注Java,Spring Boot,Dubbo,Arthas。 横云断岭的专栏
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

Arthas 3.4.6版本发布,全新版本的热更新功能

Arthas是Alibaba开源的Java诊断工具,深受开发者喜爱。•Github:https://github.com/alibaba/arthas•文档:https://arthas...
原创
0评论
0点赞
发布博客于 12 天前

微服务往事:Spring Cloud终于改了/为什么要用日期来做版本号

Spring Cloud终于改了最近Spring Cloud把版本号从A到Z的伦敦地铁站,改为以日期命令了。https://spring.io/blog/2020/04/17/sprin...
原创
0评论
0点赞
发布博客于 25 天前

SpringBoot Admin集成诊断利器Arthas实践

前言Arthas 是 Alibaba开源的Java诊断工具,具有实时查看系统的运行状况,查看函数调用参数、返回值和异常,在线热更新代码,秒解决类冲突问题、定位类加载路径,生成热点图,通过...
原创
1评论
1点赞
发布博客于 1 月前

应用诊断利器 Arthas 新版在线教程上线啦!

Arthas是Alibaba开源的Java诊断工具,支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,帮助开发人员解决基...
原创
0评论
0点赞
发布博客于 5 月前

是谁在调用我?使用arthas+jprofiler做复杂链路分析

背景Arthas是阿里巴巴开源的应用诊断利器,提供了profiler命令,可以生成热点火焰图。通过采样录制调用链路来做性能分析,极大提升了线上排查性能问题的效率。但是有一个问题,当asy...
原创
0评论
0点赞
发布博客于 5 月前

应用诊断利器Arthas ByteKit 深度解读(2):本地变量及参数绑定

前言本文通过分析ByteKit的本地变量绑定(LocalVarsBinding)处理代码,结合Java Opcode手册、asm代码、javap反汇编字节码等工具,深入讲解每个指令的用法...
原创
0评论
1点赞
发布博客于 6 月前

开源诊断利器Arthas ByteKit 深度解读(1):基本原理介绍

Arthas ByteKit 深度解读(1):基本原理介绍前言本文由整体到局部的思路展开分析Arthas ByteKit 字节码处理框架,结合类图和数据流图,介绍ByteKit字节码处理...
原创
1评论
3点赞
发布博客于 6 月前

Arthas实践--获取分布式追踪的traceId

ArthasArthas是Alibaba开源的Java诊断工具,深受开发者喜爱。Github:https://github.com/alibaba/arthas文档:https://al...
原创
0评论
0点赞
发布博客于 7 月前

阿里巴巴 Arthas 3.1.5版本支持火焰图,快速定位应用热点

ArthasArthas是Alibaba开源的Java诊断工具,深受开发者喜爱。Github:https://github.com/alibaba/arthas文档:ht...
原创
1评论
1点赞
发布博客于 2 年前

Arthas开源一周年,Github Star 16K,我们一直在坚持什么?

缘起最近看到一个很流行的标题,《开源XX年,star XXX,我是如何坚持的》。看到这样的标题,忽然发觉Arthas从2018年9月开源以来,刚好一年了,正好在这个秋高气爽的时节做下总结和回顾。Arthas是Alibaba开源的Java诊断工具,深受开发者喜爱。Github: https://github.com/alibaba/arthas文档:https://alibaba.gi...
原创
0评论
1点赞
发布博客于 2 年前

Arthas开源一周年,Github Star 160K,我们一直在坚持什么?

缘起最近看到一个很流行的标题,《开源XX年,star XXX,我是如何坚持的》。看到这样的标题,忽然发觉Arthas从2018年9月开源以来,刚好一年了,正好在这个秋高气...
原创
0评论
0点赞
发布博客于 2 年前

Alibaba Arthas 3.1.2版本发布:增加logger/heapdump/vmoption命令,支持tunnel server

Arthas是Alibaba开源的Java诊断工具,深受开发者喜爱。Github: https://github.com/alibaba/arthas文档:https://alibaba.github.io/arthasArthas 3.1.2版本持续增加新特性,下面重点介绍:logger/heapdump/vmoption/stop命令通过tunnel server连接不同网络...
原创
0评论
0点赞
发布博客于 2 年前

Arthas 3.1.2版本发布: 增加logger/heapdump/vmoption命令,支持tunnel server

Arthas是Alibaba开源的Java诊断工具,深受开发者喜爱。Github:https://github.com/alibaba/arthas文档:https://...
原创
0评论
0点赞
发布博客于 2 年前

一次配置,每天受益的Bash命令补全技巧

在bash里补全历史命令本文介绍本人觉得最好用的bash配置技巧,一次配置,每天受益。在bash里,最常见的搜索历史命令的办法是ctrl + r,但是这个步骤太多,比较麻...
原创
0评论
0点赞
发布博客于 2 年前

阿里巴巴Arthas源码分析--jad反编译原理

Arthas是阿里巴巴开源的Java应用诊断利器,本文介绍Arthas 3.1.1版本里jad命令的实现原理。https://github.com/alibaba/art...
原创
0评论
2点赞
发布博客于 2 年前

通过Heap dump巧妙排查Java JMX连接不上的问题

背景最近排查一个JMX本地连接问题,记录一下。我们的启动脚本在应用启动后,会通过JMX来动态检查应用状态,那么这里就需要动态启动JMX功能了。动态打开Java进程的JMX...
原创
0评论
0点赞
发布博客于 2 年前

Arthas实践:是哪个Controller处理了请求?

背景Arthas是阿里巴巴开源的Java诊断利器,深受开发者喜爱。https://github.com/alibaba/arthasArthas在线教程之前分享了Arthas怎样排查 404/401 的问题: http://hengyunabc.github.io/arthas-spring-boot-404-401/我们可以快速定位一个请求是被哪些Filter拦截的,或者请求最终是...
原创
0评论
2点赞
发布博客于 2 年前

Alibaba Arthas 3.1.1版本:trace支持行号/小幅改进

Arthas是Alibaba开源的Java诊断工具,深受开发者喜爱。Github: https://github.com/alibaba/arthas文档:https:/...
原创
0评论
0点赞
发布博客于 2 年前

阿里巴巴Arthas实践--jad/mc/redefine线上热更新一条龙

背景尽管在生产环境热更新代码,并不是很好的行为,很可能导致:热更不规范,同事两行泪。但很多时候我们的确希望能热更新代码,比如:线上排查问题,找到修复思路了,但应用重启之后,环境现场就变了,难以复现。怎么验证修复方案?又比如:本地开发时,发现某个开源组件有bug,希望修改验证。如果是自己编译开源组件再发布,流程非常的长,还不一定能编译成功。有没有办法快速测试?Arthas是阿里巴...
原创
6评论
1点赞
发布博客于 2 年前

阿里巴巴 Arthas 3.1.0版本:在线教程、内存编译器和强大的自动补全

Arthas是Alibaba开源的Java诊断工具,深受开发者喜爱。从Arthas上个版本发布,已经过去两个多月了,Arthas 3.1.0版本不仅带来大家投票出来的新LOGO,还带来强大的新功能和更好的易用性,下面一一介绍。Github: https://github.com/alibaba/arthas文档:https://alibaba.github.io/arthas在线教程...
原创
0评论
1点赞
发布博客于 2 年前

Alibaba Arthas 3.1.0版本:在线教程、内存编译器和强大的自动补全

ArthasArthas是Alibaba开源的Java诊断工具,深受开发者喜爱。从Arthas上个版本发布,已经过去两个多月了,Arthas 3.1.0版本不仅带来大家投...
原创
0评论
0点赞
发布博客于 2 年前

Alibaba Arthas实践--获取到Spring Context,然后为所欲为

背景Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。https://github.com/alibaba/arthasArthas提供了非常丰富的关于调用拦截的命令...
原创
0评论
0点赞
发布博客于 2 年前

深入Spring Boot:从JVM分析hibernate-validator NoClassDefFoundError

问题可重现的Demo代码:https://github.com/hengyunabc/spring-boot-inside/tree/master/demo-hibernate-vali...
原创
0评论
0点赞
发布博客于 2 年前

深入Spring Boot--使用Arthas排查Spring Boot应用404/401问题

背景在Java Web/Spring Boot开发时,很常见的问题是:网页访问404了,为什么访问不到?登陆失败了,请求返回401,到底是哪个Filter拦截了我的请求?碰到这种问题时,通常很头痛,特别是在线上环境时。本文介绍使用Alibaba开源的Java诊断利器Arthas,来快速定位这类Web请求404/401问题。https://github.com/alibaba/ar...
原创
0评论
0点赞
发布博客于 2 年前

Arthas实践--快速排查Spring Boot应用404/401问题

背景在Java Web/Spring Boot开发时,很常见的问题是:网页访问404了,为什么访问不到?登陆失败了,请求返回401,到底是哪个Filter拦截了我的请求?碰到这种问题时,...
原创
0评论
0点赞
发布博客于 2 年前

当Dubbo遇上Arthas:排查问题的实践

Apache Dubbo是Alibaba开源的高性能RPC框架,在国内有非常多的用户。Github: https://github.com/apache/incubator-dubbo文...
原创
0评论
0点赞
发布博客于 3 年前

当DUBBO遇上Arthas - 排查问题的实践

Apache Dubbo是Alibaba开源的高性能RPC框架,在国内有非常多的用户。Github: https://github.com/apache/incubator-dubbo文档:http://dubbo.incubator.apache.org/zh-cn/Arthas是Alibaba开源的应用诊断利器,9月份开源以来,Github Star数三个月超过6000。Gith...
原创
1评论
2点赞
发布博客于 3 年前

Alibaba应用诊断利器Arthas 3.0.5版本发布:提升全平台用户体验

Arthas从9月份开源以来,受到广大Java开发者的支持,Github Star数三个月超过6000,非常感谢用户支持。同时用户给Arthas提出了很多建议,其中反映最多的是:Windows平台用户体验不好Attach的进程和最终连接的进程不一致某些环境下没有安装Telnet,不能连接到Arthas Server本地启动,不需要下载远程(很多公司安全考虑)下载速度慢(默认从maven...
原创
0评论
2点赞
发布博客于 3 年前

深入Spring Boot:利用Arthas排查NoSuchMethodError

前言有时spring boot应用会遇到java.lang.NoSuchMethodError的问题,下面以具体的demo来说明怎样利用arthas来排查。Demo: https://github.com/hengyunabc/spring-boot-inside/tree/master/demo-NoSuchMethodError在应用的main函数里catch住异常,保证进程不退出很多...
原创
1评论
0点赞
发布博客于 3 年前

Arthas实践--使用redefine排查应用奇怪的日志来源

背景随着应用越来越复杂,依赖越来越多,日志系统越来越混乱,有时会出现一些奇怪的日志,比如:[] [] [] No credential found那么怎样排查这些奇怪的日志从哪里打印出来的呢?因为搞不清楚是什么logger打印出来的,所以想定位就比较头疼。下面介绍用Alibaba开源的应用诊断利器Arthas的redefine命令快速定位奇怪日志来源。Arthas: https://...
原创
1评论
0点赞
发布博客于 3 年前

Arthas实践--抽丝剥茧排查线上应用日志打满问题

现象在应用的 service_stdout.log里一直输出下面的日志,直接把磁盘打满了:23:07:34.441 [TAIRCLIENT-1-thread-1] DEBUG io.netty.channel.nio.NioEventLoop - Selector.select() returned prematurely 14 times in a row.23:07:34.460 [TA...
原创
0评论
0点赞
发布博客于 3 年前

使用Arthas抽丝剥茧排查线上应用日志打满问题

现象在应用的 service_stdout.log里一直输出下面的日志,直接把磁盘打满了:23:07:34.441 [TAIRCLIENT-1-thread-1] DEBUG io.ne...
原创
0评论
0点赞
发布博客于 3 年前

Alibaba开源Java诊断利器Arthas

ArthasArthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:这个类从哪个 jar 包加载的?为什么会报...
原创
0评论
0点赞
发布博客于 3 年前

深入Spring Boot:显式配置 @EnableWebMvc 导致静态资源访问失败

现象当用户在自己的spring boot main class上面显式使用了 @EnableWebMvc,发现原来的放在 src/main/resources/static 目录下面的静...
原创
0评论
0点赞
发布博客于 3 年前

深入Spring Boot系列

原理/使用spring boot应用启动原理分析spring boot executable jar/war 原理深入Spring Boot:ClassLoader的继承关系和影响深入Spring Boot:Spring Context的继承关系和影响深入Spring Boot:实现对Fat Jar jsp的支持深入Spring Boot:快速集成Dubbo + Hystrix正...
原创
0评论
3点赞
发布博客于 3 年前

深入Spring Boot:编写兼容Spring Boot1和Spring Boot2的Starter

前言Spring Boot 2正式发布已经有段时间,应用升级之前,starter先要升级,那么如何支持Spring Boot 2?为什么选择starter同时兼容spring boot 1和spring boot 2从用户角度来看如果不在一个starter里兼容,比如用版本号来区分,spring boot 1的用户使用1.*,spring boot 2用户使用2.*,这样用户...
原创
0评论
0点赞
发布博客于 3 年前

Kotlin里的Extension Functions实现原理分析

Kotlin里的Extension FunctionsKotlin里有所谓的扩展函数(Extension Functions),支持给现有的java类增加函数。https://kotlinlang.org/docs/reference/extensions.html比如给String增加一个hello函数,可以这样子写:fun String.hello(world : St...
原创
0评论
0点赞
发布博客于 3 年前

OpenJDK里的AsmTools简介

前言https://wiki.openjdk.java.net/display/CodeTools/asmtools 在OpenJDK里有一个AsmTools项目,用来生成正确的或者不正确的java .class文件,主要用来测试和验证。我们知道直接修改.class文件是很麻烦的,虽然有一些图形界面的工具,但还是很麻烦。以前我的办法是用ASMifier从.class文件生成as...
原创
0评论
1点赞
发布博客于 3 年前

思考gRPC :为什么是protobuf

背景谈到RPC,就避免不了序列化的话题。gRPC默认的序列化方式是protobuf,原因很简单,因为两者都是google发明的,哈哈。在当初Google开源protobuf时,很多人就期待是否能把RPC的实现也一起开源出来。没想到最终出来的是gRPC,终于补全了这一块。跨语言的序列化方案事实上的跨语言序列化方案只有三个: protobuf, thrift, json。...
原创
0评论
0点赞
发布博客于 3 年前

思考gRPC :为什么是HTTP/2

背景gRPC是google开源的高性能跨语言的RPC方案。gRPC的设计目标是在任何环境下运行,支持可插拔的负载均衡,跟踪,运行状况检查和身份验证。它不仅支持数据中心内部和跨数据中心的服务调用,它也适用于分布式计算的最后一公里,将设备,移动应用程序和浏览器连接到后端服务。https://grpc.io/https://github.com/grpc/grpcGRPC设计的动机...
原创
5评论
3点赞
发布博客于 3 年前

从JVM heap dump里查找没有关闭文件的引用

背景最近排查一个文件没有关闭的问题,记录一下。哪些文件没有关闭是比较容易找到的,查看进程的fd(File Descriptor)就可以。但是确定fd是在哪里被打开,在哪里被引用的就复杂点,特别是在没有重启应用的情况下。 在JVM里可以通过heap dump比较方便地反查对象的引用,从而找到泄露的代码。以下面简单的demo为例,Demo会创建一个临时文件,并且没有close掉:...
原创
0评论
0点赞
发布博客于 3 年前

深入Spring Boot:快速集成Dubbo + Hystrix

背景Hystrix 旨在通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。Hystrix具备拥有回退机制和断路器功能的线程和信号隔离,请求缓存和请求打包,以及监控和配置等功能。Dubbo是Alibaba开源的,目前国内最流行的java rpc框架。本文介绍在spring应用里,怎么把Dubbo和Hystrix结合起来使用。https://git...
原创
2评论
0点赞
发布博客于 3 年前

优化技巧:提前if判断帮助CPU分支预测

分支预测在stackoverflow上有一个非常有名的问题:[为什么处理有序数组要比非有序数组快?]( https://stackoverflow.com/questions/11227809/why-is-it-faster-to-process-a-sorted-array-than-an-unsorted-array),可见分支预测对代码运行效率有非常大的影响。现代CPU都支持分支...
原创
1评论
1点赞
发布博客于 3 年前

深入Spring Boot:实现对Fat Jar jsp的支持

spring boot 对于jsp支持的限制对于jsp的支持,Spring Boot官方只支持了war的打包方式,不支持fat jar。参考官方文档: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-web-applications.html#boot-feature...
原创
1评论
1点赞
发布博客于 3 年前

深入Spring Boot: 怎样排查 java.lang.ArrayStoreException

java.lang.ArrayStoreException 分析这个demo来说明怎样排查一个spring boot 1应用升级到spring boot 2时可能出现的java.lang.ArrayStoreException。demo地址:https://github.com/hengyunabc/spring-boot-inside/tree/master/demo-ArrayStor...
原创
4评论
4点赞
发布博客于 3 年前

从java9共享内存加载modules说起

jdk9后加载lib/modules的方式从jdk的代码里可以看出来,默认的实现加载lib/modules是用mmap来加载的。class NativeImageBuffer { static { java.security.AccessController.doPrivileged( new java.security.Priv...
原创
0评论
0点赞
发布博客于 3 年前

深入Spring Boot:排查@Transactional引起的NullPointerException

写在前面这个demo来说明怎么排查一个@Transactional引起的NullPointerException。https://github.com/hengyunabc/spring-boot-inside/tree/master/demo-Transactional-NullPointerException定位 NullPointerException 的代码Demo是一个简单的spring事
原创
3评论
0点赞
发布博客于 4 年前

深入Spring Boot:怎样排查expected single matching bean but found 2的异常

写在前面这个demo来说明怎么排查一个常见的spring expected single matching bean but found 2的异常。https://github.com/hengyunabc/spring-boot-inside/tree/master/demo-expected-single调试排查 expected single matching bean but found 2
原创
1评论
4点赞
发布博客于 4 年前

深入Spring Boot:怎样排查 Cannot determine embedded database driver class for database type NONE

写在前面这个demo来说明怎么一步步排查一个常见的spring boot AutoConfiguration的错误。调试排查 Cannot determine embedded database driver class for database type NONE 的错误把工程导入IDE里,直接启动应用,抛出来的异常信息是:Error starting ApplicationContext. T
原创
16评论
30点赞
发布博客于 4 年前

深入Spring Boot:Spring Context的继承关系和影响

前言对于一个简单的Spring boot应用,它的spring context是只会有一个。非web spring boot应用,context是AnnotationConfigApplicationContextweb spring boot应用,context是AnnotationConfigEmbeddedWebApplicationContextAnnotationConfigEmbe
原创
1评论
0点赞
发布博客于 4 年前

深入Spring Boot:ClassLoader的继承关系和影响

前言对spring boot本身启动原理的分析,请参考:http://hengyunabc.github.io/spring-boot-application-start-analysis/Spring boot里的ClassLoader继承关系可以运行下面提供的demo,分别在不同的场景下运行,可以知道不同场景下的Spring boot应用的ClassLoader继承关系。https://gith
原创
4评论
1点赞
发布博客于 4 年前

深入Spring Boot:那些注入不了的Spring占位符(${}表达式)

Spring里的占位符spring里的占位符通常表现的形式是:<bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource"> <property name="url" value="${jdbc.url}"/></bean>或者@Configuration@Impo
原创
0评论
4点赞
发布博客于 4 年前

深入JVM分析spring-boot应用hibernate-validator NoClassDefFoundError

问题可重现的Demo代码:demo.zip最近排查一个spring boot应用抛出hibernate.validator NoClassDefFoundError的问题,异常信息如下:Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.validator.internal.eng
原创
6评论
2点赞
发布博客于 4 年前

正确实现用spring扫描自定义的annotation

在使用spring时,有时候有会有一些自定义annotation的需求,比如一些Listener的回调函数。比如:@Servicepublic class MyService { @MyListener public void onMessage(Message msg){ }}一开始的时候,我是在Spring的ContextRefreshedEvent事件里,通过c
原创
2评论
5点赞
发布博客于 5 年前

详细分析罕见的ClassCircularityError异常导致的StackOverflowError

先打一个广告。greys是一个很不错的java诊断工具:https://github.com/oldmanpushcart/greys-anatomy最近尝试用greys来实时统计jvm里的异常生成数量,在增强Throwable时,发现应用会抛出StackOverflowError。下面记录详细的分析过程。在真正分析之前,先介绍JVM对反射方法调用的优化和greys的工作原理。JVM对反射方法调用的
原创
0评论
0点赞
发布博客于 5 年前

从java进程里dump出类的class文件的小工具--dumpclass

Serviceability Agent想要查看一些被增强过的类的字节码,或者一些AOP框架的生成类,就需要dump出运行时的java进程里的字节码。从运行的java进程里dump出运行中的类的class文件的方法,所知道的有两种用agent attatch 到进程,然后利用Instrumentation和ClassFileTransformer就可以获取 到类的字节码了。使用sd-jdi.ja
原创
0评论
0点赞
发布博客于 5 年前

应用内置embeded tomcat,并打包为fat jar的解决方案

需求大量的微服务框架引起了一大波embeded tomcat,executable fat jar的潮流。显然spring boot是最出色的解决方案,但是spring boot有两个不足的地方:不支持配置web.xml文件,对于旧应用迁移不方便一些配置在web.xml里配置起来很直观,放到代码里配置就难搞清楚顺序了。比如一些filter的顺序关系。spring boot的方案依赖spring
原创
4评论
3点赞
发布博客于 5 年前

spring boot executable jar/war 原理

spring boot executable jar/warspring boot里其实不仅可以直接以 java -jar demo.jar的方式启动,还可以把jar/war变为一个可以执行的脚本来启动,比如./demo.jar。把这个executable jar/war 链接到/etc/init.d下面,还可以变为linux下的一个service。只要在spring boot maven plug
原创
1评论
3点赞
发布博客于 5 年前

spring boot应用启动原理分析

spring boot quick start在spring boot里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启动的,不需要另外配置一个Web Server。如果之前没有使用过spring boot可以通过下面的demo来感受下。 下面以这个工程为例,演示如何启动Spring boot项目:git clone git@github.com:
原创
38评论
84点赞
发布博客于 6 年前

禁止JVM执行外部命令Runtime.exec -- 由Apache Commons Collections漏洞引发的思考

Apache Commons Collections远程代码执行漏洞最近出来一个比较严重的漏洞,在使用了Apache Commons Collections的Java应用,可以远程代码执行。包括最新版的WebLogic、WebSphere、JBoss、Jenkins、OpenNMS这些大名鼎鼎的Java应用。这个漏洞的严重的地方在于,即使你的代码里没有使用到Apache Commons Collec
原创
2评论
0点赞
发布博客于 6 年前

开源全局配置中心XDiamond

项目地址: https://github.com/hengyunabc/xdiamond简介全局配置中心,存储应用的配置项,解决配置混乱分散的问题。名字来源于淘宝的开源项目diamond,前面加上一个字母X以示区别。wiki设计思路在线演示地址:xdiamond.coding.io,登陆选择standard,用户名密码:admin/admin特性所见即所得,在管理界面上看到的所有配置即项目运行时的
原创
4评论
1点赞
发布博客于 6 年前

利用github搭建个人maven仓库

缘起之前看到有开源项目用了github来做maven仓库,寻思自己也做一个。研究了下,记录下。简单来说,共有三步:deploy到本地目录把本地目录提交到gtihub上配置github地址为仓库地址配置local file maven仓库deploy到本地maven可以通过http, ftp, ssh等deploy到远程服务器,也可以deploy到本地文件系统里。例如: <distribut
原创
5评论
6点赞
发布博客于 6 年前

扯谈spring mvc之WebApplicationContext的继承关系

spring mvc里的root/child WebApplicationContext的继承关系在传统的spring mvc程序里会有两个WebApplicationContext,一个是parent,从applicationContext.xml里加载的,一个是child,从servlet-context.xml里加载的。 两者是继承关系,child WebApplicationContext
原创
0评论
2点赞
发布博客于 6 年前

tomcat ssi配置及升级导致ssi include错误问题解决

最近tomcat升级版本时,遇到了ssi解析的问题,记录下解决的过程,还有tomcat ssi配置的要点。tomcat 配置SSI的两种方式Tomcat有两种方式支持SSI:Servlet和Filter。SSIServlet通过Servlet,org.apache.catalina.ssi.SSIServlet,默认处理”*.shtml”的URL。配置方式:修改tomcat的 conf/web.xm
原创
0评论
0点赞
发布博客于 6 年前

为什么基于TCP的应用需要心跳包(TCP keep-alive原理分析)

TCP keep-alive的三个参数用man命令,可以查看linux的tcp的参数:man 7 tcp其中keep-alive相关的参数有三个: tcp_keepalive_intvl (integer; default: 75; since Linux 2.4) The number of seconds between TCP keep-alive pr
原创
0评论
0点赞
发布博客于 6 年前

基于redis的分布式ID生成器

项目地址https://github.com/hengyunabc/redis-id-generator基于redis的分布式ID生成器。准备首先,要知道redis的EVAL,EVALSHA命令:http://redis.readthedocs.org/en/latest/script/eval.htmlhttp://redis.readthedocs.org/en/latest/script/ev
原创
23评论
5点赞
发布博客于 6 年前

Cookie & Session & CSRF

新blog地址:http://hengyunabc.github.io/cookie-and-session-and-csrf/在线幻灯片地址: Cookie & Session & CSRF
原创
0评论
0点赞
发布博客于 6 年前

防止页面被iframe恶意嵌套

新blog地址:http://hengyunabc.github.io/prevent-iframe-stealing/缘起在看资料时,看到这样的防止iframe嵌套的代码:try { if (window.top != window.self) { var ref = document.referer; if (ref.substring(0, 2) ===
原创
2评论
0点赞
发布博客于 6 年前

kafka manager安装

项目信息https://github.com/yahoo/kafka-manager这个项目比 https://github.com/claudemamo/kafka-web-console 要好用一些,显示的信息更加丰富,kafka-manager本身可以是一个集群。不过kafka-manager也没有权限管理功能。Kafka web console的安装可以参考之前的blog:http://b
原创
7评论
2点赞
发布博客于 6 年前

基于dropwizard/metrics ,kafka,zabbix构建应用统计数据收集展示系统

新blog地址:http://hengyunabc.github.io/about-metrics/想要实现的功能应用可以用少量的代码,实现统计某类数据的功能统计的数据可以很方便地展示metricsmetrics,按字面意思是度量,指标。举具体的例子来说,一个web服务器: - 一分钟内请求多少次? - 平均请求耗时多长? - 最长请求时间? - 某个方法的被调用次数,时长?以缓存为例
原创
0评论
1点赞
发布博客于 6 年前

一步一步用jenkins,ansible,supervisor打造一个web构建发布系统

新blog地址:http://hengyunabc.github.io/deploy-system-build-with-jenkins-ansible-supervisor/一步一步用jenkins,ansible,supervisor打造一个web构建发布系统。本来应该还有gitlab这一环节的,但是感觉加上,内容会增加很多。所以直接用github上的spring-mvc-showcase项目来
原创
0评论
1点赞
发布博客于 6 年前

netstat统计的tcp连接数与⁄proc⁄pid⁄fd下socket类型fd数量不一致的分析

新blog地址:http://hengyunabc.github.io/netstat-difference-proc-fd-socket-stat/最近,线上一个应用,发现socket数缓慢增长,并且不回收,超过警告线之后,被运维监控自动重启了。首先到zabbix上观察JVM历史记录,发现JVM-Perm space最近两周没有数据,猜测是程序从JDK7切换到JDK8了。问过开发人员之后,程序已经
原创
1评论
0点赞
发布博客于 6 年前

新blog地址: http://hengyunabc.github.io/

新blog地址http://hengyunabc.github.io/新blog切换到github.io 上,先试用一段时间。
原创
0评论
0点赞
发布博客于 6 年前

zookeeper 大量连接断开重连原因排查

 问题现象最后发现线上的zookeeper的日志zookeeper.out 文件居然有6G,后来设置下日志为滚动输出,参考:http://blog.csdn.net/hengyunabc/article/details/19006911但是改了之后,发现一天的日志量就是100多M,滚动日志一天就被冲掉了,这个不科学。再仔细查看下日志里的内容,发现有很多连接建立好,马上又断开:...
原创
19评论
17点赞
发布博客于 7 年前

HBase数据同步到ElasticSearch的方案

ElasticSearch的River机制ElasticSearch自身提供了一个River机制,用于同步数据。这里可以找到官方目前推荐的River:http://www.elasticsearch.org/guide/en/elasticsearch/rivers/current/但是官方没有提供HBase的River。其实ES的River非常简单,就是一个用户打包好的j
原创
5评论
0点赞
发布博客于 7 年前

Memcached 二进制协议(BinaryProtocol) incr指令泄露内存数据的bug

缘起最近有个分布式限速的需求。支付宝的接口双11只允许每秒调用10次。单机的限速,自然是用google guava的RateLimiter。http://docs.guava-libraries.googlecode.com/git-history/master/javadoc/com/google/common/util/concurrent/RateLimiter.html
原创
2评论
3点赞
发布博客于 7 年前

解决ActiveMQ的“Invalid broker URI”异常的历程

最近碰到一个问题,把解决的过程记录下来。故障原因同事的应用上线,Tomcat无法正常启动。抛出这样的异常:org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:|PropertyAccessException 1: org.springframewo
原创
0评论
1点赞
发布博客于 7 年前

kafka web console安装

貌似很多小伙伴都不能成功打包,共享下之前打包的文件:http://pan.baidu.com/s/1sjkE37J ========kafka自己居然没有还一个Web管理界面。。这里有个第三方的: https://github.com/claudemamo/kafka-web-console坑爹的是居然没有详细的安装步骤,只有一些简单的说明,对于不熟悉scala pla...
原创
7评论
1点赞
发布博客于 7 年前

移动App通讯协议及序列化方式的选择

简单列一下不同协议,序列化方式等的考虑。http还是私有协议?http协议优/缺点:在服务器端只需要提供一份接口,浏览器和app共用。在app中嵌入web view也很容易。http协议的相关工具非常多。开发人员很方便 。比如负载均衡,直接nginx搞定。比如统计一个接口的调用次数,相当的方便,有现在的分析工具。压力测试也很方便。http协议可能http服务器有漏洞
原创
0评论
0点赞
发布博客于 7 年前

Android 的WebView使用CookieManager崩溃的问题

应用里,如果用户退出登陆了,而WebView里还没有退出登陆,这就有点蛋疼了。所以在用户退出时,要清除WebView的Cookie。但是据说调用CookieManager应用可能会崩溃。先来看下微信是怎么做的,反编绎了下微信的apk,发现是这样的:private void a(Activity paramActivity, String[] paramArrayOfString){
原创
1评论
1点赞
发布博客于 7 年前

从一篇Blog看两个并发编程错误

发现公司支付宝接入的代码有点神奇,在网上搜索了下,找到原始版本。估计有不少人都是抄那份代码的。原文在:http://blog.csdn.net/simdanfeg/article/details/9011603    Android支付接入(一):支付宝但是代码里有两个明显的并发问题,尽管在Android下可能不会有问题。下面摘抄一段: public class Mobi
原创
1评论
1点赞
发布博客于 7 年前

C++11的thread代码分析

本文分析的是llvm libc++的实现:http://libcxx.llvm.org/class threadthread类直接包装了一个pthread_t,在linux下实际是unsigned long int。class thread{ pthread_t __t_; id get_id() const _NOEXCEPT {return __t_;}}
原创
1评论
0点赞
发布博客于 7 年前

移动App该如何保存用户密码

 update 2018-06-042015年出的一个规范 JSON Web Token (JWT)  https://tools.ietf.org/html/rfc7519 JWT 官网: https://jwt.io/  八幅漫画理解使用JSON Web Token设计单点登录系统: http://blog.leapoahead.com/2015/09/07/user-auth...
原创
12评论
13点赞
发布博客于 7 年前

C++11中的mutex, lock,condition variable实现分析

本文分析的是llvm libc++的实现:http://libcxx.llvm.org/C++11中的各种mutex, lock对象,实际上都是对posix的mutex,condition的封装。不过里面也有很多细节值得学习。std::mutex先来看下std::mutex:包增了一个pthread_mutex_t __m_,很简单,每个函数该干嘛就干嘛。class mutex
原创
1评论
0点赞
发布博客于 7 年前

C++11中once_flag,call_once实现分析

本文的分析基于llvm的libc++,而不是gun的libstdc++,因为libstdc++的代码里太多宏了,看起来蛋疼。在多线程编程中,有一个常见的情景是某个任务只需要执行一次。在C++11中提供了很方便的辅助类once_flag,call_once。声明首先来看一下once_flag和call_once的声明:struct once_flag{ constexpr
原创
2评论
3点赞
发布博客于 7 年前

写程序很难之去除字符串的空白字符

在做性能调优时,用JProfiler测试Web应用的性能,发现有个replaceBlank函数占用了10%的CPU时间,进去看了下,是个简单的用正则去除XML文档里空白字符串的功能。但是这个简单功能却消耗了10%的性能。在Web应用里,去掉空白字符串,似乎是个简单的功能,但是真正写起来,却也有些麻烦事。总结下。方式一:正则表达式http://stackoverflow.com/ques
原创
0评论
2点赞
发布博客于 7 年前

Java的LockSupport.park()实现分析

LockSupport类是Java6(JSR166-JUC)引入的一个类,提供了基本的线程同步原语。LockSupport实际上是调用了Unsafe类里的函数,归结到Unsafe里,只有两个函数: public native void unpark(Thread jthread); public native void park(boolean isAbsolute, long ti
原创
13评论
27点赞
发布博客于 7 年前

并行编程之条件变量(posix condition variables)

在整理Java LockSupport.park()的东东,看到了个"Spurious wakeup",重新梳理下。首先来个《UNIX环境高级编程》里的例子:#include struct msg { struct msg *m_next; /* ... more stuff here ... */};struct msg *workq;pthread_cond_t qread
原创
2评论
2点赞
发布博客于 7 年前

有意思的游戏:Google XSS Game

Google最近出了一个XSS的游戏:https://xss-game.appspot.com/我这个菜鸟看提示,花了两三个小时才全过了。。这个游戏的规则是只要在攻击网页上弹出alert窗口就可以了。题目页面是在iframe里嵌套的展现的,那么父窗口是如何知道iframe里成功弹出了窗口?是这样子实现的:题目页面加载了这个js,改写了alert函数,当alert被调
原创
0评论
0点赞
发布博客于 7 年前

扯谈web安全之JSON

前言JSON(JavaScript Object Notation),可以说是事实的浏览器,服务器交换数据的标准了。目测其它的格式如XML,或者其它自定义的格式会越来越少。为什么JSON这么流行?和JavaScript无缝对接是一个原因。还有一个重要原因是可以比较轻松的实现跨域。如果是XML,或者其它专有格式,则很难实现跨域,要通过flash之类来实现。任何一种数据格式,如
原创
3评论
4点赞
发布博客于 7 年前

利用hsdis和JITWatch查看分析HotSpot JIT compiler生成的汇编代码

 安装hsdis要查看JIT生成的汇编代码,要先装一个反汇编器:hsdis。从名字来看,即HotSpot disassembler。实际就是一个动态链接库。网络上有已经编绎好的文件,直接下载即可。国内的:http://hllvm.group.iteye.com/也可以自己编绎,只是编绎hsdis,还是比较快的。参考这里:http://www.chrisnewland.com...
原创
5评论
4点赞
发布博客于 7 年前

并行编程之多线程共享非volatile变量,会不会可能导致线程while死循环

背景大家都知道线程之间共享变量要用volatile关键字。但是,如果不用volatile来标识,会不会导致线程死循环?比如下面的伪代码:static int flag = -1;void thread1(){ while(flag > 0){ //wait or do something }}void thread2(){ //do something f
原创
3评论
4点赞
发布博客于 7 年前

ElasticSearch远程任意代码执行漏洞(CVE-2014-3120)分析

原理这个漏洞实际上非常简单,ElasticSearch有脚本执行(scripting)的功能,可以很方便地对查询出来的数据再加工处理。ElasticSearch用的脚本引擎是MVEL,这个引擎没有做任何的防护,或者沙盒包装,所以直接可以执行任意代码。而在ElasticSearch里,默认配置是打开动态脚本功能的,因此用户可以直接通过http请求,执行任意代码。其实官方是清楚这个漏洞
原创
0评论
0点赞
发布博客于 7 年前

写程序很难之logstash之file input插件实现分析

前言写程序有时候真的有点难,要考虑各种情况。应用在运行中,会不断生成日志文件。假如要实现一个日志收集的工具,不考虑其它的分析功能,只考虑收集,有哪些方面要考虑的?首先看下一般的log框架是如何输出日志的:可能是这样的:a.log.1,  a.log.2, a.log.3, a.log.4, a.log.5 循环输出;可能是这样的: a.2014-5-5.log, a.2014-
原创
3评论
0点赞
发布博客于 7 年前

扯谈网络编程之Tcp SYN flood洪水攻击

 update 2017-5-11: syncookies 会点用 tcp_options 字段空间,会强制关闭 tcp 高级流控技术而退化成原始 tcp 模式。此模式会导致 封包 丢失时 对端 要等待 MSL 时间来发现丢包事件并重试,以及关闭连接时 TIME_WAIT 状态保持 2MSL 时间。 简介TCP协议要经过三次握手才能建立连接:(from wiki)于是出...
原创
6评论
4点赞
发布博客于 7 年前

ZPush--基于netty4实现的苹果通知推送服务(APNs)Java客户端

简单说下实现苹果通知推送服务(APNs)客户端的一些要注意的地方:使用长连接;sanbox服务器是没用的,调试时直接用“gateway.push.apple.com”域名;对于错误的Notification,苹果会回应一个Error response,里面有个identifier,在这个identifier之后的Notification全都失败;因此发送者要缓存已经发送的Not
原创
12评论
0点赞
发布博客于 7 年前

蛋疼的Apple IOS Push通知协议

简介Apple Push通知机制其实很简单,就是Apple的APNs服务器做为中间人,把消息推送到对应的设备上。一张来自Apple文档的图:当然,示意图看起来简单,但是还有一些实际的问题。比如,如何区分Provicer的?如何区分设备的?简单而言,是这样的:每个应用都有一个自己的证书(certificate),开发者可以从苹果那里获得;应用可以到APNs服务
原创
1评论
0点赞
发布博客于 7 年前

用KGdb和VMware调试Linux内核,System Call

Linux的内核和System Call不好调试,参考这里:http://stackoverflow.com/questions/5999205/cannot-step-into-system-call-source-code简单来说,如果想在本机调试system call,那么当你进入system call时,系统已经在挂起状态了,那么它又怎样能响应用户的输入?所以,有一个UML
原创
0评论
0点赞
发布博客于 7 年前

JVM GC调优一则--增大Eden Space提高性能

缘起线上有Tomcat升级到7.0.52版,然后有应用的JVM FullGC变频繁,在高峰期socket连接数,Cpu使用率都暴增。思路思路是Tomcat本身的代码应该是没有问题的,有问题的可能是应用代码升级,或者环境改变了,总之Tomcat的优先级排在最后。先把应用的heap dump下来分析下:jmap -dump:format=b,file=path pid用IBM的...
原创
7评论
11点赞
发布博客于 7 年前

扯谈网络编程之自己实现ping

ping是基于ICMP(Internet Control Message Protocol)协议实现的,而ICMP协议是在IP层实现的。ping实际上是发起者发送一个Echo Request(type = 8)的,远程主机回应一个Echo Reply(type = 0)的过程。为什么用ping不能测试某一个端口刚开始接触网络的时候,可能很多人都有疑问,怎么用ping来测试远程主机的某个
原创
0评论
1点赞
发布博客于 7 年前