Saya belum sempat melihat sumbernya, tapi berikut beberapa komentarnya:
Pertanyaan 1. Dengan server yang begitu kuat, mengapa sistem operasi gagal menyediakan memori seperti itu ke aplikasi (itu adalah satu-satunya aplikasi yang berjalan)?
Karena VM Erlang mencoba menggunakan lebih dari memori bebas yang tersedia.
Pertanyaan 2. Emulator Erlang yang saya mulai diinstruksikan untuk dapat memunculkan proses sebanyak mungkin yang diperlukan. nilai +P 13421779. IsErlang VM gagal mengakses memori ini atau gagal mengalokasikannya ke prosesnya?
Tidak. Jika Anda kehabisan proses, VM Erlang akan mengatakan demikian (dan VM akan tetap aktif dan berjalan):
=ERROR REPORT==== 18-Aug-2011::10:04:04 ===
Error in process <0.31775.138> with exit value: {system_limit,[{erlang,spawn_link, [erlang,apply,[#Fun<shell.3.130303173>,[]]]},{erlang,spawn_link,1},{shell,get_command,5}, {shell,server_loop,7}]}
Pertanyaan 3. Untuk Solaris, ia melihat satu proses:epmd, mungkin berisi dan memulai ribuan utas mikro. Konfigurasi apa yang dapat saya buat untuk Solaris agar aplikasi saya tidak pernah berhenti meskipun "lapar memori"? Ruang swap yang tersedia 16 GB, RAM 20 GB, jujur pasti ada yang salah.
epmd
adalah deamon pemetaan port Erlang. Ini bertanggung jawab untuk mengelola distribusi Erlang dan tidak ada hubungannya dengan aplikasi Erlang individu Anda. Proses yang harus Anda cari adalah nama beam.smp
yang paling disukai. Ini akan menunjukkan konsumsi memori OS dari Erlang VM dll.
Pertanyaan 4. Konfigurasi apa yang dapat saya buat pada Erlang Emulator, untuk menghindari crash dump memori heap ini terutama ketika semua memori yang mungkin diperlukan tersedia di server? Bagaimana saya akan menjalankan lebih banyak aplikasi yang memakan memori di server ini jika Erlang masih gagal mengalokasikan memori tersebut ke pengindeks sistem file sederhana (well, ini sangat bersamaan)?
Erlang VM harus dapat menggunakan semua memori yang tersedia di mesin Anda. Namun, itu tergantung pada bagaimana aplikasi Anda ditulis. Ada banyak alasan kebocoran memori:
- Pengisian tabel atom (Anda membuat terlalu banyak atom unik)
- Tabel ETS atau Mnesia bukan sampah yang dikumpulkan (Anda tidak menghapus elemen lama yang tidak digunakan)
- Memori tidak cukup untuk proses (Anda menghasilkan terlalu banyak proses)
- Terlalu banyak binari yang dibuat (Anda mungkin menyimpan referensi yang tidak digunakan ke binari lama)