ホームページ >バックエンド開発 >PHPチュートリアル >専門家がコードの一部を確認するのを手伝ってくれます。メモリが使い果たされているのはなぜですか?

専門家がコードの一部を確認するのを手伝ってくれます。メモリが使い果たされているのはなぜですか?

WBOY
WBOYオリジナル
2016-06-23 14:11:48911ブラウズ

$i = -1;while( $i++ < 495000000 ) {        $rand_uid = rand(100000000,105000000);        $rand_fuid = rand(100000000,999999999);        $tab_name = get_hash_table('friends',$rand_uid);        $up_array = array(                                'uid' => $rand_uid,                                'fuid' => $rand_fuid                );        insert_table($tab_name, $up_array,1);}


テストデータが必要です。500 個の mysql テーブルに 5 億個のデータを書き込む必要があります。php コマンドで直接実行されるコードがメモリ不足になるのはなぜですか?

ありがとうございます!


ディスカッションへの返信(解決策)

これは以前投稿したものです、ポイントを受け取りに来てください!

http://bbs.csdn.net/topics/390121151

おそらくそうではありませんが、ハード ディスクの空き容量が不足している場合は、何とも言えません
少なくとも、挿入が成功したかどうかは insert_table で判断する必要があります

そうではありませんget_hash_table のアルゴリズムは知っていますが、 $rand_uid のデータ スパンは 5000000 です

メモリを解放するためにバッチで実行してください

おそらくそうではありませんが、ハードディスクの容量が不足している場合は、何とも言えません
少なくとも、insert_table は挿入かどうかを判断する必要がありますは成功しました

get_hash_table のアルゴリズムは分かりませんが、$rand_uid のデータスパンは 5000000 です

ご返信ありがとうございます!

ディスク容量は十分に大きく、IO は正常です。

バッチで実行してメモリを解放する


重要なのは、どの部分がメモリを消費しているかわからないということです。

メモリを解放するには、memory_get_usage 関数を使用します


バッチで実行してメモリを解放します


重要なのは、どの部分がメモリを消費しているかわからないということです。

個人的には、このコードは基本的に無限ループと同じだと思います。つまり、実行を終了し、ループ本体で SLEEP を確認します

get_hash_tableh と insert_table の両方を投稿した方がよいでしょう。



ディスク IO を確認しました。これが原因であるはずです

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。