私は常に強力なサーバーでerlangアプリケーションを実行してきました。ただし、特にユーザーが多い場合は、このようなメモリエラーを回避できない場合があります。
クラッシュダンプは次のように書き込まれました:erl_crash.dump eheap_alloc:467078560バイトのメモリ(「ヒープ」タイプ)を割り当てることができません。さらに厄介なのは、20GBのRAM、たとえば8コアのサーバーがあることです。erlangが言うメモリを見ると、割り当てることができず、それがクラッシュした理由でもあります。サーバーに在庫があるものと比較してメモリが非常に少ないためです。
今日の私の質問(閉じられていないことを望みます)は、必要なときにerlang VMにより多くのメモリを提供するために、どのオペレーティングシステム構成を実行できるか(RedHat、Solaris、Ubuntu、またはLinuxを一般的に考慮してください)です。
そのような対応サーバーでerlangアプリケーションを実行する場合、基盤となるオペレーティングシステムに関して(erlang以外で)どのようなメモリを考慮する必要がありますか?
問題の背景
Erlangは、特にプロセスが数千の場合にメインメモリを消費します。を使用してWebサービスを実行しています
Yaws Web Server
。同じノードで、Mnesiaを約3つram_copies
のテーブルで実行しています。イントラネット上で実行されるより大きなWebアプリケーションの一部としての通知システム。ユーザーは、別のWebサーバーと別のハードウェアで実行されているメインアプリケーションからJSONPを介してこのシステムにアクセスします。各ユーザー接続は、必要なデータを直接mnesiaに照会します。ただし、ユーザーが増えるにつれて、私は常にcrash dump
。私はアプリケーション自体を可能な限り微調整し、コードを標準にクリーンアップし、文字列よりも多くのバイナリを使用するなど、yawsプロセスとmnesiaの間のgen_serversのような単一のポイントを避け、各接続がmnesiaに直接ヒットするようにしました。サーバーは、大量のRAMとディスクスペースを備えた非常に優れた機能を備えています。ただし、もう少しメモリが必要になるとノードがクラッシュするため、オペレーティングシステムにメモリをerlangに拡張させる方法を見つける必要があります。オペレーティングシステムはREDHAT ENTERPRISE 6