Сбой Apache при выполнении одновременных запросов в режиме Symfony dev

Я делаю приложение Symfony 3.4 в качестве службы REST (поэтому я установил обычный JMS Serializer, FoSRest и lexik/jwt-authentication-bundle) и тестирую его на XAMPP (Windows 10).
Когда я делаю запросы XHR через мое внешнее приложение использует app_dev.php в качестве конечной точки (очень) часто происходит сбой Apache при одновременном выполнении 2+ запросов.
Читая здесь и там, похоже, что эта проблема часто вызывается попыткой записи на файл сеанса, поскольку обработчик сеанса symfony по умолчанию - session.handler.native_file.
Итак, я сначала попытался поставить null (который, согласно документации, использует собственный обработчик сеанса PHP), это уменьшило частоту сбоев, но не решило проблему. полностью
Затем я попытался использовать Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler, из-за чего сбои происходили даже реже, чем раньше, но случайные сбои все еще случаются.

Теперь, когда я использую базу данных в качестве обработчика сеанса, я замечаю, что сеанс не записывается в базу данных, когда я делаю запросы XHR (хотя это происходит, если я открываю обычную веб-страницу, обслуживаемую приложением), что не должно Меня это не удивляет, так как я установил свой security.yml таким образом, что маршруты REST должны быть без сохранения состояния, и все же игра с конфигурацией handler_id влияет на то, как часто мой apache дает сбой.

То же самое не происходит, если я открываю несколько веб-страниц, обслуживаемых одним и тем же приложением, и этого не происходит, если я использую производственную конечную точку (app.php).

Есть ли способ исправить это полностью?

РЕДАКТИРОВАТЬ: по запросу

Можете ли вы добавить журналы ошибок apache и журналы ошибок php?

Это просто повторяется каждый раз, когда он перезагружается. Я заметил эту строку: AH00428: Parent: child process 29076 exited with status 3221226356 -- Restarting., которая может быть интересна для изучения

