Java1.8以降、ColdFusionでロードしたファイル(.cfmや.cfcファイルなどをリクエストしたファイル)や内部エンジンのTomcatやJDK自身が起動等にて読み込んだクラスファイルなどをメモリに格納する領域が Permanent領域(ヒープの一種)から Metaspace領域(ネイティブメモリ)へと変更されました。
これにより、JVMのヒープの一部として割り当てられていたものがOSの領域で作成されるため、従来よりもサイズの上限の意識が緩和される状況となりました。しかし、無尽蔵にネイティブメモリを使用されることを防ぐため、上限値を定める「-XX:MaxMetaspaceSize」の設定があり、ColdFusion ではデフォルトで 192 MB が割り当てられています。
「java.lang.OutOfMemoryError: Metaspace」は、設定された上限に達しMetaspaceが足りなくなった場合に発生するエラーで、ColdFusionの実運用環境でしばしば発生したとの報告があります。Metaspaceに関する説明や不足する仕組みなどは、下記のSlideshareの資料が参考になります(記事はOpenJDKの実装から見ているため、ColdFusionがサポートしているOracleJDKとは異なる事も考えられますが、動きやOutOfMemoryに遭遇した際の動作は参考になります)
https://www.slideshare.net/YaSuenag/metaspace
上記2.の状態になると、高いCPU負荷と無応答時間(30秒以上の報告あり)が発生します。また、特定のページ画面が表示されない(正常に動作する.cfmページとしない.cfmページがある)などの現象が発生する場合もあります。また、一時的にMetaspace領域が開放されても、同じアプリケーションを引き続き動作させている以上は、読み込むクラスファイルも同じであるため、必然的にOutOfMemoryが発生する状況を繰り返し、結果ColdFusionアプリケーションの動作が不安定な状態が不規則な状態になることを招きます。
実稼働環境で運用されているアプリケーション(つまり、作成した.cfmや.cfcの規模、一時ファイル等の作成頻度など)に依存するため、一概にすべての環境で現象が発生するとは限りません。ただし、旧バージョンから新バージョンへ移行した場合などでも発生する場合がある模様です。この要因には、ColdFusionをバージョンしたことによって、新たな機能(CF関数)やライブラリが追加され、以前のバージョンよりもリソースが増加していることが考えられます。また、後述のJava1.8以降で確認されている問題によって、Metaspaceが多く消費されることが要因になる可能性もあります。
旧バージョンからそのまま移行したり、必要の応じてアプリケーションを作成している以上、アプリケーション自体を改修して対応していくことは困難だと思われますので、まずは、Metaspaceの上限を増やすことで、現象の回避が可能かを検討してください
【注意】 OSのメモリ使用量に余裕があることを確認してください。
仮想OS環境など、割り当てメモリ量に余裕がない場合はメモリの増加を検討ください。
「参考手順」
ColdFusion側ではMetaspaceのサイズを計測する方法はありません。GC.logを取得するようにJVMパラメータを追加して、FullGCが発生したりMetaspaceのOutOfMemoryが再発した時のMetaspaceのサイズの推移を確認する方法や、Javaのjconsoleを使用して確認する方法などを検討してください。
【参考サイト】
https://nimitsharma.wordpress.com/2013/04/25/how-to-configure-jconsole-with-coldfusion/
https://docs.oracle.com/javase/jp/8/docs/technotes/guides/management/jconsole.html
「参考手順」
下記の「ColdFusion のパフォーマンスに関する問題とトラブルシューティング」のページの最後にXML解析によってパフォーマンスに影響がでる場合の説明があります。
1 つまたは 2 つの事例に別の問題が発生しました。XML 解析によってパフォーマンスに影響が出る場合は、以下の jvm 引数で修正できます。
-Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize=true
https://helpx.adobe.com/jp/col
上記の問題はXMLの解析処理の問題ですが、この問題によって、Metaspaceの領域が不足するOutOfMemoryを引き起こすという事例が報告されております。
ColdFusionの内部仕様は公開されておらず、どの処理で発生するかなどの詳細も不明なため、運用されているアプリケーションにも該
ColdFusion 2018では、上記のパラメーターがデフォルトで登録されています
記事公開日:2019年11月22日
最終更新日:2021年07月27日
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent suscipit iaculis libero sed tristique. Quisque mollis dolor non tellus placerat vitae sodales lectus porta. Curabitur ut suscipit tellus. Maecenas rhoncus, ante vitae vehicula vestibulum, metus sapien dapibus tellus, et mattis dolor neque vitae nisl. Nullam eleifend ultrices ipsum eget pretium. Curabitur semper metus ut ante adipiscing nec volutpat sem rutrum. Nullam a nisi lacus, non interdum ante. Vivamus ante augue, commodo vel egestas sed, pharetra nec dui. Quisque sed tellus felis. Donec ipsum mauris, sagittis eu accumsan in, aliquam non ipsum.
Vestibulum tempor nunc nec felis scelerisque eget elementum erat dignissim. Ut vel ipsum mollis orci venenatis luctus. Aenean vehicula quam vel quam porttitor ac iaculis elit pulvinar. Proin consequat, ipsum eu venenatis semper, justo turpis posuere tortor, ac placerat metus nisl et lectus. Nulla cursus dui id nunc ullamcorper sed semper nisl lobortis. Aliquam erat volutpat. Phasellus arcu ante, imperdiet in ornare sed, laoreet eu massa.