我猜这个问题与PHP cli Memory usage optimization的主题相似,但是当发布者发现一个简单的编码错误时,这个问题就解决了。
我有一个连续运行的多线程 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 中优化内存使用的想法都将受到欢迎!