LINUX.ORG.RU

You MUST recompile PHP with a larger value of FD_SETSIZE

 ,


0

1

Написал простой скрипт который запускает параллельно X процессов, через stream_select. Нужно это для теста нагрузки на сервер. До 300 все нормально, стоит установить запуск больше 300, то появляется ошибка PHP

PHP Warning:  stream_select(): You MUST recompile PHP with a larger value of FD_SETSIZE.

Как понимаю нужно перекомпилировать PHP. Можно ли как-нибудь решить это без компиляции?

★★★★

больше 300

Чот мало, стандартно 1024 дескриптора в glibc (/usr/include/bits/typesizes.h). Проверь, не заданы ли какие-то лимиты на количество дескрипторов.

Как понимаю нужно перекомпилировать PHP

Может быть ещё что-то, апач например.

no-such-file ★★★★★
()

Написал простой скрипт который запускает параллельно X процессов

PHP

Не делай так больше. PHP для этого не предназначен

Как понимаю нужно перекомпилировать PHP

Нет. Нужно либо использовать для этого язык, лучше для этого приспособленный, либо запускать несколько экземпляров скрипта, обеспечив им доступ к разделяемым ресурсам в виде БД, файлов блокировки и пр, каким-то пускателем с fork (самое простое - несколькими строчками в кроне).

p.s. Господи, что я делаю, я советую как наколхозить на php распараллеливание по процессам

p.p.s. stream_select чаще всего на хостингах вообще блокируется.

r_asian ★☆☆
()
Ответ на: комментарий от r_asian

Не делай так больше. PHP для этого не предназначен

Школоло даже не поняло, что проблема у ТС не в PHP, лол.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Я думаю потому что помимо основного процесса ещё запускается прокладка sh, итого 800... может ещё что-то. Апач ни при чем, запускаю в консоле.

ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 64155
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65536
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 64155
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Вроде нет нигде ограничений

gobot ★★★★
() автор топика

Собрал из исходников пхп 7

./configure --enable-fd-setsize=2048

Все равно такая ошибка...

gobot ★★★★
() автор топика
Ответ на: комментарий от r_asian

Все он приспособлен, у меня уже больше года на сервере куча консольных скриптов крутится ежеминутные. Для чего мне изучать пайтон или что там ещё, если пхп отлично с этим справляется. Чего экземпляров? Причем тут хостинг, у меня сервер дедик с дебом 8

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot

Все равно такая ошибка...

Я тебе же говорю, это системное ограничение, php тут ни при чём. Можно хакнуть системный хэдер и пересобрать пых, тогда подхватится. Но лучше отказаться от select.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Понятно, без перекомпиляции не обойтись значит
Помогло

Правка #define __FD_SETSIZE            10240
/usr/include/x86_64-linux-gnu/bits/typesizes.h
и компиляция
./configure --enable-fd-setsize=10240 --enable-pcntl

gobot ★★★★
() автор топика
Ответ на: комментарий от no-such-file

А как? Я только stream_select знаю. Нужно по быстрому сделать, это для теста, особо не замарачиваюсь

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot

А как? Я только stream_select знаю.

Поставить придётся через pecl, ну или через пакетный менеджер дистрибутива, если там такое есть (скорее всего есть).

Нужно по быстрому сделать, это для теста, особо не замарачиваюсь

Тогда конечно лучше просто перекомпилять пых. А так вообще сейчас это популярная тема, libevent-фреймворков вагон, даже официальный есть http://php.net/manual/ru/book.event.php

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Спасибо, учту на будущее. Пых перекомпилял, но эта ошибка появилась когда я поставил 1000, хотя параметр SETSIZE выставил на макс 65535... Короче забил на пых, сделал в цикле bash запуск 4000 процессов

gobot ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.