模面3
索引的失效情况
sql层面:使用模糊查询、函数、计算、隐式转换、负向查询
系统层面:条件查询大于30%数据量,可能会优化为全表扫描
redis的应用常见
缓存:存ak、存业务数据
限流:滑动窗口(zset)、令牌桶(string)
消息队列(已优化)、分布式锁(Redisson)
redis的内存淘汰和过期策略
过期策略:对于设置了过期时间的key进行的过期淘汰策略
- 惰性删除:key每次被访问都要先查看剩余时间,过期才删除
- 定时删除:按照频率依次检测剩余key的过期时间,淘汰过期key
内存淘汰:当内存不足时针对剩余key采取的策略
1. 不淘汰任何key,拒绝本次插入
2. 局部淘汰(针对设置了过期时间的key):
1. lru:淘汰使用次数最少的key
2. ttl:淘汰剩余过期时间最短的key
3. random:随机淘汰
3. 全局淘汰(针对所有key):
1. lru:淘汰使用次数最少的key
2. random:随机淘汰
jvm了解哪些参数,怎么设置?
分为标准参数、非标准参数、稳定参数。
一、内存配置
- 堆内存核心参数(-X 开头)
| 参数 | 含义 | 推荐设置 | 说明 |
|---|---|---|---|
-Xms |
堆初始内存(Min Heap) | 等于 -Xmx |
避免 JVM 运行中动态扩容堆,减少性能波动。 |
-Xmx |
堆最大内存(Max Heap) | 服务器:物理内存的 1/4 ~ 1/2示例:-Xmx4g |
比如 16G 内存服务器,设 -Xmx8g;太小会频繁 GC,太大导致 Full GC 耗时久。 |
-Xmn |
新生代内存(Eden + S0 + S1) | 堆内存的 1/3 ~ 1/2示例:-Xmn2g |
新生代越大,Minor GC 频率越低;太小则 Minor GC 频繁。(G1 收集器不推荐设 -Xmn,由 G1 自动调节) |
-XX:NewRatio |
新生代 / 老年代比例 | 比如 -XX:NewRatio=2(老年代:新生代 = 2:1) |
替代 -Xmn 的写法,二选一即可。 |
-XX:SurvivorRatio |
Eden/Survivor 区比例 | -XX:SurvivorRatio=8(默认) |
Eden:S0:S1 = 8:1:1; Survivor 区太小会导致对象提前进入老年代。 |
- 非堆内存参数(-XX 开头)
| 参数 | 含义 | 推荐设置 | 说明 |
|---|---|---|---|
-XX:MetaspaceSize |
元空间初始内存 | -XX:MetaspaceSize=256m |
替代 JDK 7 之前的 -XX:PermSize(永久代),存储类信息、常量池。 |
-XX:MaxMetaspaceSize |
元空间最大内存 | -XX:MaxMetaspaceSize=512m |
避免元空间溢出(OutOfMemoryError: Metaspace),默认无上限(会占满物理内存)。 |
-XX:MaxDirectMemorySize |
直接内存上限 | -XX:MaxDirectMemorySize=1g |
NIO 用的直接内存,超出会触发 Full GC;默认等于 -Xmx。 |
二、GC垃圾回收器配置
- 选择 GC 收集器(-XX 开头)
| GC 类型 | 参数 | 适用场景 | 调优点 |
|---|---|---|---|
| G1(默认,JDK 9+) | -XX:+UseG1GC |
中大型堆(4G 以上)、追求低停顿 | 优先保证最大停顿时间,适合微服务、电商核心系统。 |
| Parallel(JDK 8 默认) | -XX:+UseParallelGC |
后台任务、批处理(追求高吞吐量) | 吞吐量优先,停顿时间可能较长。 |
| CMS(已废弃) | -XX:+UseConcMarkSweepGC |
低延迟场景(JDK 8 仍可用) | 并发回收,停顿短,但内存碎片多。 |
| ZGC(JDK 11+) | -XX:+UseZGC |
超大堆(16G+)、超低延迟 | 停顿毫秒级,适合金融、实时计算。 |
- GC 调优关键参数(以 G1 为例)
| 参数 | 含义 | 推荐设置 | |
|---|---|---|---|
-XX:MaxGCPauseMillis |
G1 目标最大停顿时间 | -XX:MaxGCPauseMillis=200(200ms) |
不是绝对保证,G1 会尽量满足;设太小会导致 GC 频繁。 |
-XX:InitiatingHeapOccupancyPercent(IHOP) |
G1 触发混合回收的堆占用阈值 | -XX:IHOP=45(默认 45%) |
堆占用达到 45% 时,G1 开始混合回收老年代;太高会导致 Full GC。 |
-XX:+PrintGCDetails |
打印 GC 详细日志 | 调试必开 | 结合 -Xloggc 输出到文件。 |
-Xloggc:/logs/gc-%t.log |
GC 日志输出路径(% t 带时间戳) | 生产环境必开 | 方便排查 GC 问题,示例:-Xloggc:/logs/app-gc-20260308.log |
-XX:+HeapDumpOnOutOfMemoryError |
OOM 时自动导出堆快照 | 生产环境必开 | 排查内存泄漏的核心手段。 |
-XX:HeapDumpPath=/dump/heap-dump.hprof |
堆快照存储路径 | 配合上一个参数使用 | 示例:-XX:HeapDumpPath=/dump/app-oom.hprof |
linux命令
- 文件操作:ls列出文件、cd切换、mkdir创建、rm删除、cp复制
- 查看操作:cat查看文件内容、tail -f查看实时日志、less分页查看
- 查找操作:find找文件、grep找内容行
- 进程:ps -ef | grep java查看java进程、top查看cpu/内存、kill杀死进程、netstat查端口占用
- 压缩解压:tar(tape archive)打包解包、zip压缩解压
- 网络:ping连通性测试、ipconfig看ip、curl访问接口
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 m1kasaz!
评论






