it-swarm.dev

AWS lambda - Rilis/penyimpanan tmp setelah setiap eksekusi

Saya memiliki 4 fungsi lambda yang akan dipanggil pada waktu yang sama (oleh SNS), frekuensi acara SNS adalah 5 menit. Setiap fungsi memproses mount besar data dan gambar (~ 300MB) jadi saya menyimpannya di folder /tmp (batas 500MB).

Pada awal fungsi, saya menulis beberapa kode ke folder /tmp bersih, untuk memastikan itu tidak kehabisan memori (Karena saya sudah tahu bahwa AWS lambda kadang-kadang menggunakan wadah sebelumnya untuk meningkatkan kinerja).

Saya memeriksanya secara manual (membuat pesan dan menerbitkan oleh SNS ke 4 fungsi lambda), itu berfungsi dengan baik.

Tetapi ketika dijalankan secara otomatis (dipanggil setiap 5 menit) hasilnya tidak seperti yang saya harapkan. Eksekusi pertama baik-baik saja, tetapi kali berikutnya, 1 dari 4 atau bahkan 4 fungsi lambda membuang kesalahan yang terkait dengan "kehabisan memori": "Tidak ada ruang yang tersisa di perangkat", tidak dapat memuat lib, ...

Sebelumnya, saya menggunakan nodejs (4.3) itu berfungsi dengan baik kedua kasus.

Tapi saya harus mengubah ke python karena beberapa alasan, aliran utama dan mount data yang dibuat adalah sama. Tetapi gagal ketika dijalankan secara otomatis.

Saya berpikir bahwa masalah ini berasal dari cache kontainer sebelumnya (wadah bekas), saya memeriksa /tmp setelah bersih (ls -alh /tmp) tidak ada file tetapi ketika memeriksa penyimpanan (df /tmp) itu menunjukkan bahwa yang digunakan adalah 77%.

Setiap saran untuk membuat folder /tmp bersih atau mengatasi solusi sangat menghargai. Terima kasih!

Diedit: Kode saya gunakan untuk membersihkan folder /tmp:

from subprocess import call
...
call('rm -rf /tmp/*', Shell=True)
13
Ngoan Tran

Ya, lambda menjadi layanan yang dikelola; mereka menggunakan kembali sumber daya dasar yang sama jika lambda dipanggil berulang kali. Ini adalah masalah produksi yang kami hadapi dan perbaiki dengan menghapus/tmp. Pada catatan terpisah, AWS harus menyebutkan ini di FAQ mereka. 

if os.path.exists(tmp_file_path):
        os.remove(tmp_file_path)
        print("Removed the file %s" % tmp_file_path)     
else:
    print("Sorry, file %s does not exist." % tmp_file_path)
1
Sid

Kontainer sering digunakan kembali, tetapi tidak secara bersamaan. Bersihkan direktori temp Anda ketika fungsi selesai dan lihat apakah masalah teratasi. 

1
omuthu