[Sun Dec 17 00:39:58.548676 2017] [mpm_winnt:notice] [pid 17564:tid 532] AH00428: Parent: child process 22856 exited with status 3221226356 -- Restarting.
[Sun Dec 17 00:39:59.544151 2017] [ssl:warn] [pid 17564:tid 532] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name
[Sun Dec 17 00:39:59.740710 2017] [mpm_winnt:notice] [pid 17564:tid 532] AH00455: Apache/2.4.26 (Win32) OpenSSL/1.0.2l PHP/7.1.7 configured -- resuming normal operations
[Sun Dec 17 00:39:59.740710 2017] [mpm_winnt:notice] [pid 17564:tid 532] AH00456: Apache Lounge VC14 Server built: Jun 15 2017 12:39:41
[Sun Dec 17 00:39:59.740710 2017] [core:notice] [pid 17564:tid 532] AH00094: Command line: 'c:\\xampp\\apache\\bin\\httpd.exe -d C:/xampp/apache'
[Sun Dec 17 00:39:59.746705 2017] [mpm_winnt:notice] [pid 17564:tid 532] AH00418: Parent: Created child process 29076
[Sun Dec 17 00:40:01.201423 2017] [ssl:warn] [pid 29076:tid 592] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name
[Sun Dec 17 00:40:01.414295 2017] [ssl:warn] [pid 29076:tid 592] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name
[Sun Dec 17 00:40:01.455312 2017] [mpm_winnt:notice] [pid 29076:tid 592] AH00354: Child: Starting 150 worker threads.
[Sun Dec 17 00:40:17.006680 2017] [mpm_winnt:notice] [pid 17564:tid 532] AH00428: Parent: child process 29076 exited with status 3221226356 -- Restarting.
[Sun Dec 17 00:40:17.371667 2017] [ssl:warn] [pid 17564:tid 532] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name
[Sun Dec 17 00:40:17.403690 2017] [mpm_winnt:notice] [pid 17564:tid 532] AH00455: Apache/2.4.26 (Win32) OpenSSL/1.0.2l PHP/7.1.7 configured -- resuming normal operations
[Sun Dec 17 00:40:17.403690 2017] [mpm_winnt:notice] [pid 17564:tid 532] AH00456: Apache Lounge VC14 Server built: Jun 15 2017 12:39:41
[Sun Dec 17 00:40:17.403690 2017] [core:notice] [pid 17564:tid 532] AH00094: Command line: 'c:\\xampp\\apache\\bin\\httpd.exe -d C:/xampp/apache'
[Sun Dec 17 00:40:17.409694 2017] [mpm_winnt:notice] [pid 17564:tid 532] AH00418: Parent: Created child process 24332
[Sun Dec 17 00:40:18.667139 2017] [ssl:warn] [pid 24332:tid 524] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name
[Sun Dec 17 00:40:18.858441 2017] [ssl:warn] [pid 24332:tid 524] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name
[Sun Dec 17 00:40:18.895469 2017] [mpm_winnt:notice] [pid 24332:tid 524] AH00354: Child: Starting 150 worker threads.
[Sun Dec 17 00:40:20.972550 2017] [mpm_winnt:notice] [pid 17564:tid 532] AH00428: Parent: child process 24332 exited with status 3221226356 -- Restarting.
[Sun Dec 17 00:40:21.481091 2017] [ssl:warn] [pid 17564:tid 532] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name
[Sun Dec 17 00:40:21.513627 2017] [mpm_winnt:notice] [pid 17564:tid 532] AH00455: Apache/2.4.26 (Win32) OpenSSL/1.0.2l PHP/7.1.7 configured -- resuming normal operations
[Sun Dec 17 00:40:21.513627 2017] [mpm_winnt:notice] [pid 17564:tid 532] AH00456: Apache Lounge VC14 Server built: Jun 15 2017 12:39:41
[Sun Dec 17 00:40:21.513627 2017] [core:notice] [pid 17564:tid 532] AH00094: Command line: 'c:\\xampp\\apache\\bin\\httpd.exe -d C:/xampp/apache'
[Sun Dec 17 00:40:21.519144 2017] [mpm_winnt:notice] [pid 17564:tid 532] AH00418: Parent: Created child process 27440
[Sun Dec 17 00:40:22.991094 2017] [ssl:warn] [pid 27440:tid 552] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name
[Sun Dec 17 00:40:23.266105 2017] [ssl:warn] [pid 27440:tid 552] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name
[Sun Dec 17 00:40:23.301132 2017] [mpm_winnt:notice] [pid 27440:tid 552] AH00354: Child: Starting 150 worker threads.

Когда вы говорите, что сбой apache означает, что вам нужно снова запустить apache, или вы просто получаете сообщение об ошибке? Какую ошибку вы получаете?

Я просто получаю обычное окно сбоя приложения, в котором говорится: «Apache перестал работать», если я нажимаю «Закрыть приложение», оно перезапускается само по себе, и запрос, вызвавший сбой, просто завершается с ошибкой без кода состояния или сообщения об ошибке (что ожидается, поскольку соединение с сервером прервано). Как вы можете видеть, в журналах нет конкретной ошибки, кроме этого кода состояния.

Как у вас настроены apache и php mod_apache, php-fpm? Какие ограничения на сервер apache у вас есть, сколько рабочих php?

Я не знаю, как ответить на этот вопрос, я использую стандартный apache и php из пакета XAMPP без изменений в конфигурации. Я могу сказать вам, что php загружается как обработчик apache, поэтому нет CGI или FastCGI. В любом случае на простых страницах или в производственном режиме в Symfony все работает нормально.

НОВОСТИ:

  1. Я обнаружил, что, поскольку я выполнял запросы CORS, он создавал файл сеанса для каждого запроса, я исправил это, и это немного улучшило мою проблему, но она все еще существует.

  2. Я пытался использовать Redis в качестве обработчика сеанса для PHP, но на самом деле это только ухудшило ситуацию.

  3. Я сделал простой тест, в котором я вызывал одну и ту же страницу (которая использует сеанс) 1000 раз, она работает нормально, пока я ставлю session_write_close(); в конце, иначе она падает.


