搜索结果: "memory"

共找到 54 个页面

K8s Java DirectMemory OOM 诊断 — 堆内存充足但 OOMKilled 的根因与复现

标题匹配

title: K8s Java DirectMemory OOM 诊断 — 堆内存充足但 OOMKilled 的根因与复现

tags: [kubernetes, java, jvm, troubleshooting, memory, performance]

# K8s Java DirectMemory OOM 诊断

> GC 平稳、堆内存只用了一半、Pod 却突然 OOMKilled(退出码 137)?问题不在堆,而是被长期忽略的**堆外内存(DirectMemory)**悄悄拖垮。本文从错误认知、根因、故障复现代码到生产配置,完整拆解这类隐性 OOM。

| DirectMemory 堆外内存 | `-XX:MaxDirectMemorySize` | NIO/Netty 核心使用区域 |

MySQL / Redis 常见故障排查速查清单

> 💡 本文是"速查清单/决策树"视角。MySQL 性能调优(慢查询/锁/死锁/索引/Buffer Pool)深度内容见 [[mysql-performance-config]];Redis 内存优化(数据结构/TTL/淘汰/Bigkey/碎片)见 [[redis-memory-optimization]];Redis 连接管理见 [[redis-connection-management]]。

| `performance_schema` / `sys` | 锁等待/IO/语句统计 | `MEMORY USAGE key` | 单个 key 内存占用 |

| `information_schema` | 元数据(表大小/索引) | `MEMORY DOCTOR` | 内存问题诊断 |

**现象**:写入报 `OOM command not allowed when used memory > 'maxmemory'`

redis-cli INFO memory | grep -E 'used_memory_human|maxmemory_human|maxmemory_policy'

Redis 内存优化完全指南 — 数据结构/TTL/淘汰策略/Bigkey/碎片治理

tags: [redis, database, memory, production, performance, debugging]

sources: [raw/articles/redis-memory-optimization-guide.md]

可淘汰:配置合理的 maxmemory 和淘汰策略

**建议:** 内存敏感场景下,用 `MEMORY USAGE key` 实测真实占用,对比不同序列化方式。

但 Hash 不是永远更省 — field 名太长、field 太多、value 特别大时也可能膨胀。**结合 MEMORY USAGE 实测。**

Docker 生产环境踩坑指南 — 10 + 5 个常见问题

dmesg | grep -i "out of memory"

# JVM 堆内存 + native/direct buffer/mmap 等堆外内存之和 ≤ 容器 memory limit

docker run -e JAVA_OPTS="-Xmx768m" --memory=1g my-java-app

limit=$(docker inspect $name --format '{{.HostConfig.Memory}}')

| [[k8s-java-directmemory-oom-diagnosis]] | K8s Java DirectMemory OOM 诊断 — GC 正常/堆内存充足但 OOMKil |

Jenkins 多 Master 架构部署方案 — K8S + Gateway API

memory: "2Gi"

memory: "4Gi"

resourceRequestMemory: "512Mi"

resourceLimitMemory: "1Gi"

resourceRequestMemory: "128Mi"

JVM 容器 OOM 排障指南 — 堆外内存视角

tags: [kubernetes, java, troubleshooting, memory, container, performance]

├── Direct Memory ← NIO 的 DirectByteBuffer,-XX:MaxDirectMemorySize 控制

cgroup.memory.current = RSS(常驻物理内存)

+ Kernel Memory(slab、socket buffer 等)

jcmd VM.native_memory summary | grep "Internal"

K8s 容量规划、Pod QoS 与成本优化实战指南

| requests.memory | 调度 + 驱逐排序 | Pod 希望被保证的内存 | Scheduler + kubelet eviction |

| limits.memory | 运行 | 内存硬上限,超限后 OOMKilled | OOM killer / cgroup |

> ⚠️ 驱逐排序:BestEffort > 超 request 的 Burstable > Guaranteed。但 Guaranteed 超 memory limit 仍会被杀。

1. **历史资源水位** — CPU/Memory/Network/Disk 的 P50/P90/P95/P99

容器 RSS ≈ Heap + Metaspace + Direct Memory + Thread Stack + Code Cache + GC Native + JNI + glibc arena

K8s 下 Java 内存调优完整指南 — 预算模型、生产配置与治理体系

tags: [kubernetes, java, jvm, memory, performance, troubleshooting, architecture]

