CakePHPでマルチプロセスがうまく動きません。する質問をすることでしか得られない、回答やアドバイスがある。15分調べてもわからないことは、質問しよう!質問するただいまの回答率89.62%トップPHPに関する質問PHPMySQLCakePHPJavaScriptを有効にしてくださいCakePHPでマルチプロセスがうまく動きません。28CakePHPのコンポーネントで時間のかかる処理をマルチプロセスにしたいのですが、一番最初のfor文のループが2回目になると下記エラーとなってしまいます。マルチプロセスの処理を入れないと正常に動作します。my.cnfのクエリの最大サイズやタイムアウトなどを変更してみましたがダメでした。サーバーサイドは得意ではないのでアドバイスお願いします。}}子プロセスでのDB接続を試してみましたがダメでした。{main}attachmentクリップ1気になる質問をクリップするクリップした質問は、後からいつでもマイページで確認できます。クリップした質問に回答があった際、通知やメールを受け取ることができます。自分も答えを知りたい質問者以外のユーザにも役立つ評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。質問の評価を上げたことを取り消します低評価-評価を下げられる数の上限に達しました評価を下げることができません1日5回まで評価を下げられます1日に1ユーザに対して2回まで評価を下げられます質問の評価を下げるteratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。コメントをしてください。送信する質問の評価を下げる機能の利用条件この機能を利用するためには、以下の事項を行う必要があります。件sort評価が高い順sort新着順sort古い順linkcheckベストアンサー+2子プロセスが終了した時点で、MySQLのコネクションが破棄されてしまうようですね。※Cakephpの内部ではPDOが使われており、一つのコネクションでSQLを発行しているはずです。Cakephpないでpcntl_forkを使う事は想定されていないので、仕方ない気がします...。評価が高い回答ほどページの上位に表示されます。remove低評価0回答の評価を下げる下記のような回答は推奨されていません。評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。09:45ご回答ありがとうございます。icchiiさんとA.lchiさんのご回答を参考に子プロセスでそれぞれDB接続するようにして試してみます。ご回答ありがとうございます。icchiiさんとA.lchiさんのご回答を参考に子プロセスでそれぞれDB接続するようにして試してみます。時間のかかる処理というのが具体的に何かわからないので的確なコメントはできませんが...なるべくマルチプロセス化以外の方法を模索したほうがいいかもしれませんよ。※PHPで1リクエストの処理をマルチプロセスで処理するなんて聞かないですし...。自分だったら、バッチで事前に時間のかかる処理を実行した結果をDB等に持っておくとかよくやります。マルチプロセス化以外の方法を模索したほうがいいかもしれませんよ。※PHPで1リクエストの処理をマルチプロセスで処理するなんて聞かないですし...。自分だったら、バッチで事前に時間のかかる処理を実行した結果をDB等に持っておくとかよくやります。13:22子プロセスにて試してみましたがダメでした。内容はDB内にある大量のテキストデータの一部を抜き出した結果を別テーブルに格納するものです。時間的制約と他言語の知識不足、もともとCakePHPで組まれていたため、このままCakePHPでなんとかならないかなって感じでした。子プロセスにて試してみましたがダメでした。内容はDB内にある大量のテキストデータの一部を抜き出した結果を別テーブルに格納するものです。時間的制約と他言語の知識不足、もともとCakePHPで組まれていたため、このままCakePHPでなんとかならないかなって感じでした。14:10一度に抜き出そうとするとメモリ不足となってしまうので、メモリ不足にならないギリギリのところで、リミットをかけて分割取得しています。php.iniでメモリサイズは変更済みです。一度に抜き出そうとするとメモリ不足となってしまうので、メモリ不足にならないギリギリのところで、リミットをかけて分割取得しています。php.iniでメモリサイズは変更済みです。処理によって抜き出すキーワードはかわります。処理によって抜き出すキーワードはかわります。メモリ不足に関してはpageとlimitでの対処を検討してました。一度、シングルで実行時間のテスト結果から総合的な実行時間を計算した結果、実用的な状態ではなかったので、今回マルチプロセスの選択となりました。メモリ不足に関してはpageとlimitでの対処を検討してました。一度、シングルで実行時間のテスト結果から総合的な実行時間を計算した結果、実用的な状態ではなかったので、今回マルチプロセスの選択となりました。15:10なるほど!時間がかかっているのがCPUボトルネックだったら、マルチプロセスにすればCPUの数だけ早くはなりますが、1リクエストでCPUを全部専有するような処理では実用性は怪しい気もしますが...まぁ利用者が限定的だったらそれでもいいのかもしれませんが。根本的には全文検索システムとか導入するとかしないとなんとも言えない気がしました。時間がかかっているのがCPUボトルネックだったら、マルチプロセスにすればCPUの数だけ早くはなりますが、1リクエストでCPUを全部専有するような処理では実用性は怪しい気もしますが...まぁ利用者が限定的だったらそれでもいいのかもしれませんが。根本的には全文検索システムとか導入するとかしないとなんとも言えない気がしました。利用者は基本1名で操作時間も限定的で集計したデータを翌日見る感じです。全文検索システム未導入でした。既存(CakePHP)のシステムにも導入は可能なのでしょうか。今回の質問の件で色々調べたのですが、PDOが怪しそうです。なにか設定とかご存知ではないでしょうか。利用者は基本1名で操作時間も限定的で集計したデータを翌日見る感じです。全文検索システム未導入でした。既存(CakePHP)のシステムにも導入は可能なのでしょうか。今回の質問の件で色々調べたのですが、PDOが怪しそうです。なにか設定とかご存知ではないでしょうか。全文検索システム未導入でした。既存(CakePHP)のシステムにも導入は可能なのでしょうか。MySQLは標準で全文検索インデックスをサポートしています。SQLが変わりますが、Cakephpからでも実行は可能です。https://dev.mysql.com/doc/refman/5.6/ja/fulltext-search.htmlまた、日本語向けに改善されたmroongaというライブラリもあります。今回の質問の件で色々調べたのですが、PDOが怪しそうです。なにか設定とかご存知ではないでしょうか。Cakephpでは内部的にはPDOを使っており、そのPDOのコネクションが子プロセスにも渡されており、子プロセス終了時にコネクションが切れているんだと思います。flowによれば、reconnectという関数があるようなので、findする前に毎回reconnectすればうまくいくかもしれません。http://stackoverflow.com/questions/10051295/mysql-server-has-gone-away-in-cakephp-bake-console※実際Cake2のコードをみるとたしかにそういう関数は存在していました。使ったことはないですが、試してみてください。全文検索システム未導入でした。既存(CakePHP)のシステムにも導入は可能なのでしょうか。MySQLは標準で全文検索インデックスをサポートしています。SQLが変わりますが、Cakephpからでも実行は可能です。日本語向けに改善されたmroongaというライブラリもあります。今回の質問の件で色々調べたのですが、PDOが怪しそうです。なにか設定とかご存知ではないでしょうか。Cakephpでは内部的にはPDOを使っており、そのPDOのコネクションが子プロセスにも渡されており、子プロセス終了時にコネクションが切れているんだと思います。flowによれば、reconnectという関数があるようなので、findする前に毎回reconnectすればうまくいくかもしれません。※実際Cake2のコードをみるとたしかにそういう関数は存在していました。使ったことはないですが、試してみてください。17:08お付き合い頂きありがとうございます。「reconnect」ですが、なんだかいけそうな匂いがしますね!早速、試させていただきます。お付き合い頂きありがとうございます。試させていただきます。22:06find前にreconnectすることで見事に解決しました。本当にありがとうございました。find前にreconnectすることで見事に解決しました。本当にありがとうございました。10:00ご心配頂きありがとうございます。その後、実行時間のテストをしましたが、シングル時の半分以下の時間で完了しました。今回の処理では、効果有りのようです。ご心配頂きありがとうございます。その後、実行時間のテストをしましたが、シングル時の半分以下の時間で完了しました。今回の処理では、効果有りのようです。10:15ちなみに、ですがreconnectの前に一度接続の確認を入れたほうがいいのでしょうか。必要な場合、CakePHPに接続を確認するような関数はご存知ですか。検索してみましたがそれらいしものが見当たりませんでした。サンプルではmysql_pingを使っていましたが現在非推奨のようで、PDOを使えと書いてあります。ちなみに、ですがreconnectの前に一度接続の確認を入れたほうがいいのでしょうか。必要な場合、CakePHPに接続を確認するような関数はご存知ですか。検索してみましたがそれらいしものが見当たりませんでした。サンプルではmysql_pingを使っていましたが現在非推奨のようで、PDOを使えと書いてあります。編集おお、改善されて良かったです!!マルチプロセス化すれば確実にコネクション切れるので、確認しなくてもいいと思いますよ。reconnect()関数は、DB設定を動的に変更して、再接続したいときに使うもののようなので、内部的にはdisconnectしてからconnectしているので、接続が切れていないくても正常に動きます。※Cakeのコードを見て確認しただけなので、動作確認は別途やってください。マルチプロセス化すれば確実にコネクション切れるので、確認しなくてもいいと思いますよ。reconnect()関数は、DB設定を動的に変更して、再接続したいときに使うもののようなので、内部的にはdisconnectしてからconnectしているので、接続が切れていないくても正常に動きます。※Cakeのコードを見て確認しただけなので、動作確認は別途やってください。