一杯咖啡的时间,聊聊技术与成长
动静分离:把静态资源从应用手里抢出来
Tomcat 处理一张图片也要占用一个线程,Nginx 用 sendfile 在内核里直接把文件扔给网卡。动静分离不是架构洁癖,是把算力花在刀刃上——root 与 alias 的大坑先排掉。
负载均衡:upstream 的五种调度策略
轮询最公平,加权看机器,ip_hash 保会话但可能倾斜,least_conn 看实时负载。健康检查是负载均衡的底线——把流量发给挂掉的节点,策略再好也白搭。
反向代理:proxy_pass 结尾的斜杠是两个世界
proxy_pass 是 Nginx 最常用的指令,也是最容易被斜杠坑的指令——带不带路径、带不带斜杠,转发路径完全不同。配上真实 IP 头传递,后端才不会把所有请求都当成 Nginx 发的。
location 匹配规则:优先级搞错,路由全乱
五种写法不用背,记一条优先级链就够:精确匹配称王,^~ 截断正则,正则按配置顺序,最后比谁的前缀长。一个符号之差,请求流向完全不同。
配置文件全景:main、events、http、server 的层级
Nginx 的配置像俄罗斯套娃:main 套 http,http 套 server,server 套 location。指令放错层级不报错但也不生效——先搞清地图,再动手改配置。
Nginx 开篇:为什么每个后端都绕不开它
应用裸奔扛不住并发、静态资源抢线程、想加机器没有统一入口——Nginx 用一个 master 加几个 worker 全接了。epoll 事件模型是它单机扛十万连接的底气,本系列十五篇从配置讲到高可用。
JVM 收官:一张地图串起二十篇
内存结构是地基,GC 是机制,排查是手段,调优是目标——四层知识环环相扣。收官篇把二十篇串成一张地图,附一份高频问题清单和五个动手实验。
堆外内存:-Xmx 管不到的那部分
容器里 -Xmx 给了 4G,进程 RSS 却涨到 7G——多出来的在堆外:元空间、直接内存、线程栈、Code Cache。heap dump 里看不见它们,排查得换一套工具。
JIT 与逃逸分析:你的代码不是按你写的样子跑的
字节码先解释执行,热点代码被 JIT 编译成机器码,还被顺手内联、消除锁、拆散对象——三层手术做完,跑出来的已经不是你写的代码。理解它,才明白微基准为什么会骗人。