CHƯƠNG 19 · Performance Engineering•BÀI 74 / 80

OOM, Python/JVM memory và profiling

Memory limit là cơ chế khác CPU quota.

Vận hành◷ 4 phút đọc2/4 trong chương

Nắm bản chất

Khi container vượt điều kiện memory limit và kernel không reclaim đủ, có thể xuất hiện OOMKilled. Exit code 137 không tự chứng minh OOM; cần đối chiếu Pod status, memory.events và node events. Cũng phải phân biệt container OOM với Pod eviction do node pressure.

Python tracemalloc theo dõi Python allocations chứ không toàn bộ native RSS; JVM heap cũng không bao gồm mọi native allocations/metaspace/stacks. Profiling cần chọn công cụ theo runtime và tránh overhead quá lớn trong production.

Luồng hoạt động

Allocations→memory.current→OOM events

Hãy tự giải thích mỗi mũi tên: dữ liệu, quyền hoặc tín hiệu nào được truyền qua bước này?

Lệnh & cấu hình mẫu

kubectl -n perf19 describe pod POD
kubectl -n perf19 exec deploy/perf19-api -- cat /sys/fs/cgroup/memory.current
kubectl -n perf19 exec deploy/perf19-api -- cat /sys/fs/cgroup/memory.events
python3 profiling/python_profile.py

Lệnh có placeholder hoặc phụ thuộc môi trường thì cần thay thông tin thực tế, kiểm tra quyền và chỉ thực hiện trên tài nguyên được phép.

Bài tập 10–20 phút

✳

Dùng OOM demo Buổi 19 trên Kind namespace riêng; sau đó giải thích vì sao liên tục nâng memory limit có thể che dấu memory leak.

Lỗi dễ mắc

!

Không thực hành memory-bomb/OOM trên production clusters hoặc nodes dùng chung với ứng dụng thật.

Tự kiểm tra

Exit 137 có tự động đồng nghĩa Out Of Memory không?Xem đáp án ↗

Không. Cần kiểm chứng reason=OOMKilled và những events liên quan.

TÀI NGUYÊN ĐI KÈM

Học thêm qua lab

Có project thực hành đúng với chương này, kèm README và những giới hạn môi trường cần lưu ý.

↓ Tải mã nguồn thực hành chương 19
NGUỒN CHÍNH THỨC

Đối chiếu tài liệu gốc

Cú pháp và khả năng hỗ trợ có thể thay đổi theo phiên bản. Trước khi dùng Production, hãy kiểm tra tài liệu tương ứng.

Mở tài liệu chính thức ↗