ColdFusion 10以降 Linux 環境の cfhttp タグの処理時間について

Linux 版の ColdFusion 10以降 で <cfhttp>タグの処理時間が長くなることが確認されています。以下に例を示します。

 

  1. まず<cfhttp>タグを使用するページを作成します。例えば、下記のように <cfhttp> タグだけを書いたページでも構いません。

    <cfhttp url="http://www.samuraiz.co.jp" >
  2. 上記のページをブラウザで “一度だけ” リクエストします。この場合は、特に処理時間が長くなるなどの問題はありません。
  3. 次に、1. のページにもう一つ <cfhttp> タグを追加します。2番目の<cfhttp>タグで呼び出すページは1番目と同じでも構いません。例えば下記のように記載します。

    <cfhttp url="http://www.samuraiz.co.jp" >
    <cfhttp url="http://www.samuraiz.co.jp" >
  4. 再び、ブラウザで上記のページをリクエストします。そうすると処理が完了するまで 5秒程度時間待つようになります。
  5. さらにもう一つ <cfhttp> タグを追加してブラウザでリクエストすると、処理が完了するまで 10 秒程度かかることが分かるでしょう。

    <cfhttp url="http://www.samuraiz.co.jp" >
    <cfhttp url="http://www.samuraiz.co.jp" >
    <cfhttp url="http://www.samuraiz.co.jp" >
  6. ログからも動作を確認してみましょう。デフォルトの設定で ColdFusion 10 を実行していると、ColdFusion が出力するログに <cfhttp>タグの処理時間が記載された http.log があります。
    • 一つだけ<cfhttp>タグを指定した呼び出しでは
      "Information","catalina-exec-15","01/29/13","10:03:44",,"Starting HTTP request { URL='http://www.samuraiz.co.jp', method='get'}" "Information","catalina-exec-15","01/29/13","10:03:44",,"HTTP request completed   {Status Code=200 ,Time taken=17 ms}"
    • 二つ<cfhttp>タグを指定した呼び出した場合の結果は
      "Information","catalina-exec-14","01/29/13","10:07:21",,"Starting HTTP request {
      URL='http://www.samuraiz.co.jp', method='get'}"
      "Information","catalina-exec-14","01/29/13","10:07:21",,"HTTP request completed 
       {Status Code=200 ,Time taken=23 ms}"
      "Information","catalina-exec-14","01/29/13","10:07:21",,"Starting HTTP request {
      URL='http://www.samuraiz.co.jp', method='get'}"
      "Information","catalina-exec-14","01/29/13","10:07:26",,"HTTP request completed 
       {Status Code=200 ,Time taken=4965 ms}"
    • 三つの場合の結果は
      "Information","catalina-exec-14","01/29/13","10:07:38",,"Starting HTTP request {
      URL='http://www.samuraiz.co.jp', method='get'}"
      "Information","catalina-exec-14","01/29/13","10:07:38",,"HTTP request completed 
       {Status Code=200 ,Time taken=62 ms}"
      "Information","catalina-exec-14","01/29/13","10:07:38",,"Starting HTTP request {
      URL='http://www.samuraiz.co.jp', method='get'}"
      "Information","catalina-exec-14","01/29/13","10:07:43",,"HTTP request completed 
       {Status Code=200 ,Time taken=4953 ms}"
      "Information","catalina-exec-14","01/29/13","10:07:43",,"Starting HTTP request {
      URL='http://www.samuraiz.co.jp', method='get'}"
      "Information","catalina-exec-14","01/29/13","10:07:49",,"HTTP request completed 
       {Status Code=200 ,Time taken=5133 ms}"
  7. いずれも 2度目以降の呼び出しから 5秒近く処理に時間がかかっていることが分かると思います。

 

<cfhttp>の処理を実行する際に、2度目以降の呼び出しから処理に時間がかかってしまう影響は、上記の例のように一つのページに複数回の <cfhttp> タグが呼び出される処理を行っている場合と、それ以外にも下記ような場合があげられます

  • <cfhttp>タグが含まれるページをスケジュールタスクから呼び出した場合
    • ​ColdFusionのスケジュールタスクの処理は、指定された時間に指定されたURLを内部で<cfhttp>を使って実行しているため、呼び出されたページに<cfhttp>タグの処理が含まれていると、2度目以降の呼び出しとなります
  • <cfhttp>タグが含まれるページが同時に複数回呼び出された場合

 

上記の現象が発生する理由は、<cfhttp>タグの処理を行う際に呼び出される Apache HTTPClient ライブラリ内部で疑似乱数を生成しているためです。これは、システムの"エントロピー"に依存する操作となり、複数回の利用によって"エントロピープール"が枯渇するため乱数生成時に待ちが発生しています。

 

上記の現象の対応として、開発元が公開しているColdFusion公式ブログでは疑似乱数の生成にプールを再利用する /dev/urandom に切り替える方法等を紹介しています。

http://blogs.coldfusion.com/post.cfm/optimizing-cfhttp-calls-on-linux-systems

  注意事項

  • 上記のページに記載されている jvm.config は、デフォルトのスタンドアロン構成の場合は[cf10_root]/cfusion/bin フォルダに入っていますので、ファイルを開いてjava.argsに値を指定します。または、ColdFusion Administrator にログインして、[サーバーの設定] - [JavaとJVM]の設定画面の『JVM引数』で指定する事も可能です。
  • 値を指定の際は、既に "-Djava.security.egd" 項目が含まれているかを確認して下さい。含まれている場合は値のみの変更下さい。※値が既に urandam と記載されている場合も、上記のページに記載されているようにurandamのパスを変更(file:/dev/./urandom)して下さい。
  • 手動で値を追加する際は、余分な改行を含めないように注意して下さい。

 

尚、jvm.config、または ColdFusion Administrator の [Java と JVM] で誤った指定を行うと、ColdFusionの起動に失敗する場合もあります。そのため、まずはテスト環境や開発環境で動作をお試し頂くことをお勧めします。

 

 

 

※記事のカテゴリを「ColdFusion 10情報」から「技術情報」に変更しました。


 

 

記事公開日:2013年01月29日
最終更新日:2016年11月17日


x

Sample Modal Window

This is just a sample…

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.