Gejala
Saat menjalankan layanan pada instans ECS, sistem mengembalikan error
task: Cannot allocate memory. Log sistem mungkin berisi entri seperti berikut: 15 10:49:08 iZbp17u xxx systemd: Failed to fork: Cannot allocate memory
15 10:49:08 iZbp17u xxx systemd: frp@8050.service failed to run 'start' task: Cannot allocate memory
15 10:49:08 iZbp17u xxx systemd: Failed to start example systemd custom service unit file 8050.
15 10:49:08 iZbp17u xxx systemd: Unit frp@8050.service entered failed state.
15 10:49:08 iZbp17u xxx systemd: frp@8050.service failed.
15 10:49:08 iZbp17u xxx systemd: Failed to fork: Cannot allocate memory
15 10:49:08 iZbp17u xxx systemd: frp@8049.service failed to run 'start' task: Cannot allocate memory
15 10:49:08 iZbp17u xxx systemd: Failed to start example systemd custom service unit file 8049.
15 10:49:08 iZbp17u xxx systemd: Unit frp@8049.service entered failed state.Penyebab
Masalah ini terjadi karena jumlah proses pada sistem melebihi batas yang dikonfigurasi.
Kernel Linux menggunakan parameter
kernel.pid_max untuk membatasi jumlah total proses. Jika jumlah proses yang sedang berjalan melebihi nilai kernel.pid_max, setiap upaya membuat proses baru akan gagal dan sistem melaporkan error task: Cannot allocate memory.Catatan Jika jumlah proses yang sedang berjalan melebihi dua pertiga dari nilai
kernel.pid_max, segera tingkatkan nilai kernel.pid_max untuk mencegah gangguan layanan.Solusi
Ikuti langkah-langkah berikut untuk meningkatkan nilai
kernel.pid_max, sehingga sistem dapat menjalankan lebih banyak proses.Catatan Pada sistem 64-bit, nilai maksimum untuk
kernel.pid_max adalah 222kernel.pid_max. Pada sistem 32-bit, nilai maksimumnya adalah 32.768.- Sambungkan ke instans ECS.
Untuk informasi selengkapnya, lihat Connect to an ECS instance.
- Jalankan perintah berikut untuk memeriksa apakah jumlah proses saat ini melebihi batas sistem.
- Periksa jumlah proses yang sedang berjalan.
ps -eLf | wc -l - Periksa jumlah maksimum proses yang diizinkan oleh sistem.
sysctl kernel.pid_max
Jika jumlah proses yang sedang berjalan mendekati atau melebihi batas maksimum, lanjutkan ke langkah 3.
- Periksa jumlah proses yang sedang berjalan.
- Ganti
XXXXdengan nilai baru untukkernel.pid_max.- Untuk mengatur nilai sementara, jalankan salah satu perintah berikut. Pengaturan ini akan direset setelah instans direstart.
sysctl -w kernel.pid_max=XXXXecho XXXX> /proc/sys/kernel/pid_max
- Untuk mengatur nilai secara permanen, jalankan perintah berikut. Pengaturan ini tetap berlaku meskipun instans direstart.
echo "kernel.pid_max=XXXX" >> /etc/sysctl.conf sysctl -p
Nilai baru langsung berlaku. - Untuk mengatur nilai sementara, jalankan salah satu perintah berikut. Pengaturan ini akan direset setelah instans direstart.