web-dev-qa-db-ja.com

ColdfusionJVMヒープvs RAM使用法

Coldfusion/Apacheを実行しているCentOSサーバーのメモリ使用量を明確にするためのサポートが必要です。

ファイルをメモリに読み込み、1行ずつ処理し、DBに挿入して、ファイルを削除するスクリプトがあります。最善のプロセスではなく、それに取り組んでいますが、今のところはやらなければなりません。

ファイルが読み取られると、メモリの負荷がかかり、サーバーがスワップファイルを使用する原因になり、実際に応答しなくなりました-合計RAM TOPでの使用量は3.9/3.9 GBで、スワップは1.5/1.9

再起動する必要があり、合計使用量RAMが約2GBに低下し、スクリプトを実行すると3GBに戻りました。過去数時間で3.3GBにゆっくりと増加しました-私はまだある程度のスペースがあり、サイトはすべて応答しますが、メモリは解放されていません。

また、再起動後、FusionReactorは私の最大ヒープと割り当てヒープを3.93GBと表示し、0.3GBから1GBの範囲で使用されます。これはTOPの言うことと一致しません。これは3.9の58%でCF9であり、約2.25GBです。

スクリプトは一晩でデータをインポートするので、後で実行すると、スワップに流出してサイトの速度が一晩遅くなると思います(一晩でトラフィックが少ないが、修正が必要です-今は無効にする必要があります)

だから私が理解していない2つのこと:

  • ファイルが読み取られ、スクリプトが終了したときにRAMが3-> 2からドロップバックしないのはなぜですか(fileCloseがありません-CFCが多すぎますか?)
  • tOPがCF9の3.9GB(2.25GB)の58%を示しているのに、FusionReactorメモリ使用ヒープが最大1GBを示しているのはなぜですか

[〜#〜] update [〜#〜] --jvm.config、コメントのほとんどは少ない

# Where to find JVM
Java.home=/opt/coldfusion9/runtime/jre/

# Arguments to VM
Java.args=-server  -Djava.awt.headless=true -Xms4096m -Xmx4096m 
    -Dsun.io.useCanonCaches=false -XX:ParallelGCThreads=2 -XX:PermSize=64m 
    -XX:+UseConcMarkSweepGC -XX:NewSize=1024m -XX:MaxNewSize=1024m -XX:SurvivorRatio=4
    -XX:+UseParNewGC -XX:MaxPermSize=192m -Dcoldfusion.rootDir={application.home}/../ 
    -Dcoldfusion.libPath={application.home}/../lib -Dcoldfusion.classPath=
    {application.home}/../lib/updates,{application.home}/../lib,
    {application.home}/../gateway/lib/,{application.home}/../wwwroot/WEB-INF/flex/jars,
    {application.home}/../wwwroot/WEB-INF/cfform/jars -
    javaagent:/opt/fusionreactor/instance/coldfusion.CF9Standalone.cc02/                 
    fusionreactor.jar=name=coldfusion.CF9Standalone.cc02,address=8088

# commas will be converted to platform specific separator and the result will be passed
# as -Djava.ext.dirs= to the VM
Java.ext.dirs={jre.home}/lib/ext

# where to find shared libraries
Java.library.path={application.home}/../lib
system.path.first=false

# set the current working directory
Java.user.dir={application.home}/../../lib

# JVM classpath
Java.class.path={application.home}/servers/lib,{application.home}/../lib/
    macromedia_drivers.jar,        
    {application.home}/lib/cfmx_mbean.jar,{application.home}/../lib/oosdk/classes,
    {application.home}/../lib/oosdk/lib,{application.home}/lib
2
Pete

ヒープ設定は2ではなく4ギグを構成します-それはXms4096m-Xmx4096mがあなたに言っていることです。パーマサイズはさらに200メガを追加します。新しいサイズ(若い世代が1回の操作で取得する量)は非常に大きく(通常、この数は64mから256mの間です)、若いヒープを上下にローミングするための生成スペースを提供します。

したがって、3.9gがアクティブであることがわかるという事実は正しいですが、4.2のようなものが表示されると思います。それでもTopは、JVM割り当てで奇妙な計算を行うことがあります。

あなたはColdFusion/Jrunがファイルを全体としてメモリに(ヒープに)読み込むことは正しいです-したがって、ヒープはそれを収容するのに十分な大きさである必要があります。それでも、小さなファイルでも若い世代をトリガーすると、newsizeパラメータのために、完全なギガバイトの割り当てが発生します。

サーバーに合計4ギガしかない場合は、newsizeとmaxnewsizeを256mに設定し、ヒープを3072mに設定してXms3072m-Xmx3072mのようにすることをお勧めします。

これらの設定は64ビットCF 9サーバー-に適用されます。32ビットを実行している場合、32ビットプラットフォームすべてに固有の連続したmemの問題により、ヒープに対して約2ギガの厳しい制限があります。幸運を。

2
Mark A Kruger