我想这个问题与PHP cli Memory usage optimization的主题相似,但是当海报发现一个简单的编码错误时,这个问题就解决了。
我有一个连续运行的多线程PHP(CLI)应用程序。我正在尝试优化内存使用量,因为每个线程使用的内存量限制了我可以在任何给定时间运行的线程数(因为我有可用的有限内存量)。经过一些调查,似乎每个线程进程使用的MINIMUM内存量大约为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中优化内存使用的任何其他想法都会受到欢迎!
答案 0 :(得分:0)
我个人使用memcached进行数据库交互,这会加快线程处理能力。它可能不会降低总体内存使用量,但会提高执行速度,因此您应该能够更快速地打开和关闭线程,或者更好地跨越计划线程,这样就不会一次性地进行所有操作。 如果每个花费1分钟的2个进程现在每个花费30秒,那么这两个进程可以使内存使用量增加一倍,现在每个进程只需要30秒,但总是一分钟但执行速度更快。
答案 1 :(得分:0)
为什么你没有使用WHERE术语?在SQL中,这部分确定将加载到php的行数,如果您正在寻找数据库使用SQL函数中的第一个/最后一个ID。一般将SQL数据传递给php会消耗内存。
我认为如果这个表仅为所有用户选择并且不被用户修改,则Memcahe将对此有用。 Memcashe PHP