に対応し、最小化、メモリ使用Common Lisp(SBCL)
-
22-08-2019 - |
質問
しているVPSないメモリ...256Mb)のよう心掛けております利用Common Lisp開発SBCL+Hunchentoot書簡単なウェブアプリとなります。大量のメモリが表示されるを得なく使用できないように、特に複雑でいたページのメモリのいずれかが狂をすべてのスワップ(がない場合、スワップ)金型です。
ながらやっていく必要があるす:
- であるかを調べるすべてのメモリの場合は図書館では、特に)
- 限定メモリの量をSBCLを使用することが可能で、大量の入れ替え
- 取り扱いを綺麗にメモリ、およぶので(web-アプリにしたいのです清潔を心掛けた。
これらを合理的に簡単なものでも可能ですか?人々はどう対応したメモリやメモリ制約のある条件のLisp?
(もしご注意64ビットSBCLが表示される使用、文字通りの倍のメモリとして32ビットとしています。このか?で走行可能32ビット版の場合で保存され多くのメモリー)
解決
(例えば、sbcl --dynamic-space-size 128
は128Mにメモリ使用量を制限する)、SBCLのメモリ使用量を制限--dynamic空間サイズオプションを使用します。
(room)
を呼び出します。メモリーを使用している人を見つけるために、あなたは、異なる時間に(sb-ext:gc :full t)
(使用されているどのくらいのメモリ伝え関数)を呼び出すことができますまだ回収されていないごみ)を測定していない部屋ます。
また、それはメモリ割り当てを測定するために、SBCLプロファイラを使用することが可能です。
他のヒント
すべてのメモリを使用しているかを調べます (それは特にライブラリや私、の場合)
アッティラLendvaiは、割り当てられたオブジェクトはどこから来るのかを見つけるためにいくつかのSBCL固有のコードを持っています。 http://article.gmane.org/gmane.lispを参照してください。鋼-bank.devel / 12903 と、必要であれば、彼にプライベートメールを書きます。
それは実装固有のリークではありません確実にするために、好ましくは、(Clozure CLのような)正確なGCで、別の実装を試してみてください。
SBCLメモリの量を制限します 巨大避けるため、使用を許可されています スワッピングの量
すでに他の人が答えています。
メモリの実行時にきれいに物事を処理します うち、むしろそれはだから(クラッシュより 私はそれを続けていくにしたいウェブアプリと )をクリーンアップしてみます。
256メガバイトはきついですが、とにかく:残りの空き領域をチェックする定期的な(多分1S)、時限スレッドをスケジュールします。空き領域がXはその後、新しいものと現在のSBCLプロセスイメージを置き換えるために()のexecを使用するよりも小さい場合ます。
、私は64ビットのLispは32ビットの1の二倍のスペースを取ることを期待します。普通(小)INTは、メモリの64ビットのチャンクを使用します。私はあなたがそれを宣言しない限り、それは、機械語よりも少ないを使用しますとは思わない。
私は#2、#3を助けることはできませんが、#1を把握すれば、私はそれが問題になることはありません疑います。私は年齢のためランニングSBCL / Hunchentootインスタンスを見てきました。私はメモリのとんでもない量を使用している場合、それは通常、自分のせいです。 : - )
私は、二回meoryを使用して64ビットのSBCLに驚かれることはありません。
予想より長くうろついメモリを保つ代表的なものが無長い便利な、まだルート割り当てセットへのパスを持っている参照です(ハッシュテーブルがあり、私は、これらのものは残るせるの良い方法を見つけます。)。あなたは、あなたのコード内のGCへの明示的な呼び出しを散在試してみて、グローバル変数で物事を格納しない(可能な限り)にしてください可能性があります。