0

この質問はPHP cli メモリ使用量の最適化のトピックに似ていると思いますが、投稿者が単純なコーディングの間違いを発見したときにその質問は解決されました。

継続的に実行されるマルチスレッド PHP (CLI) アプリケーションがあります。各スレッドで使用されるメモリの量によって、特定の時間に実行できるスレッドの数が制限されるため、メモリ使用量を最適化しようとしています (使用可能なメモリ量が限られているため)。調査の結果、各スレッド プロセスが使用するメモリの最小量は約 1.3MB のようです。少し高いように見えますが、調べてみると、PHP はメモリを約 0.5MB のチャンクで割り当てているようです。アプリケーションの使用量を 0.5MB 未満に抑えることができるかどうかは疑問ですが、試してみたいと思います。可能であれば、設置面積を 10 ~ 20% 削減できれば素晴らしいことです。

私が検討しているオプションの 1 つは、APC を使用して一部のデータをメモリにキャッシュすることです。これは、メモリを削減する手法として直感に反するように思えますが、現在、データを保存および取得するために MySQL データベースを頻繁に呼び出しています。以下に小さな例を示します。

<?php
function get_stored_token(){
    connect_db();

    $query_result = mysql_query("select token from tokens");
    if ($query_result == true){
           $query_result_array = mysql_fetch_row($query_result);
           $token = $query_result_array[0];
           unset($query_result, $query_result_array);
           return $token;
    }
    else {
           echo "Problem with query to get stored token!\n";
    }
}

このような方法で MySQL を使用すると、多くのメモリ オーバーヘッドが発生するようです。pmap -d PID | grep mysqlこれは、特にlibmysqlclient_r.so.16.0.0大量のメモリを使用していたへの呼び出しによって確認されます。おそらく、キーと値のペアをメモリにキャッシュする単純な手法は、実際にはメモリの点で軽くなるでしょうか? ただし、これについては経験がないので、APC (またはその他のキャッシュ技術) をさらに試す前に、このアイデアに関するフィードバックを聞きたいと思います。

PHP でのメモリ使用を最適化する方法に関するその他のアイデアは大歓迎です!

4

2 に答える 2

0

個人的には、dbの相互作用にmemcachedを使用します。これにより、スレッドの処理能力が大幅に向上します。全体的なメモリ使用量を減らすことはできませんが、実行速度が上がるため、スレッドをより迅速に開いたり閉じたりできるようにするか、スレッドのクロススケジュールを改善して、すべてが一度に実行されるわけではないようにする必要があります。
それぞれ1分かかっていた2つのプロセスがそれぞれ30秒かかる場合、両方のプロセスはメモリ使用量を2倍にし、それぞれ30秒しか使用しないため、全体として1分ですが、実行速度が速くなります。

于 2013-02-14T12:58:37.620 に答える
0

なぜ WHERE 用語を使用しないのですか? SQL では、この部分は php にロードされる行数を決定します。DB の最初/最後の ID を探している場合は、これに SQL 関数を使用します。一般に、SQL データを php に渡すとメモリが消費されます。

これが、すべてのユーザーの選択のためにのみロードされ、ユーザーによって変更されないテーブルである場合、Memcahe はこれに役立つと思います。Memcash PHP

于 2013-02-14T13:03:33.580 に答える