質問編集履歴

3

プログラム追加

2018/07/22 02:14

投稿

mizutama72
mizutama72

スコア31

test CHANGED
File without changes
test CHANGED
@@ -118,6 +118,8 @@
118
118
 
119
119
    }
120
120
 
121
+   $keisan_data[$key]['line'][$label_key][$score_labels_array[$i]] = $count;
122
+
121
123
  }
122
124
 
123
125
  ```

2

プログラム内容の追記

2018/07/22 02:14

投稿

mizutama72
mizutama72

スコア31

test CHANGED
File without changes
test CHANGED
@@ -78,10 +78,64 @@
78
78
 
79
79
 
80
80
 
81
- プログラムの見直しもしますが、20万件のデータは動いたので、
81
+ 2018/07/22 追記
82
82
 
83
- もう少し何か設定を変えれば動くのではないか、と思い質問させ頂きした
83
+ 以下プログラム落ちうようです
84
84
 
85
85
 
86
86
 
87
+ ```php
88
+
89
+ //$score_labels_arrayは6個
90
+
91
+ for ($i = 0; $i < count($score_labels_array); $i++) {
92
+
93
+ $count=0;
94
+
95
+ //↓$dataが元データを分散されいるものの最大で40万件と多いため、この部分がネックのようです。
96
+
97
+ foreach ($label as $data) {
98
+
99
+ $label_arrays = explode("〜",$score_labels_array[$i]);
100
+
101
+ if($i == count($score_labels_array)-1) {
102
+
103
+ if ($label_arrays[0] <= $data && max($label) >= $data){
104
+
105
+ $count++;
106
+
107
+ }
108
+
109
+ } else {
110
+
111
+ if ($label_arrays[0] <= $data && $label_arrays[1] > $data){
112
+
113
+ $count++;
114
+
115
+ }
116
+
117
+ }
118
+
119
+   }
120
+
121
+ }
122
+
123
+ ```
124
+
125
+ 上記で何をやっているかというと、あるデータの数値が数値ラベルの範囲にあるかどうかを判定して個数を調べています。判定するには、1つ1つのデータで判定しなければならず、この部分にメモリを使用しているようです。
126
+
127
+ ubuntuサーバではなくて、私のmacの環境でメモリを調べましたが、
128
+
129
+ ```
130
+
131
+ PhysMem: 4066M used (1361M wired), 28M unused.
132
+
133
+ ```
134
+
87
- 有識者の方よろくお願いたします。
135
+ と表示されていてメモリギリギリ使用るような状況です。
136
+
137
+
138
+
139
+ そこで、質問なのですが、こういった大量データを1件ずつ調べなければいけない時のプログラムは、foreachでぐるぐるやってしまうと危険なのでしょうか?
140
+
141
+ 自己流プログラミングでお恥ずかしいのですが。。。同じようなことをやってらっしゃった方がいましたら、と思い追記しました。

1

内容の補足

2018/07/22 02:12

投稿

mizutama72
mizutama72

スコア31

test CHANGED
File without changes
test CHANGED
@@ -28,6 +28,56 @@
28
28
 
29
29
 
30
30
 
31
+ 情報が不足していましたので、補足致します。
32
+
33
+ サーバ管理者がやめてしまったので、調べつつ設定しています。的外れなことを書いてましたら、ご指摘ください。
34
+
35
+
36
+
37
+ 参照したログは、laravelが出力するエラーログ /システムパス/storage/logs/laravel.log
38
+
39
+ サーバの/var/log/apache2/error.log です。
40
+
41
+
42
+
43
+ php.iniの設定値は、ネットで調べて元々の値を増やした形です。
44
+
45
+ memory_limit = -1 -> メモリ無制限
46
+
47
+ post_max_size = 1024M -> 元々が8MBなので、1024MBまであげてみて様子を見るという素人判断です。
48
+
49
+ upload_max_filesize = 1024M -> 元々が2MBなので、1024MBまであげてみて様子を見るという素人判断です。
50
+
51
+
52
+
53
+ システム実行中に、
54
+
55
+ vmstat -SM 10 で使用状況を見てみましたが、free が1696Mあったので、そこまでメモリを使い切っていないような気もするのですが、そもそもこの部分は関係ないのでしょうか?
56
+
57
+
58
+
59
+ ```
60
+
61
+ procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
62
+
63
+ r b swpd free buff cache si so bi bo in cs us sy id wa st
64
+
65
+ 2 0 462 1696 69 443 0 0 0 0 621 79 25 0 75 0 0
66
+
67
+ 1 0 462 1696 69 443 0 0 0 2 586 77 25 0 75 0 0
68
+
69
+ ```
70
+
71
+
72
+
73
+
74
+
75
+ 今回は、DBに保存できないデータのため、配列に全てのデータを格納しています。
76
+
77
+ foreachを繰り返し使用して配列の内容を参照して計算などを行なっています。
78
+
79
+
80
+
31
81
  プログラムの見直しもしますが、20万件のデータは動いたので、
32
82
 
33
83
  もう少し何か設定を変えれば動くのではないか、と思い質問させて頂きました。