We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 19592
    • 56 Posts
    お久しぶりです。
    modxにもなれさくさくサイト管理をしていたのですが、年明けから管理画面でページやチャンクなどのリソースを保存、更新するたびにエラーが続出して困っています。エラーが出るとプレビューしても赤字でMODX~~エラー~~となってしまい、表示が出来なくなります。
    管理画面で同じページをもう一度保存すると、きちんと保存され、表の表示も再読み込みすると直るのですが、いつ出るかわからず、おっかなびっくり作業している状態です。

    MODXのバージョンは0.9.6で運用していたので、ためしにアップデートして0.9.6.1にしてみたのですが状況はかわりません。
    コンテンツのページ数が現在1300弱あるのでMODXで管理するには多すぎということなんでしょうか?
    最初に問題が起きたのは1/8年明け最初の更新時でした。その前の更新は12/28でその時はまったく問題なかったのですが…。

    1/9にでたエラーメッセージです。(バージョンは0.9.6)(1/8のはびっくりしてコピーし損ねました)
    Warning: mysql_query() [function.mysql-query]: Unable to save result set in /lvm/0308/vuser11/0/4/0089340/www.*****/manager/processors/cache_sync.class.processor.php on line 159
    
    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /lvm/0308/vuser11/0/4/0089340/www.*****/manager/processors/cache_sync.class.processor.php on line 160
    
    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /lvm/0308/vuser11/0/4/0089340/www.*****/manager/processors/cache_sync.class.processor.php on line 176
    
    Warning: Cannot modify header information - headers already sent by (output started at /lvm/0308/vuser11/0/4/0089340/www.*****/manager/processors/cache_sync.class.processor.php:159) in /lvm/0308/vuser11/0/4/0089340/www.*****/manager/processors/save_content.processor.php on line 563


    cache_sync.class.processor.php の問題の箇所をみると
    159行		$rs = mysql_query($sql);
    160行		$limit_tmp = mysql_num_rows($rs);
    
    176行		$limit_tmp = mysql_num_rows($rs);

    とありSQLのがらみっぽいですが…。

    今日のエラーメッセージ(MODXバージョン0.9.6.1)
    Warning: mysql_query() [function.mysql-query]: Unable to save result set in /lvm/0308/vuser11/0/4/0089340/www.*****/manager/processors/cache_sync.class.processor.php on line 117
    
    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /lvm/0308/vuser11/0/4/0089340/www.*****/manager/processors/cache_sync.class.processor.php on line 118
    
    Warning: mysql_query() [function.mysql-query]: Unable to save result set in /lvm/0308/vuser11/0/4/0089340/www.*****/manager/processors/cache_sync.class.processor.php on line 147
    
    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /lvm/0308/vuser11/0/4/0089340/www.*****/manager/processors/cache_sync.class.processor.php on line 148
    
    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /lvm/0308/vuser11/0/4/0089340/www.*****/manager/processors/cache_sync.class.processor.php on line 160
    
    Warning: Cannot modify header information - headers already sent by (output started at /lvm/0308/vuser11/0/4/0089340/www.*****/manager/processors/cache_sync.class.processor.php:117) in /lvm/0308/vuser11/0/4/0089340/www.*****/manager/processors/save_snippet.processor.php on line 139


    cache_sync.class.processor.php では
    117行		$rs = mysql_query($sql);
    118行		$limit_tmp = mysql_num_rows($rs);

    なのでエラーメッセージは微妙に違いますが同じことをいっているようです。

    また管理画面のヘッダー部分、コンテンツ編集部分には時々Internal Server Error の表示がでます。
    再読み込みすれば大抵直るのですが、これがでたときも表のサイトの表示が出来なくなります。

    サーバー情報
    レンタルサーバー アイル
    ■PHP:PHP-5.2.6
    ■Perl:Perl-5.8.5
    ■MySQL:MySQL-4.0.24

    解決法がありましたらご指導ください。
    よろしくお願いします。
      • 36592
      • 970 Posts
      時々エラーになるとか再読み込みすれば直るというのが気になりますね...

      MySQLサーバーが過負荷になっているときに起こるということではないのかな?
      同じレンサバでMySQLサーバーだけ別のサーバーに移るとかできれば切り分けられるかも。
        • 26012
        • 324 Posts
        min-oさんはじめまして

        こいつはしびれる問題ですね。
        一発目の警告を見ると、「クエリーはOKだけどメモリに保存できない」と読めます。
        何の根拠もありませんが、PHPのmemory_limit あたり怪しくないでしょうか?

        L110あたりでWHERE句なしでsite_contentからごっそり持ってきてるので、その辺でメモリが枯渇してるとか・・・
        (1300ページですよね)
          • 19592
          • 56 Posts
          >tkfm さん sama55 さん
          レスありがとうございます。

          先ほど更新したらまたエラーが出まして、わかったのは
          ・Warning: mysql_query() ~~ずらずら が出た時はページの変更は保存されている
          ・Internal Server Error の時は保存もされていない
          ということみたいです。どっちも同じドキュメントをもう一度編集→保存すれば直りました。
          すべてではないかもしれませんが…。

          >tkfm さん
          >同じレンサバでMySQLサーバーだけ別のサーバーに移るとかできれば切り分けられるかも。

          現在のデータベース使用容量はDBManager(MySQL)によると 18132 (kb) 約18MBです。
          MODXのバックアップマネージャーでみても16.96 MB。
          レンサバのデータベース容量はweb領域とは別に500MB用意されている、とあるんですが…。
          もう一度レンサバ屋にも確認してみます。

          >sama55 さん
          >一発目の警告を見ると、「クエリーはOKだけどメモリに保存できない」と読めます。
          うーん。でも保存はされてるみたいなんですよ huh

          >L110あたりでWHERE句なしでsite_contentからごっそり持ってきてるので、その辺でメモリが枯渇してるとか・・・
          (1300ページですよね)

          たしかに modx_site_content が一番大きいテーブルです。データサイズ6.47 MB
          cache_sync.class.processor.php の書き換えでいけそうなんでしょうか? 
          この辺りになるとお手上げなので引きつづきよろしくお願いいたします。
            • 26012
            • 324 Posts
            Quote from: min-o at Jan 21, 2009, 09:55 AM

            >一発目の警告を見ると、「クエリーはOKだけどメモリに保存できない」と読めます。
            うーん。でも保存はされてるみたいなんですよ huh

            >L110あたりでWHERE句なしでsite_contentからごっそり持ってきてるので、その辺でメモリが枯渇してるとか・・・(1300ページですよね)
            たしかに modx_site_content が一番大きいテーブルです。データサイズ6.47 MB
            cache_sync.class.processor.php の書き換えでいけそうなんでしょうか? 
            いえ、プログラムの問題ではなくて、環境の設定に問題があるのではないか、と予想しました。
            もう少し具体的に言うと、プログラムが動作できるメモリ空間が足りないのではないか、ということです。

            現象が出てきた背景として、”ある時期から” と"1300ページ弱"に着目すると、障害が発生するまではメモリ容量
            ぎりぎりのところで動いてて、それからページを増やした結果、ある日メモリの限界を超えたり超えなかったりの
            ラインをふらふらしてるのではないか、と予想しました。

            Internal Server Errorの方面から探れれば話が早い気もするのですが、様々な要因があってこれから原因を特定
            するのは結構厳しいものがあります。tkfmさんが仰る「過負荷になっている」というのも、Internal Server Errorが発生
            する要因の一つです。

            そこで、以下の手順でmemory_limitを増やしてみてはどうでしょう。

            1.phpinfoでサーバの情報を表示し、memory_limitの数値を確認
            2.サーバのコントロールパネルやphp.ini、.htaccessなどの設定を変えて、memory_limitの数値を倍にしてみる

            phpinfoとmemory_limitという言葉をご存知なければネットで調べればすぐに分かります。
            また、サーバによってはmemory_limitを変えることができない場合もあるのですが、アイルを使ったことがないので
            分かりません。変更可能かどうかは、アイルのサポセンかネット検索で分かるかもしれません。

            ※私もどちらかというと初心者に近いのですが、min-oさんのスキルレベルが分からないので、失礼があったら許してください。
              • 36592
              • 970 Posts
              Quote from: min-o at Jan 21, 2009, 09:55 AM

              現在のデータベース使用容量はDBManager(MySQL)によると 18132 (kb) 約18MBです。
              MODXのバックアップマネージャーでみても16.96 MB。
              レンサバのデータベース容量はweb領域とは別に500MB用意されている、とあるんですが…。
              MySQLの負荷の話は「記録容量」のことではありません。
              簡単に言えば、「DBアクセスが多くてアップアップになっていないか?」ということです。
              パソコンで言えば、CPUが悲鳴をあげてる状態って感じですね。

              同じMySQLサーバーを共有している他(他人)のサイトが、
              何らかの攻撃をうけたりしてDBアクセスが急増したのかも?

              いずれにしても、想像の域をでない私の推測ですので... tongue
                • 19592
                • 56 Posts
                >sama55 さん
                もう少し具体的に言うと、プログラムが動作できるメモリ空間が足りないのではないか、ということです。

                説明ありがとうございます。大変わかりやすいです。

                phpinfoで確認したところ memory_limit 128M でした。
                サーバーの方で、.htaccessはあまり使えないのでphp.iniに
                memory_limit = 256M

                と書いてアップしたところphpinfoのmemory_limitは256M に増えましたが症状は同じです。
                ※記述はこれであってますでしょうか? php.iniにはこの1行だけしか書いてません。

                今日はもう毎回最初の保存はエラーが出て、もう一度編集→保存をするとなおるという状態です。orz

                ※私もどちらかというと初心者に近いのですが、min-oさんのスキルレベルが分からないので、失礼があったら許してください。
                とんでもないです。
                これまでmodxを使っていくうちにphpinfoやphp.iniの使い方を少し覚えたという程度です。公開されている簡単なphpスクリプトをカスタマイズすることくらいはできますが、1から書くわけではないのであんまり応用は利きません。
                これからもよろしくお願いします。

                >tkfm さん
                MySQLの負荷の話は「記録容量」のことではありません。
                簡単に言えば、「DBアクセスが多くてアップアップになっていないか?」ということです。
                パソコンで言えば、CPUが悲鳴をあげてる状態って感じですね。
                なるほど。わかりやすい説明をありがとうございます。データベース用の500MBが別にあろうがweb領域に含まれてようが、あまり関係ない問いyことですね。実際web領域の使用量見ても全体の15%でしたし…。

                同じMySQLサーバーを共有している他(他人)のサイトが、
                何らかの攻撃をうけたりしてDBアクセスが急増したのかも?
                共用サーバーなのでこれもありえますね。その場合はこちらでは対処が難しくなりますねー。
                  • 26012
                  • 324 Posts
                  128・・・倍加しても現象変わらず・・・ですか・・・(128なら十分な数値だと思います)
                  予想が外れたようですので、256への変更は元に戻してもらっていいと思います。
                  頭を空にして、もう一度じっくり考え直してみます。

                  ちなみに、Apacheの生ログ(サーバー会社が提供するアクセスログではない)は採れますか?
                  それと、phpinfoのerror_logの値は?
                    • 19592
                    • 56 Posts
                    >sama55 さん
                    ちなみに、Apacheの生ログ(サーバー会社が提供するアクセスログではない)は採れますか?
                    それと、phpinfoのerror_logの値は?
                    サーバー屋に問い合わせてみますが、生ログはむずかしいかもです。

                    そしてphpimfoをみるとerror_logはno valueで設定されてませんでしたorz
                    これってエラーのログを保存してないってことですよね~^^;
                      • 26012
                      • 324 Posts
                      調査の途中経過

                      min-oさんが遭遇した現象と同様の記事を幾つか見つけました(MODx関連ではありません)。
                      http://textpattern.com/faq/36/warning-unable-to-save-result-set
                      http://www.vbulletin.com/forum/showthread.php?s=8859891f77646ea02e2e79c355bc523f&t=199335
                      http://dev.mysql.com/doc/refman/5.1/en/table-maintenance.html
                      DBのテーブルが破損している可能性があるから、チェック(検査)&リペア(修復)をしてみて、
                      的なことが書いてあります。操作方法は下が参考になるかもしれません。
                      http://zizodo.info/nc/index.php?itemid=5210   <<< 優しい操作方法
                      http://www.zelazny.mydns.jp/archives/000909.php

                      phpMyAdminを使ったこのような操作は私も経験がありません。
                      上記のような操作は危険な香りがするので、DBのバックアップは必要かと・・・
                      操作の結果は自己責任になってしまいますが、試してみる価値はあるような気がします。