1. **`-Xmx` 只约束堆,`memory.limit` 约束容器总内存** — 堆调到容器上限 ≈ 主动制造 OOM

容器 memory.limit = 4Gi

├── Direct Memory ← Netty ByteBuf / NIO DirectByteBuffer

**Direct Memory:** Netty ByteBuf、Kafka 客户端缓冲、NIO DirectByteBuffer。特点是:吞吐好、GC 压力小、**但不受 -Xmx 约束**。必须设 `-XX:MaxDirectMemorySize`。

K8s Pod Evicted 驱逐 — 根因排查与运维应对三板斧

| `memory.available` | 可用内存 | `< 100Mi` | 设了 limits 没设 requests,内存超卖严重 |

很多团队只给 CPU/Memory 设配额,忘了本地临时存储。容器日志、`/tmp`、emptyDir、镜像可写层都会消耗本地盘,超出阈值即被驱逐。K8s v1.8+ 支持 `ephemeral-storage` 资源配额。

重点看 `Conditions` 部分是否挂上 `MemoryPressure` 或 `DiskPressure` 标签。

- `Pod was evicted due to memory pressure` → 内存不够

kubectl top pods -A --sort-by=memory | head -20

Pod Pending 排障指南 — 7 个角度快速定位调度失败根因

**Events 关键词:** `Insufficient cpu` / `Insufficient memory` / `Insufficient ephemeral-storage`

# 0/5 nodes are available: 3 Insufficient memory.

**⚠️ 资源碎片化 ≠ 总量不足:** 调度事件 `0/26 nodes are available: 5 Insufficient cpu, 10 Insufficient memory, 3 node(s) had taint...` 的重点是**失败原因分散在不同节点**——不是集群没资源,而是 request 设置过大导致零散资源无法利用,此时扩容节点往往无效。正确做法:对照 `kubectl top pods -A`(实际使用)与 `kubectl describe nodes`(request 预留)两组数据,基于历史使用重新校准 request,高估服务先灰度调整。VPA 可参考,流量波动大的场景勿自动采纳。

| `node.kubernetes.io/memory-pressure` | 内存压力 | 默认 NoSchedule |

│ │ ├─ Insufficient cpu/memory → 方向一

K8s 资源限制配置指南 — Request / Limit / QoS / CPU Throttling

memory: "256Mi"

memory: "512Mi"

- **Memory**: **强烈建议 Request = Limit**,否则导致 OOMKill 优先级异常(见下文)

| Burstable | min(max(2, 1000 - 1000×memoryRequest/nodeMemory), 999) | 中等 |

kubectl describe pod | grep -E "QoS|Memory|Limit|Request"

K8s 故障排查实战 — 20 个生存法则

| `kubectl get nodes` | 看节点状态:NotReady、DiskPressure、MemoryPressure |

真正要看的是:NodeDiskPressure/NodeMemoryPressure、kubelet 与 API Server 通信失败、证书过期、容器运行时无响应、节点级 OOM 杀掉 kubelet。

`0/26 nodes are available: 5 Insufficient cpu, 10 Insufficient memory, 3 node(s) had taint...`

退出码 137 时很多 Java 团队第一反应是「堆设太大了」,这经常只说对一半。容器内存限制看到的是**整个进程空间**:Java Heap、Metaspace、Direct Memory、线程栈、JIT/Native Library 等额外开销。即使 `-Xmx` 没碰到 limit,总内存仍可能超限被 cgroup 杀掉。

详见 [[k8s-java-directmemory-oom-diagnosis]]、[[jvm-container-oom-offheap-troubleshooting]]。

Node 排障 — NotReady 九步排查 / Kubelet / 容器运行时 / 资源压力 / 证书 / 预防

MemoryPressure False KubeletHasSufficientMemory

| MemoryPressure | 内存不足 | 节点内存耗尽,OOM risk |

### 内存压力(MemoryPressure)

sudo dmesg | grep -i "out of memory" | grep -i "kubelet"

memory.available: "100Mi"

资源配额 / OOMKilled / RBAC / 调度排障

-o jsonpath='{.spec.containers[*].resources.limits.memory}'

| Burstable | min(max(2, 1000 - 1000×memoryRequest/nodeMemory), 999) | 中等 |

1. **增大 memory limits**(如果是正常业务增长)`kubectl patch deployment`

memory: "128Mi"

memory: "128Mi"

