phpを使用したWEBシステムを開発しています。
サーバはubuntuです。laravelを使用しています。
現在74万件のデータを扱う必要があり、テストをしていますが、途中で終了してしまいます。
処理毎にログをはかせていましたが、時間がかかる処理のところで、ログは終わっていて、エラー等も出力されません。
apacheのエラーなども見てみましたが、エラーは特に出ていません。
php.iniの設定値を以下のようにしてみましたが、状況は変わりませんでした。
post_max_size = 1024M upload_max_filesize = 1024M memory_limit = -1 max_execution_time = 1800
情報が不足していましたので、補足致します。
サーバ管理者がやめてしまったので、調べつつ設定しています。的外れなことを書いてましたら、ご指摘ください。
参照したログは、laravelが出力するエラーログ /システムパス/storage/logs/laravel.log
サーバの/var/log/apache2/error.log です。
php.iniの設定値は、ネットで調べて元々の値を増やした形です。
memory_limit = -1 -> メモリ無制限
post_max_size = 1024M -> 元々が8MBなので、1024MBまであげてみて様子を見るという素人判断です。
upload_max_filesize = 1024M -> 元々が2MBなので、1024MBまであげてみて様子を見るという素人判断です。
システム実行中に、
vmstat -SM 10 で使用状況を見てみましたが、free が1696Mあったので、そこまでメモリを使い切っていないような気もするのですが、そもそもこの部分は関係ないのでしょうか?
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 462 1696 69 443 0 0 0 0 621 79 25 0 75 0 0 1 0 462 1696 69 443 0 0 0 2 586 77 25 0 75 0 0
今回は、DBに保存できないデータのため、配列に全てのデータを格納しています。
foreachを繰り返し使用して配列の内容を参照して計算などを行なっています。
2018/07/22 追記
以下のプログラムで落ちてしまうようです。
php
1//$score_labels_arrayは6個 2for ($i = 0; $i < count($score_labels_array); $i++) { 3 $count=0; 4 //↓$dataが元データを分散されいるものの最大で40万件と多いため、この部分がネックのようです。 5 foreach ($label as $data) { 6 $label_arrays = explode("〜",$score_labels_array[$i]); 7 if($i == count($score_labels_array)-1) { 8 if ($label_arrays[0] <= $data && max($label) >= $data){ 9 $count++; 10 } 11 } else { 12 if ($label_arrays[0] <= $data && $label_arrays[1] > $data){ 13 $count++; 14 } 15 } 16 } 17 $keisan_data[$key]['line'][$label_key][$score_labels_array[$i]] = $count; 18 }
上記で何をやっているかというと、あるデータの数値が数値ラベルの範囲にあるかどうかを判定して個数を調べています。判定するには、1つ1つのデータで判定しなければならず、この部分にメモリを使用しているようです。
ubuntuサーバではなくて、私のmacの環境でメモリを調べましたが、
PhysMem: 4066M used (1361M wired), 28M unused.
と表示されていて、メモリギリギリ使用しているような状況です。
そこで、質問なのですが、こういった大量データを1件ずつ調べなければいけない時のプログラムは、foreachでぐるぐるやってしまうと危険なのでしょうか?
自己流プログラミングでお恥ずかしいのですが。。。同じようなことをやってらっしゃった方がいましたら、と思い追記しました。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/07/21 05:21
退会済みユーザー
2018/07/21 05:21
退会済みユーザー
2018/07/21 05:22
2018/07/21 05:24
退会済みユーザー
2018/07/21 05:24
退会済みユーザー
2018/07/21 05:26
2018/07/21 05:28
退会済みユーザー
2018/07/21 05:31
2018/07/21 06:06
退会済みユーザー
2018/07/21 06:14 編集
2018/07/21 06:19
退会済みユーザー
2018/07/21 06:22
2018/07/22 01:59
退会済みユーザー
2018/07/22 10:46
退会済みユーザー
2018/07/22 10:49
退会済みユーザー
2018/07/22 10:50
2018/07/22 11:10
退会済みユーザー
2018/07/22 12:32
2018/07/22 13:07