摘要:gdb attach [worker进程号] 在指定文件的898行打上断点b src/event/modules/ngx_epoll_module.c:898 客户端发送请求 按3次c以后,按n(函数单行执行)和s(函数逐行执行)单步调试 确定函数调用过程 上一步调用函数代码 下一步被调函数位置 r
阅读全文
摘要:场景一:停止kubelet并恢复 操作和现象 操作 节点上运行Pod后把kubelet进程停掉。 现象 node状态变为NotReady,不同类型的Pod情况不同。 Deployment Pod在5分钟之后开始一直处于Terminating,创建新Pod。 StatefulSet Pod在5分钟之后
阅读全文
摘要:epoll监控的事件src/event/modules/ngx_epoll_module.c EPOLLIN: 连接上有数据可读(包括TCP连接的远端主动关闭连接)EPOLLLPRI:连接上要读紧急数据EPOLLOUT: 连接上写入数据并发送(包括向上游服务器发起TCP连接建立成功)EPOLLERR
阅读全文
摘要:用法 把http请求映射到方法上。 @Controller public class UserController { @RequestMapping("/user") public String get(){ return "userId"; } } SpringMVC处理流程
阅读全文
摘要:Java线程一对一映射为内核线程。线程池可以复用线程,限制线程数量。 参数含义 public ThreadPoolExecutor(int corePoolSize,// 线程池核心线程数 int maximumPoolSize,// 线程池最大线程数 long keepAliveTime,// 当
阅读全文
摘要:ThreadLocal含义 ThreadLocal线程本地变量把变量与线程绑定在一起,为每一个线程维护一个独立的变量副本(因为是对象引用,堆中的对象是线程间共享的,所以ThreadLocal没有解决线程安全问题),在本线程内随时可取。而ThreadLocal实例通常是private static类型
阅读全文
摘要:synchronized加锁对象 对于普通同步方法,锁是调用该方法的对象。对于静态同步方法,锁是该方法所属类的Class对象。对于同步代码块,锁是synchronized括号里面的对象。 JVM对锁的优化 偏向锁 如果一个线程获得锁,那么锁就进入偏向模式。当这个线程再次请求锁时,不执行同步操作。 轻
阅读全文
摘要:继承Thread类,重写run方法 Thread类实现了Runnable接口(只有一个没有返回值的run方法)。 public class ThreadDemo extends Thread { public ThreadDemo(String name) { super(name); } @Ove
阅读全文
摘要:创建go.mod 在当前目录下生成一个go.mod文件 go mod init xxx(目录名称) 使用go mod管理项目,不需要把项目放到GOPATH目录下,可以在任何位置新建一个项目。go.mod所在的目录为一个模块。编译运行项目后,项目目录下多出了一个文件go.sum。go.sum是记录所依
阅读全文
摘要:逃逸分析 go在编译时确定是否逃逸,逃逸分析是编译器决定变量分配到栈上还是堆上的一种行为。 查看逃逸分析日志:go build -gcflags=-m其中,-m打印出逃逸分析的优化策略。 指针逃逸 函数局部变量优先分配到栈上。如果编译器不能确保变量在函数return之后不再被引用,那么编译器就会将变
阅读全文
摘要: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
阅读全文
摘要:适用场景 并发场景下读多写少。 字段含义 RWMutex基于Mutex,写优先,Lock函数(反转readerCount)会阻止新的reader获取锁。 type RWMutex struct { w Mutex // writer之间互斥 writerSem uint32 // writer信号量
阅读全文
摘要:适用场景 服务启动时读取全局配置。单个函数流程里面只调用一次。 源码 双重检查done值是0后,加锁执行指定函数并把done值改成1。 type Once struct { done uint32 m Mutex } func (o *Once) Do(f func()) { if atomic.L
阅读全文
摘要:适用场景 等待若干个任务执行完成。 实现原理 字段 type WaitGroup struct { 省略 // 存储waiter数、WaitGroup计数和信号量 state1 [3]uint32 } 添加任务Add函数 设置WaitGroup计数 func (wg *WaitGroup) Add(
阅读全文
摘要:理论基础 不要通过共享内存来通信,要通过通信来共享内存。 特点 通道分为非缓冲通道和缓冲通道。单向通道由双向通道转换而来,但是单向通道不能转换回双向通道。 通过make来初始化一个chan,未初始化的chan的零值是nil。 接收数据时,返回两个值。第一个值是返回的chan中的元素,第二个值是boo
阅读全文
摘要:k8s 1.15 pkg/kubelet/kuberuntime/kuberuntime_container.gogetKubeletContainers方法获取kubelet管理的所有业务容器(true表示包括退出的和死亡的容器,用于GC)补充代码 kubelet日志 容器情况 启动一个基于Ngi
阅读全文
摘要:打印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:从文件中读取打印
阅读全文
摘要:运行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
阅读全文