Linux 内存管理深潜 — Buffer/Cache/Page Cache/Slab/回收/OOM 全链路

tags: [linux, memory, performance, troubleshooting, monitoring, debugging]

dmesg | grep -i "out of memory\|killed process"

cat /sys/fs/cgroup/memory.max # 硬限制(字节),超过触发 OOM

cat /sys/fs/cgroup/memory.high # 软限制,超过触发回收但不杀进程

cat /sys/fs/cgroup/memory.low # 保护阈值,低于此值尽量不回收

服务器性能五维排查 — CPU/内存/磁盘/网络/文件系统深度解析

| `dmesg -T \| tail` | 最近内核报错 | OOM、磁盘错误、网络超时 | 出现 `Out of memory` 或 `hung_task` |

dmesg | grep -i "out of memory\|killed process" # OOM 日志

**Java 特殊注意:** JVM 内存 ≠ -Xmx。包含堆 + 元空间 + 直接内存 + Native。用 `jcmd VM.native_memory`。

| [[linux-memory-management-deep-dive]] | Linux 内存管理深潜(Buffer/Cache/Page Cache/Slab/回收/OOM/cgroup v2) |

| [[k8s-java-memory-tuning-production-guide]] | Kubernetes 下 Java 内存调优完整指南 — 内存预算模型、生产参数配置、四层诊断流程、 |

服务器突然卡顿运维排查 SOP — 从告警到根因的完整取证指南

| OOM 日志 | `journalctl -k \| grep -Ei 'out of memory|oom-killer'` |

| PSI 压力 | `cat /proc/pressure/memory` |

cat /sys/fs/cgroup/memory.current

cat /sys/fs/cgroup/memory.max

cat /sys/fs/cgroup/memory.events

Wiki Index

- [[k8s-java-directmemory-oom-diagnosis]] — K8s Java DirectMemory OOM 诊断 — GC 正常/堆内存充足但 OOMKilled 的根因分析、故障复现代码与生产配置方案

- [[k8s-java-memory-tuning-production-guide]] — Kubernetes 下 Java 内存调优完整指南 — 内存预算模型、生产参数配置、四层诊断流程、GC 选型、发布策略

- [[linux-disk-io-monitoring-reference]] — 磁盘 IO 监控参考 — iostat/vmstat 字段详解与五指标框架。磁盘使用率/饱和度/IOPS/吞吐量/响应时间五指标框架。iostat 逐字段解读(avg-cpu 段:user/nice/system/iowait/steal/idle;Device 段:rrqm/s/wrqm/s/r/s/w/s/rMB/s/wMB/s/avgrq-sz/avgqu-sz/await/svctm/%util)。vmstat 逐字段解读(procs r/b;memory swpd/free/buff/cache;swap si/so;io bi/bo;system in/cs;cpu us/sy/id/wa/st)。await vs svctm 核心判断。综合决策表(7 种场景)。

- [[linux-memory-management-deep-dive]] — Linux 内存管理深潜:Buffer/Cache/Page Cache/Slab/三级回收/OOM/cgroup v2

- [[redis-memory-optimization]] — Redis 内存优化完全指南:key设计/数据结构选型/序列化/bigkey/碎片/淘汰策略/TTL

Wiki Log

- Created raw: raw/articles/redis-memory-optimization-guide.md

- Created concepts: redis-memory-optimization(12 章节覆盖 key/value/数据结构/序列化/淘汰策略/bigkey/碎片/fork-COW/缓冲区/排查命令)

- Created concepts: linux-memory-management-deep-dive(配套 server-performance-four-dimensions 的内存专项深潜)

- Updated: server-performance-four-dimensions, redis-memory-optimization, linux-kernel-tuning-production(添加内存管理交叉引用)

- 文章与 [[server-performance-four-dimensions]] + cpu-spike / linux-load-average / linux-memory / network-troubleshooting 等多页高度重叠

Linux 高并发内核优化手册 — 文件句柄/网络/内存/调度/I/O/安全七维调优

tags: [linux, performance, networking, security, tcp, memory, scheduling]

vm.overcommit_memory = 1 # 允许内存超分(数据库/Redis 场景)

- **overcommit_memory = 1** — 允许内存超分,数据库、Redis 场景避免服务启动失败

- [[linux-memory-management-deep-dive]] — Linux 内存管理深潜

DevOps 技术面试指南 — 容器/云原生/内核 59 题

