У меня есть приложение, написанное на 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 ГБ ОЗУ
- 120 ГБжесткий диск (используется 4%)
- 4 x intel xeon
- Является ли VPS (машина имеет 16 ГБ оперативной памяти)
- Процесс открывает 10 потоков и присоединяет их.