【发布时间】:2011-08-06 01:49:07
【问题描述】:
我有一个用 C++ 编写的应用程序,它使用 opencv 2.0、curl 和一个 opensurf 库。首先,一个 PHP 脚本 (cron.php) 调用 proc_open 并调用 C++ 应用程序(称为 icomparer)。当它完成处理 N 图像返回组,说明哪些图像是相同的,之后脚本使用:
shell_exec('php cron.php > /dev/null 2>&1 &');
die;
然后重新开始。好吧,在 800 或 900 次迭代后,我的 icomparer 开始崩溃。系统不允许我在 icomparer 和 php 脚本中创建更多文件。
proc_open(): unable to create pipe Too many open files (2)
shell_exec(): Unable to execute 'php cron.php > /dev/null 2>&1 &'
curl 也失败了:
couldn't resolve host name (6)
一切都崩溃了。我认为我做错了什么,例如,我不知道是否从 PHP 进程释放资源启动另一个 PHP 进程。
在“icomparer”中,我将关闭所有打开的文件。也许没有用 mutex_destroy 释放所有互斥锁...但是在每个迭代器中,c++ 应用程序都关闭了,我认为所有东西都被释放了吗?
我需要注意什么?我试过用 stof 监控打开的文件。
- PHP 5.2
- Centos 5.X
- 1 GB 内存
- 120 GB 硬盘(4% 已使用)
- 4 x 英特尔至强
- 是 VPS(机器有 16 GB 内存)
- 进程打开 10 个线程并加入它们。
【问题讨论】: