0

私は常に強力なサーバーで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

4

2 に答える 2

4

これは、アドレス指定可能なRAMが約4GBしかない32ビットモードで実行していることが原因である可能性があります。64ビットバージョンのerlangに切り替えて、再試行してください。

于 2012-10-30T09:14:12.187 に答える
1

私が読んだいくつかのさまざまなサーバーチュートリアルでは、サービスがroot以外のユーザーとして実行されている場合、そのユーザーが通常許可されているよりも多くのメモリにアクセスできるように/etc/security/limits.confを編集する必要があるかもしれません。以下の例では、ユーザーfooserviceが2GBを使用できるようにします。

fooservice      hard    memlock   2097152
于 2013-04-26T12:59:45.540 に答える