| 48 | cgroups 在 K8s 中的应用? | CPU(cfs_period_us/cfs_quota_us) + 内存(memory.limit_in_bytes/OOM) + IO(blkio) + PID(pids.max)。v1 内存泄漏→升级 v2 + systemd 驱动 | [[k8s-resource-limits-configuration]] |

| 13 | Redis 性能优化? | 合适数据结构 + TTL + pipeline + 持久化策略 + 哨兵/集群 + 内存分配 | [[redis-memory-optimization]] |

| [[redis-memory-optimization]] | Redis 内存优化 |

K8s 故障排查快速参考 — 从现象到根因

| 资源不足 | describe Events 显示 "Insufficient cpu/memory" | 降低 requests 或扩节点 |

| 137 | SIGKILL,通常 OOM | 调大 limits.memory 或排查内存泄漏 |

**OOM 建议:** limits.memory ≥ 峰值用量 × 1.2,并用监控观察实际 RSS。

Pod 排障 — CrashLoopBackOff / Exit Code 排查 / OOM / 探针 / 依赖服务 / ConfigMap

- **OOMKilled:** 增大 memory limits 或优化应用内存(Java 容器注意:`-Xmx` 设置 + 元空间/线程栈/直接内存等额外开销总和 < container limits)

# Message: "0/3 nodes are available: 1 Insufficient memory, 2 node(s) had taints..."

- Pod 被 OOMKill → 退出码 137,调大 memory limits 或优化内存

grep / awk / sed 运维实战三件套 — 从日志排查到配置修改

grep -C 5 "OutOfMemoryError" /var/log/app/app.log

2026-07-14 09:12:03 INFO Loaded 500000 records into memory

2026-07-14 09:12:06 ERROR OutOfMemoryError: Java heap space

Linux 系统负载过高排查思路与实战 — 11 步标准流程与 6 场景修复手册

# procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----

**系统日志关键字(`journalctl -xe | tail -50` / `dmesg | tail -50`;持续监控用 `journalctl -f`):** `Out of memory`(内存不足)、`I/O error`(磁盘 IO 错误)、`segfault`(进程段错误)、`hung task`(进程卡死)、`soft lockup`(软锁死)/ `hard lockup`(硬锁死)。

**Prometheus + Grafana 重点指标:** node_load1/node_load5/node_load15(Load Average)、node_cpu_seconds_total(CPU 使用时间)、node_memory_MemAvailable_bytes(可用内存)、node_memory_SwapCached_bytes(Swap 使用量)、node_disk_io_time_seconds_total(磁盘 IO 时间)、node_disk_read_bytes_total(磁盘读字节数)、node_disk_written_bytes_total(磁盘写字节数)、node_network_receive_bytes_total(网络接收字节数)、node_network_transmit_bytes_total(网络发送字节数)。以上指标名称仅供参考,实际指标名称取决于使用的 exporter 版本。

Redis 连接管理与熔断治理 — 连接数打满 / 僵尸连接 / 雪崩防护

| [[redis-memory-optimization]] | Redis 内存优化(客户端输出缓冲区 + 大响应排查) |

| [[server-performance-four-dimensions]] | 系统级 fd/memory 监控 |

Ansible Roles 实战全攻略:从零散 Playbook 到可复用项目

gather_subset: ['!all', '!min', 'hostname', 'distribution', 'memory', 'processor', 'network']

Total Memory: {{ ansible_memtotal_mb }} MB

线上故障排查清单 — CPU/磁盘/内存/GC/网络 四维速查

内存管理底层原理参见 [[linux-memory-management-deep-dive]](Buffer/Cache/Slab 全链路)。

| [[linux-memory-management-deep-dive]] | 内存 Buffer/Cache/OOM 全链路 |

K8s CI/CD 架构实战 — Jenkins / GitLab CI / Argo CD / Helm 全链路

memory: 4Gi

memory: 1Gi

K8s 高频问题一站式排查清单 — 10 大故障场景快速参考

| 节点资源压力(eviction) | 现有 Pod 被终止 | `The node was low on resource: memory` |

> ⚠️ **风险提醒:** CoreDNS 的 `resources.limits.memory` 不足会导致 OOM 重启,引发间歇性 DNS 超时——这是"服务一会好一会坏"的最常见原因。

Java 应用 CPU 100% 排查实战 — 从告警到代码行的四步法

