У меня сервер
10x3ghz
рам 8гб
Centos 6.5, nginx, php-fpm, mysql
есть некий скрипт который долго выполняется, примерно 1 минут.
и когда я запускаю его, я не могу зайти на другие страницы сайта пока этот скрипт не выполнится. Я думал это nginx блокирует чтобы второго запроса не было пока первый не завершится. Но видел что страницы статические без проблем открываются. Наверное это лимит php-fpm. Но не могу как исправить. Я хочу чтобы разрешал 2 одновременных соединений
Скрипт запускаю через URL.
Если в этот момент зайди на сайт с другого İP то все работает. В смысле ограничивается доступ только к ip который запускал скрипт.
[root@localhost ~]# grep ^pm.max_children /etc/php-fpm.d/www.conf
pm.max_children = 500
[root@localhost ~]# ps axu | grep -c fpm
132
Ответ
Нашел в чем проблема. Это файл сессии блокируется.
Сессии, использующие файлы (по умолчанию в PHP), блокируют файл сессии сразу при открытии сессии функцией session_start() или косвенно при указании session.auto_start. После блокировки, ни один другой скрипт не может получить доступ к этому же файлу сессии, пока он не будет закрыт или при завершении скрипта или при вызове функции session_write_close().
Скорее всего это станет проблемой для сайтов, которые активно используют AJAX и делают несколько одновременных запросов. Простейшим путем решить эту проблему будет вызов функции session_write_close() сразу же как только все требуемые изменения в сессии будут сделаны, предпочтительно ближе к началу работы скрипта. Также можно использовать другой механизм сессии, который поддерживает конкурентный доступ.
Комментариев нет:
Отправить комментарий