person valepu    schedule 16.12.2017    source источник
comment
PHP не допускает нескольких одновременных запросов за сеанс. Можете ли вы добавить журналы ошибок apache и журналы ошибок php? Когда вы говорите, что сбой apache означает, что вам нужно снова запустить apache, или вы просто получаете сообщение об ошибке? Какую ошибку вы получаете? Как у вас настроены apache и php mod_apache, php-fpm? Какие ограничения на сервер apache у вас есть, сколько рабочих php?   -  person albert    schedule 16.12.2017
comment
Я отредактировал свой вопрос с ответами   -  person valepu    schedule 17.12.2017
comment
Вы пытаетесь сделать какой-то тест?   -  person albert    schedule 17.12.2017
comment
Проверьте: stackoverflow.com/questions/18039562/   -  person albert    schedule 17.12.2017
comment
Вы не должны манипулировать сеансом с помощью session_write_close(), используя api .symfony.com/3.4/Symfony/Component/HttpFoundation/Session/ и посмотрите на https://symfony.com/doc/3.4/components/http_foundation/sessions.html   -  person albert    schedule 17.12.2017
comment
1. нет эталона 2. вопрос в ссылке от 2013 года, я скачал xampp несколько месяцев назад 3. session_write_close был на странице вне symfony. Я нашел это: blog.tiger-workshop.com/ fix-various-apache-crashes-on-windows сейчас пытается переключиться на fastcgi   -  person valepu    schedule 17.12.2017


Ответы (1)


Как указано в моем последнем комментарии, я попытался использовать FastCGI, и это решило проблему. https://blog.tiger-workshop.com/fix-various-apache-crashes-on-windows/

На этой странице есть 2 предложения по ошибке, которую я получил AH00428: Parent: child process 29076 exited with status 3221226356 -- Restarting. Одно из исправлений - добавить следующие строки в httpd.conf

<IfModule mpm_winnt_module>
   ThreadStackSize 8388608
</IfModule>

Но это не сработало. Второе исправление связано с ошибкой, возникающей в Windows при использовании PHP в качестве обработчика Apache https://github.com/vlucas/phpdotenv/issues/76, поэтому я переключился на FastCGI, как было предложено.
Эти инструкции более специфичны для XAMPP, чем те, которые опубликованы по ссылке выше. Вам нужно отредактировать файл xampp\apache\conf\extra\httpd-xampp.conf

Прокомментируйте следующие строки

#
# PHP-Module setup
#
#LoadFile "C:/xampp/php/php7ts.dll"
#LoadFile "C:/xampp/php/libpq.dll"
#LoadModule php7_module "C:/xampp/php/php7apache2_4.dll"
#
#<FilesMatch "\.php$">
#    SetHandler application/x-httpd-php
#</FilesMatch>
#<FilesMatch "\.phps$">
#    SetHandler application/x-httpd-php-source
#</FilesMatch>
[...] (This one is further down in the file)
# 
#<IfModule php7_module>
#    PHPINIDir "C:/xampp/php"
#</IfModule>

И добавьте эти строки

LoadModule fcgid_module modules/mod_fcgid.so

<IfModule fcgid_module>
   FcgidMaxProcesses 300
   FcgidMaxProcessesPerClass 300

   FcgidOutputBufferSize 65536
   FcgidConnectTimeout 10
   FcgidProcessLifeTime 0
   FcgidMaxRequestsPerProcess 0
   FcgidMinProcessesPerClass 0
   FcgidFixPathinfo 0
   FcgidProcessLifeTime 0
   FcgidZombieScanInterval 20
   FcgidMaxRequestLen 536870912
   FcgidIOTimeout 120
   FcgidTimeScore 3

   FcgidPassHeader Authorization

   FcgidInitialEnv PHPRC "C:\\xampp\\php"
   FcgidInitialEnv PATH "C:\\xampp\\php;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;"
   FcgidInitialEnv SystemRoot "C:\\Windows"
   FcgidInitialEnv SystemDrive "C:"
   FcgidInitialEnv TEMP "C:\\xampp\\tmp"
   FcgidInitialEnv TMP "C:\\xampp\\tmp"
   FcgidInitialEnv windir "C:\\Windows"

   DirectoryIndex index.html index.htm index.php

   <Files ~ "\.php$">
      Options Indexes FollowSymLinks ExecCGI
      AddHandler fcgid-script .php
      FcgidWrapper "C:/xampp/php/php-cgi.exe" .php
   </Files>
</IfModule>
person valepu    schedule 17.12.2017