优化多线程PHP应用程序的内存使用.APC或其他内存缓存技术合适吗


Optimizing memory usage of multi-threaded PHP application. Is APC or another memory caching technology appropriate?

我想这个问题在主题上与PHP cli内存使用优化相似,但当发帖者发现一个简单的编码错误时,这个问题就解决了。

我有一个连续运行的多线程PHP(CLI)应用程序。我试图优化内存使用,因为每个线程使用的内存量限制了我在任何给定时间可以运行的线程数量(因为我的可用内存量有限)。经过一番调查,似乎每个线程进程使用的最小内存量约为1.3MB。看起来有点高,但经过一番挖掘,PHP似乎以大约0.5MB的块分配内存。我怀疑我的应用程序是否足够精简,可以使用小于0.5MB的内存,但我想尝试一下。如果可能的话,即使将占地面积减少10-20%也很棒。

我正在考虑的一个选项是使用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中优化内存使用的任何其他想法都将受到欢迎!

就我个人而言,我会使用memcached进行数据库交互,这将大大提高线程处理能力。它可能不会减少总体内存使用量,但会提高执行速度,因此您应该能够更快地打开和关闭线程,或者更好地交叉调度线程,这样就不会一次发生所有事情
如果两个进程各花1分钟,现在各花30秒,那么这两个进程的内存使用量都可以翻倍,并且每个进程只花30秒——现在总体上仍然是一分钟,但执行速度更快。

为什么不使用WHERE术语?在SQL中,如果您要在DB中查找第一个/最后一个id,则此部分将确定将有多少行加载到php。为此,请使用SQL函数。通常,将SQL数据传递到php将消耗内存。

我认为,如果这是一个只供所有用户选择的表,并且不由用户Memca修改,那么它将对此非常有用。Memcash PHP