01 2023 档案

Nginx读取后端服务响应数据流程
摘要:gdb attach [worker进程号] 在指定文件的898行打上断点b src/event/modules/ngx_epoll_module.c:898 客户端发送请求 按3次c以后,按n(函数单行执行)和s(函数逐行执行)单步调试 确定函数调用过程 上一步调用函数代码 下一步被调函数位置 r 阅读全文

posted @ 2023-01-26 21:42 王景迁 阅读(313) 评论(0) 推荐(0)

Node异常时Pod状态分析
摘要:场景一:停止kubelet并恢复 操作和现象 操作 节点上运行Pod后把kubelet进程停掉。 现象 node状态变为NotReady,不同类型的Pod情况不同。 Deployment Pod在5分钟之后开始一直处于Terminating,创建新Pod。 StatefulSet Pod在5分钟之后 阅读全文

posted @ 2023-01-25 11:07 王景迁 阅读(304) 评论(0) 推荐(0)

Nginx同一个worker进程先后处理耗时不同的请求
摘要:epoll监控的事件src/event/modules/ngx_epoll_module.c EPOLLIN: 连接上有数据可读(包括TCP连接的远端主动关闭连接)EPOLLLPRI:连接上要读紧急数据EPOLLOUT: 连接上写入数据并发送(包括向上游服务器发起TCP连接建立成功)EPOLLERR 阅读全文

posted @ 2023-01-24 16:31 王景迁 阅读(59) 评论(0) 推荐(0)

RequestMapping注解
摘要:用法 把http请求映射到方法上。 @Controller public class UserController { @RequestMapping("/user") public String get(){ return "userId"; } } SpringMVC处理流程 阅读全文

posted @ 2023-01-23 14:27 王景迁 阅读(21) 评论(0) 推荐(0)

