记一次线上频繁GC

2021-08-14
阅读 2 分钟
2.7k
发现该节点有问题后,找运维将该节点从服务注册中心上摘掉,因为我们需要去jmap dump服务的堆栈信息,而dump内存会STW,必须先摘流。

用MAT定位高负载线程

2020-05-06
阅读 5 分钟
3.9k
我们目前知道的是,高负载线程叫 pool-14-thread-1这种。那只能用MAT分析JVM的dump文件,MAT有分析对象间的引用关系的功能。

记JVM堆外内存泄漏Bug查找

2018-09-30
阅读 11 分钟
12.7k
发现是OOM的错误,并且有unable to create new native thread的错误信息,笔者的第一直觉是创建了大量线程从而导致堆外内存空间不足。

从网络IO到Thrift网络模型

2018-09-03
阅读 5 分钟
6k
IO多路复用就是通过一种机制,一个进程可以监听多个文件描述符,一个某个描述符就绪(一般是读就绪或写就绪),就能够通知程序进行相应的读写操作。select、poll、epoll本质上都是同步IO,因为他们需要在读写事件就绪后自己负责读写,即这个读写过程是阻塞的,而异步IO则无需自己负责读写,异步IO的实现会把数据从内核拷...

对Java多线程的一些理解

2018-06-21
阅读 5 分钟
5.7k
从Linux内核的角度来说,并没有线程这个概念。Linux把所有的线程都当做进程来实现,内核没有为线程准备特别的调度算法和特别的数据结构。线程仅仅被视为一个与其他进程共享某些资源的进程。所以,在内核看来,它就是一个普通的进程。

CMS垃圾回收和线上Full GC排查

2018-06-05
阅读 3 分钟
12.1k
我们上线Java服务的时候需要对其配置一些JVM参数,如堆空间大小、虚拟机栈大小、垃圾回收算法。对于年轻代和老年代我们可以配置不同的垃圾回收算法。在一些对rt要求很高的场景,服务不能有长时间的卡顿,CMS就可以运用于此场景。

Spring BeanUtils源码分析

2018-05-12
阅读 8 分钟
9k
在我们着手一个Java Web项目的时候,经常会遇到DO、VO、DTO对象之间的属性拷贝,若采用get、set的方法来进行赋值的话,代码会相当冗长丑陋,一般我们会采用Spring的BeanUtils类来进行属性拷贝,其基本原理就是通过Java的反射机制,下面我们来看一下源码的具体实现。

Http请求连接池-HttpClient的AbstractConnPool源码分析

2017-11-15
阅读 10 分钟
6.8k
在做服务化拆分的时候,若不是性能要求特别高的场景,我们一般对外暴露Http服务。Spring里提供了一个模板类RestTemplate,通过配置RestTemplate,我们可以快速地访问外部的Http服务。Http底层是通过Tcp的三次握手建立连接的,若每个请求都要重新建立连接,那开销是很大的,特别是对于消息体非常小的场景,开销更大。

Java正则的贪婪和非贪婪模式

2017-09-27
阅读 1 分钟
8.3k
定义 贪婪模式:匹配尽可能多的字符 非贪婪模式:匹配尽可能少的字符 在Java的正则表达式中,通过在修饰匹配次数的符号后面加一个?,即非贪婪模式,默认情况下是贪婪模式。 表示匹配次数的符号有: {代码...} 代码 {代码...} 输出: {代码...} 原文链接 [链接] ​

Cobar源码解析(二)

2017-09-26
阅读 5 分钟
3.3k
报文格式 这一节我们来讲Cobar Handshake的过程。 MySQL服务端和客户端交互的所有的包格式都是统一的,报文格式如下图: MySQL报文的消息头共有4个字节,前3字节表示的是实际数据的长度(不包含消息头),并且字节是按照小端模式排放的。 第四个字节MySQL为了防止串包用的,其原理是每收到一个报文,都在sequence id上加1...

分布式调用跟踪实战

2017-09-19
阅读 3 分钟
7k
分布式环境下,跨服务之间的调用错综复杂,如果突然爆出一个错误,虽然有日志记录,但到底是哪个服务出了问题呢?是移动端传的参数有错误,还是系统X或者系统Y提供的接口导致?在这种情况下,错误排查起来就非常费劲。

Cobar源码解析(一)

2017-09-12
阅读 7 分钟
4.7k
当业务的数据量和访问量急剧增加的情况下,我们需要对数据进行水平拆分,从而降低单库的压力,并且数据的水平拆分需要对业务透明,屏蔽掉水平拆分的细节。并且,前端业务的高并发会导致后端的数据库连接过多,从而DB的性能低下。

MySQL乐观锁在分布式场景下的实践

2017-04-03
阅读 4 分钟
16.7k
在电商购物的场景下,当我们点击购物时,后端服务就会对相应的商品进行减库存操作。在单实例部署的情况,我们可以简单地使用JVM提供的锁机制对减库存操作进行加锁,防止多个用户同时点击购买后导致的库存不一致问题。

建造者(Builder)模式 的若干使用场景

2016-05-28
阅读 4 分钟
10.4k
如果我们需要将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示的意图时,我们可以使用 Builder模式,又叫生成器模式。如果我们用了Builder模式,那么用户就只需要指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需要知道了。比如现在我们有一个这样的使用场景,需要在屏幕上画...