sincosmos's blog

所赖君子见机,达人知命。穷且益坚,不坠青云之志;老当益壮,宁移白首之心

Java 线上问题排查

JAVA 程序 CPU 使用率过高 一般地,Java 应用程序 CPU 使用率过高的原因有以下几种。 程序是计算密集型,例如正则表达式回溯,序列化和反序列化操作 程序发生死循环 程序频繁发生 Full GC 程序有较多阻塞性操作竞争锁,线程状态在 Blocked 和 Running 之间频繁切换 什么会导致Java应用程序的CPU使用率飙升? 原因排查 首先找到 ...

RPC 与 Netty

RPC 学习笔记 Socket, Java NIO, Netty, Zookeeper, Dubbo RPC 全称为 Remote Procedure Call,即远程过程调用,它是一个计算机通信协议。它允许像调用本地服务一样调用远程服务,主要应用在分布式系统。 RPC 框架从实现角度看,一个 RPC 框架需要考虑以下几个方面 1) 通信模型,在 Java 中一般基于 BIO 或 ...

JVM 内存结构与内存模型

JVM 内存结构 JVM 运行时数据区分为栈区、堆区、方法区、本地方法栈、程序计数器。 JVM 的线程在执行方法时,首先会在栈区申请栈帧用于存放方法中的局部变量、操作数等数据。当线程栈大小设置为固定值,如果线程执行所需的栈空间超过设定值时(例如深度的递归调用)就会出现 StackOverflowError。当线程栈空间设置为动态增长,如果 JVM 申请的栈内存大小超过其可用内存时则会出现 O...

Linux I/O 与 Java I/O

学习笔记

什么是 I/O 用户线程无法直接操作 I/O 设备(例如磁盘、网卡等),而是通过系统调用请求 kernel 来协助完成 I/O 操作。内核会为每个 I/O 设备维护一个缓冲区。读操作即从 I/O 设备获取的数据(等待数据到达),由内核将其读入到内核缓冲区,然后再拷贝到用户线程内存空间供线程使用。写操作用户线程写入 I/O 设备的数据(等待 I/O 设备就绪),先从线程的内存拷贝到内核缓冲区,...

Java SPI

JDBC

什么是 Java SPI 我们对 API 都比较熟悉,项目常见的用法是使用 maven 引入相关的第三方依赖,然后通过被依赖的包提供的 API 来使用其功能。 参照上图,API 的层次关系中,接口的定义和具体实现都在实现方。 而在 SPI 的层级关系中,接口的定义在调用方,具体实现在实现方。例如 JDBC 的的类结构中,用户程序作为调用方调用数据驱动类(java.sql)连接数据库,各种...

Redis 基础知识汇总

RedisTemplate 最佳使用方式

基本数据结构 参考资料 Redis 数据结构基础教程 string string 是一个可变的字节数组,常见的操作有 set, get, strlen, getrange, setrange, append, ttl, expire, del. 如果存入的是整数,还可以作为计数器使用,incrby, decrby, incr, decr. 使用 setbit, getbit, bitcoun...

MySQL 锁与事务

学习笔记

参考资料 CS-Notes 数据库原理 MySQL 加锁处理分析 事务 什么是数据库事务 数据库事务是并发控制的基本单位。所谓事务就是一个操作序列,要么都执行,要么都不执行,是一个不可分割的工作单位。ACID 是事务需要满足四个特性,包含原子性、一致性、隔离性和持久性。 事务并发可能存在的问题 先来看一下在没有隔离的时候,事务间 (这里以 T1 和 T2 为例) 都可能会发生哪些相互影响...

集群节点批量分区及 docker 镜像存储空间变更

集群环境初始化

我们新建的 K8S 集群中,有时候部署 deployment 会发生 node 拉取镜像失败的问题,排查后发现是由于 docker 镜像的存储的磁盘空间很小,因此需要改变 docker 镜像的默认存储位置到另外一块儿磁盘上,但另外一块磁盘还没有划分分区。 为了解决该问题,我们进行以下步骤的操作。 配置 master 节点到 node 节点的免密操作 编写脚本,该脚本对 node 节...

Spark SQL 原理解析

DAGScheduler and PhysicalPlan

参考文献:The Internals of Spark SQL 在 Dataset 上执行 action 操作时,都会经历下述过程,将对 Dataset 的 action 及其之前的算子操作转化成 DAG 对 RDD 的操作。RDD 是 Spark 系统中最底层、最基础的 API 层, Dataset (或其前身 DataFrame)都是为了方便用户提供的更高层次的 API 抽象。 ...

Docker 入门

Docker Docker Cheetsheet # start/stop/restart docker service $ sudo systemctl start[stop][restart] docker # view details about docker installation $ docker info # configure docker mirror $ vi /et...