线程池原理
摘要:Java线程一对一映射为内核线程。线程池可以复用线程,限制线程数量。 参数含义 public ThreadPoolExecutor(int corePoolSize,// 线程池核心线程数 int maximumPoolSize,// 线程池最大线程数 long keepAliveTime,// 当 阅读全文

posted @ 2023-01-23 14:19 王景迁 阅读(64) 评论(0) 推荐(0)

ThreadLocal原理
摘要:ThreadLocal含义 ThreadLocal线程本地变量把变量与线程绑定在一起,为每一个线程维护一个独立的变量副本(因为是对象引用,堆中的对象是线程间共享的,所以ThreadLocal没有解决线程安全问题),在本线程内随时可取。而ThreadLocal实例通常是private static类型 阅读全文

posted @ 2023-01-23 14:04 王景迁 阅读(119) 评论(0) 推荐(0)

synchronized加锁对象和JVM对锁的优化
摘要:synchronized加锁对象 对于普通同步方法,锁是调用该方法的对象。对于静态同步方法,锁是该方法所属类的Class对象。对于同步代码块,锁是synchronized括号里面的对象。 JVM对锁的优化 偏向锁 如果一个线程获得锁,那么锁就进入偏向模式。当这个线程再次请求锁时,不执行同步操作。 轻 阅读全文

posted @ 2023-01-22 16:05 王景迁 阅读(44) 评论(0) 推荐(0)

Java创建线程的4种方式
摘要:继承Thread类,重写run方法 Thread类实现了Runnable接口(只有一个没有返回值的run方法)。 public class ThreadDemo extends Thread { public ThreadDemo(String name) { super(name); } @Ove 阅读全文

posted @ 2023-01-22 15:56 王景迁 阅读(86) 评论(0) 推荐(0)

go mod
摘要:创建go.mod 在当前目录下生成一个go.mod文件 go mod init xxx(目录名称) 使用go mod管理项目,不需要把项目放到GOPATH目录下,可以在任何位置新建一个项目。go.mod所在的目录为一个模块。编译运行项目后,项目目录下多出了一个文件go.sum。go.sum是记录所依 阅读全文

posted @ 2023-01-21 20:51 王景迁 阅读(211) 评论(0) 推荐(0)

go内存逃逸
摘要:逃逸分析 go在编译时确定是否逃逸,逃逸分析是编译器决定变量分配到栈上还是堆上的一种行为。 查看逃逸分析日志:go build -gcflags=-m其中,-m打印出逃逸分析的优化策略。 指针逃逸 函数局部变量优先分配到栈上。如果编译器不能确保变量在函数return之后不再被引用,那么编译器就会将变 阅读全文

posted @ 2023-01-21 20:40 王景迁 阅读(67) 评论(0) 推荐(0)

go检测命令
摘要:map并发读写场景未加锁 package main import "time" func main() { m := make(map[int]int) go func() { for i := 0; i < 10000; i++ { m[0] = 1 } }() go func() { for i 阅读全文

posted @ 2023-01-21 19:52 王景迁 阅读(27) 评论(0) 推荐(0)

go RWMutex源码分析
摘要:适用场景 并发场景下读多写少。 字段含义 RWMutex基于Mutex,写优先,Lock函数(反转readerCount)会阻止新的reader获取锁。 type RWMutex struct { w Mutex // writer之间互斥 writerSem uint32 // writer信号量 阅读全文

posted @ 2023-01-21 19:30 王景迁 阅读(75) 评论(0) 推荐(0)

go sync.Once源码分析
摘要:适用场景 服务启动时读取全局配置。单个函数流程里面只调用一次。 源码 双重检查done值是0后,加锁执行指定函数并把done值改成1。 type Once struct { done uint32 m Mutex } func (o *Once) Do(f func()) { if atomic.L 阅读全文

posted @ 2023-01-21 17:43 王景迁 阅读(44) 评论(0) 推荐(0)

go WaitGroup源码分析
摘要:适用场景 等待若干个任务执行完成。 实现原理 字段 type WaitGroup struct { 省略 // 存储waiter数、WaitGroup计数和信号量 state1 [3]uint32 } 添加任务Add函数 设置WaitGroup计数 func (wg *WaitGroup) Add( 阅读全文

posted @ 2023-01-21 16:20 王景迁 阅读(36) 评论(0) 推荐(0)

go Channel源码分析
摘要:理论基础 不要通过共享内存来通信,要通过通信来共享内存。 特点 通道分为非缓冲通道和缓冲通道。单向通道由双向通道转换而来,但是单向通道不能转换回双向通道。 通过make来初始化一个chan,未初始化的chan的零值是nil。 接收数据时,返回两个值。第一个值是返回的chan中的元素,第二个值是boo 阅读全文

posted @ 2023-01-21 09:59 王景迁 阅读(92) 评论(0) 推荐(0)

获取kubelet管理的容器
摘要:k8s 1.15 pkg/kubelet/kuberuntime/kuberuntime_container.gogetKubeletContainers方法获取kubelet管理的所有业务容器(true表示包括退出的和死亡的容器,用于GC)补充代码 kubelet日志 容器情况 启动一个基于Ngi 阅读全文

posted @ 2023-01-14 14:40 王景迁 阅读(124) 评论(0) 推荐(0)

curl命令总结
摘要:打印curl总耗时 echo "time_total is %{time_total}s\n" > curl-format.txt curl -w "@curl-format.txt" -o /dev/null -s -L http://localhost:1000/test -w:从文件中读取打印 阅读全文

posted @ 2023-01-08 19:34 王景迁 阅读(91) 评论(0) 推荐(0)

arthas输出方法的请求参数和返回值
摘要:运行jar包 java -jar demo-0.0.1-SNAPSHOT.jar 下载Arthas并启动 curl -O https://alibaba.github.io/arthas/arthas-boot.jar && java -Dfile.encoding=UTF-8 -jar artha 阅读全文

posted @ 2023-01-01 15:54 王景迁 阅读(516) 评论(0) 推荐(0)

导航