- [[k8s-java-directmemory-oom-diagnosis]] — K8s Java DirectMemory OOM 诊断 — GC 正常/堆内存充足但 OOMKil

- [[linux-memory-management-deep-dive]] — Linux 内存管理(GC 根因涉及内存)

Linux 系统调优实战 — 接口响应从 500ms 降到 100ms 全复盘

| [[linux-memory-management-deep-dive]] | 内存管理深潜(swappiness/cache 压力) |

| [[k8s-java-memory-tuning-production-guide]] | Kubernetes 下 Java 内存调优完整指南 — 内存预算模型、生产参数配置、四层诊断流程、 |

Linux 硬件信息查询与软件管理命令速查 — CPU/内存/磁盘/网络/主板全覆盖

| `sudo dmidecode -t memory` | 查看物理内存插槽信息 |

| `sudo lshw -C memory` | 查看内存详细配置 |

Linux 系统性能排查全景指南 — USE 方法论 + 四维排查 + eBPF 实战

- `Out of memory` → 内存爆了

| [[linux-memory-management-deep-dive]] | Linux 内存管理深度解析 |

服务器负载过高排查 — 案例实战 / Netflix 60 秒法 / 常见根因

vmstat 1 3 # procs/memory/io/system/cpu

free -h -w # memory pressure

Wiki Schema

- memory: 内存管理与优化

MySQL 备份方案对比与选型 — 从工具原理到生产落地的工程手册

**预防**:备份盘容量规划 = 备份大小 × 1.5。加 `--use-memory=2G` 限制内存。

Redis 备份恢复实战 — 备份脚本 / 恢复流程 / 容灾方案

- [[redis-memory-optimization]] — Redis 内存优化完全指南(fork/COW 对 BGSAVE 的影响)

Redis 高可用 — 主从复制 / 哨兵 / 脑裂 / 集群踩坑

| [[redis-memory-optimization]] | 内存优化(淘汰策略场景参考) |

Redis 持久化机制 — RDB / AOF / 混合持久化

- [[redis-memory-optimization]] — Redis 内存优化完全指南(fork/COW 内存影响)

容器运维核心命令参考手册:Docker + K8s 全场景速查

| 按 CPU/内存排序 | `kubectl top pods -n --sort-by='.cpu\|.memory.usage'` |

高并发四大手段:缓存 / 限流 / 削峰 / 幂等 — 各自解决什么问题?

- [[redis-memory-optimization]] — Redis 内存优化(缓存的存储层基础)

Kubernetes DNS 故障排查与高可用实战:从超时到熔断的完整 SOP

| process_resident_memory_bytes | 内存使用量 | 接近限制值的 80% |

K8s 生产排障基本原则与快速定位流程

- `kubectl get nodes` → 节点状态(NotReady、DiskPressure、MemoryPressure)

存储排障 — PVC Pending / 挂载失败

- 建议 limits.memory 设为 requests.memory 的 1.5-2 倍(MySQL/Java 等)

CPU 100% 故障排查实战:从告警到根因的全链路分析与 10 大场景

-XX:+HeapDumpOnOutOfMemoryError \

磁盘 IO 监控参考 — iostat/vmstat 字段详解与五指标框架

### memory 段(KB)

Linux 磁盘分区与挂载完整实操指南 — 从分区到 LVM 生产实战

| [[linux-memory-management-deep-dive]] | 内存管理(含 swap 机制) |

Linux 目录结构完全指南 — FHS 标准与运维实战

- [[linux-memory-management-deep-dive]] — Linux 内存管理(/proc/meminfo)

生产环境 Linux 内核参数调优 — 6 个必调参数

- [[linux-memory-management-deep-dive]] — Linux 内存管理深潜(vm.swappiness/vm.min_free_kbytes 等参数详解)

Linux 高频运维命令全梳理 — 生产级命令参考手册

dmesg | grep -i "out of memory" # 查 OOM

Linux rm -rf 误删文件恢复实战指南 — 从事故复盘到数据恢复的完整手册

free -h > /tmp/memory.txt

SMART 磁盘故障预测实战 — 采集管道 + smartd 告警 + XGBoost 模型 + Prometheus 可视化

df = pd.read_csv(f, low_memory=False)

Keepalived+Nginx 高可用实战 — 3 个隐藏坑位与生产级防护方案

logger "Memory usage too high: $MEM_USAGE%"; exit 1