この質問は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 でのメモリ使用を最適化する方法に関するその他のアイデアは大歓迎です!