Senario
Kontena produksi yang menjalankan aplikasi Java berulang kali keluar dengan kod 137 (OOMKilled). Log aplikasi tiada ralat, tetapi kontena ranap setiap beberapa minit.
Gejala
docker ps -amenunjukkan status kontena sebagaiExited (137)docker inspect <kontena>menunjukkanState.ExitCode: 137danState.OOMKilled: true- Hos
dmesgmengandungi mesejOut of memory: Kill process - Penggunaan memori kontena menghampiri atau melebihi had
Diagnosis
- Periksa kod keluar:
docker inspect <kontena> --format='{{.State.ExitCode}}' - Sahkan OOM:
docker inspect <kontena> --format='{{.State.OOMKilled}}' - Pantau penggunaan memori:
docker stats <kontena>atau baca fail cgroup:cat /sys/fs/cgroup/memory/docker/<id-kontena>/memory.usage_in_bytes - Periksa log kernel hos:
dmesg | grep -i oom - Semak tetapan memori aplikasi: Argumen JVM
-Xmxdan-Xms
Arahan
- Lihat butiran kontena:
docker inspect <kontena> - Lihat log:
docker logs <kontena> - Statistik masa nyata:
docker stats --no-stream - Laraskan had memori dan mulakan semula:
docker update --memory 512m --memory-swap 512m <kontena>kemudiandocker restart <kontena>
Kawalan Risiko
- Tetapkan had yang sesuai: Gunakan
--memorydan--memory-swap(tetapkan sama untuk mematikan swap) - Rizab memori: Gunakan
--memory-reservationuntuk had lembut - Pemantauan: Integrasi dengan Prometheus, tetapkan amaran apabila penggunaan memori > 80%
- Amalan terbaik produksi: Gunakan ResourceQuota dan LimitRange Kubernetes
Rollback
- Kembali ke imej sebelumnya:
docker rollback <kontena>atau gunakan semula imej lama - Pulihkan had sumber asal:
docker update --memory <asli> --memory-swap <asli> <kontena>
Pengesahan
- Kontena kekal
Upuntuk tempoh yang panjang docker statsmenunjukkan penggunaan memori di bawah had yang ditetapkan- Tiada entri OOM baharu dalam
dmesg
Bila Perlu Hantar Tiket OpsGlobal
- OOMKilled berterusan walaupun had sumber betul
- Kehabisan memori pada tahap hos menjejaskan pelbagai kontena
- Perlukan bantuan menala memori aplikasi (contohnya, timbunan JVM)
- Ralat runtime kontena pada peringkat kernel (contohnya, kegagalan shim, segfault)
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu DevOps dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Panduan praktikal untuk mendiagnosis dan menyelesaikan masalah runtime kontena Docker yang biasa, terutamanya OOMKilled (kod keluar 137). Termasuk langkah diagnosis, arahan, kawalan risiko, rollback, dan pengesahan.
Langkah Penyelesaian
Sahkan impak dan perubahan terkini, kumpul log, konfigurasi dan metrik, kemudian baiki mengikut risiko.
Contoh Arahan
Gantikan contoh dengan nama sumber sebenar dan simpan kata laluan, token atau kunci dalam pembolehubah persekitaran.
Risiko
Sebelum operasi produksi, semak sandaran, akses, tetingkap perubahan dan pelan rollback.
Pelan Rollback
Simpan konfigurasi dan versi asal; rollback konfigurasi, imej atau perubahan pangkalan data jika metrik tidak normal.
Senarai Serahan
Rekod punca isu, arahan penting, langkah pembaikan, hasil pengesahan dan cadangan susulan.
Perlu bantuan isu teknikal serupa?
Jika pelayan, Kubernetes, Docker, CI/CD, pangkalan data atau pemantauan anda bermasalah, hantar log dan konfigurasi untuk diagnosis jauh.