Linux工具-sar
参考文献
sar
sar是System Activity Reporter(系统活动情况报告)的缩写.sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态.它的特点是可以连续对系统取样,获得大量的取样数据;取样数据和分析的结果都可以存入文件,所需的负载很小
安装
1sudo apt install sysstat
语法格式
1sar -[ options ] time_interval number_of_tines_to_display
查看CPU信息
1234567891011# 输出CPU信息间隔2秒 一共输出5次# sar -u 2 5Linux 5.4.0-150-generic (yw-PowerEdge-R740) 2024年09月06日 _x86_64_ (40 CPU)13时20分04秒 CPU %user %nice %system %iowait %steal %idle13时20分06秒 all 1.13 0.00 0.14 1. ...
架构设计
参考文献
软件设计过程
软件设计过程可以拆分成需求分析、概要设计和详细设计三个阶段.
在需求分析阶段,主要是通过用例图来描述系统的功能与使用场景;对于关键的业务流程,可以通过活动图描述;如果在需求阶段就提出要和现有的某些子系统整合,那么可以通过时序图描述新系统和原来的子系统的调用关系;可以通过简化的类图进行领域模型抽象,并描述核心领域对象之间的关系;如果某些对象内部会有复杂的状态变化,比如用户、订单这些,可以用状态图进行描述.
在概要设计阶段,通过部署图描述系统最终的物理蓝图;通过组件图以及组件时序图设计软件主要模块及其关系;还可以通过组件活动图描述组件间的流程逻辑.
在详细设计阶段,主要输出的就是类图和类的时序图,指导最终的代码开发,如果某个类方法内部有比较复杂的逻辑,那么可以将这个方法的逻辑用活动图进行描述.
k8s-kubeadm搭建集群
参考文献
环境说明
主机: MBP M1 macOS 14.1.2
拓扑结构: 一个Master节点,一个Node节点
角色
hostname
IP
Master
node-1
192.168.11.173
Node
node-2
192.168.11.174
虚拟机版本: Ubuntu 20.04.5 LTS
系统配置
注: 以下操作需要在所有节点上执行
配置固定IP
配置固定IP,可参考Linux工具-技巧篇中的修改"修改Ubuntu20.04 IP为静态IP"
配置内核模块
创建/etc/modules-load.d/containerd.conf配置文件,确保在系统启动时自动加载所需的内核模块,以满足容器运行时的要求
1234cat << EOF > /etc/modules-load.d/containerd.confoverlaybr_netfilterEOF
执行以下命令使配置生效
12modprobe overlaymodprobe br_netfilter
创建/etc/ ...
MyBatis-缓存
参考文献
聊聊MyBatis缓存机制
Java并发源码分析-线程池源码分析
参考文献
AbstractExecutorService源码解析
submit方法
123456789101112131415161718192021222324252627282930public Future<?> submit(Runnable task) { if (task == null) throw new NullPointerException(); // 通过submit方法提交的Callable任务会被封装成了一个FutureTask对象。 // 通过Executor.execute方法提交FutureTask到线程池中等待被执行,最终执行的是FutureTask的run方法; RunnableFuture<Void> ftask = newTaskFor(task, null); execute(ftask); return ftask; } /** * @throws RejectedExecutionException { ...
解决方案-压测
参考文献
全链路压测数据隔离方案的选择
影子库
影子表
Windows-遇到的问题
参考文献
I have some issues when I run “kubeadm init”
kubeadm init error
123456789101112# kubeadm init --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers'I0814 13:18:08.628892 4337 version.go:256] remote version is much newer: v1.31.0; falling back to: stable-1.28W0814 13:18:18.638114 4337 version.go:104] could not fetch a Kubernetes version from the internet: unable to get URL "https://dl.k8s.io/release/stable-1.28.txt": Get "https://cdn.dl.k8s. ...
好文收藏
好文收藏
Netty
聊聊Netty那些事儿之从内核角度看IO模型 ⭐⭐⭐⭐⭐
很详细的介绍了各种I/O模型,附带图文,源码
算法-内存分配算法
参考文献
内存分配算法
常用的内存分配算法:
动态内存分配(Dynamic memory allocation DMA)
伙伴算法
Slab算法
动态内存分配(Dynamic memory allocation DMA)
动态内存分配,又称堆内存分配.操作系统根据程序运行过程中需求及时分配内存,且分配的内存大小就是程序需求的大小.在大部分场景下,只有程序运行的时候才知道所需要分配的内存大小,如果提前分配可能分配的大小无法把控,分配太大会浪费空间,分配太小会无法使用.
DMA是从一整块内存中按需分配,对于分配的内存会记录元数据,同时还会使用空闲分区链维护空闲内存,便于在内存分配时查找可用的空闲分区.常用的有三种查找策略:
首次适应算法(first fit)
循环适应算法(next fit)
最佳适应算法(best fit)
首次适应算法(first fit)
空闲分区链以地址递增的顺序,将空闲分区以双向链表的形式连接在一起,从空闲分区链中找到第一个满足分配条件的空闲分区,然后从空闲分区中划分一块可用内存给请求进程,剩余的空闲分区仍然保留在空闲分区链中.
如下图 ...
Linux工具-strace
参考文献
5 simple ways to troubleshoot using Strace
strace
strace命令用于跟踪系统调用和信号。主要用于诊断,调试程序,使用该命令能够打印出进程执行的系统调用信息。
示例
找出应用程序启动时读取的配置文件
12345strace mysql 2>&1 |grep my.cnfstat("/etc/my.cnf", 0x7ffc3bd0d7e0) = -1 ENOENT (No such file or directory)stat("/etc/mysql/my.cnf", {st_mode=S_IFREG|0644, st_size=869, ...}) = 0openat(AT_FDCWD, "/etc/mysql/my.cnf", O_RDONLY|O_CLOEXEC) = 3stat("/home/xx/.my.cnf", 0x7ffc3bd0d7e0) = -1 ENOENT (No such f ...