我正在从远程服务器获取图像对象,然后尝试使用他们的 API 将它们上传到 Rackspace 的云文件。想知道 a) 我怎样才能使这个过程更有效率,以及 b) 假设我需要购买更多内存,完成这个任务可能需要多少合理的 RAM(当前的开发服务器只有 512MB)。
在执行脚本时,我是:
- 查询我的本地数据库以获取一组 ID(大约 1000 个)
- 对于每个id,查询一个远程服务器,返回10-20个图片对象之间,每张图片25-30k
- 根据我的数据库中的 id 创建一个 Cloud Files 容器
- 对于从远程服务器返回的每个图像对象,在我的容器中创建一个图像对象,并将图像数据写入该对象
- 使用添加图像的日期时间更新本地数据库中的行
这在一小部分 id 上执行相对较快,但是 100 个(所以 700-1k 图像)可能需要 5-10 分钟,而且除此之外的任何东西似乎都可以无限期地运行。尝试了以下方法,但收效甚微:
- 几分钟后使用 php 的 set_timeout 杀死脚本,认为这会清除分配给执行的内存,让我可以从中断的地方继续工作,并通过较小的部分进行处理。但是,永远不会抛出此错误
- 上传后取消设置包含图像对象的数组键(不仅仅是循环内的引用)。
PHP 的 memory_limit 设置为 128MB,运行“tops”命令我看到用户“www-data”消耗了 16% 的内存资源。但是,它不再出现在用户列表中,但我继续看到:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2400 mysql 20 0 161m 8220 2808 S 0 1.6 11:12.69 mysqld
...但 TIME+ 永远不会改变。我看到仍然有 1 个任务正在运行,但这些值永远不会改变:
Mem: 508272k total, 250616k used, 257656k free, 4340k buffers
为冗长的帖子道歉 - 不完全确定什么(如果有的话)有用。这不是我的专业领域,所以有点抓住稻草。在此先感谢您的帮助。