Возникает ошибка сервера 502 при записи в базу sqlite3 на php 7 fpm, но в логах php ничего. Почему ничего?
nginx + php7-fpm. Выдаёт ошибку 502. В логах php чисто (в php.ini стоит E_ALL).
По старинке, методом die, определил, что ошибка между $query = $pdo->prepare('REPLACE INTO ...');
и $query->execute([...]);
База - sqlite3. Используются внешние ключи. Я так понимаю, replace затрагивает и id, который является внешним ключом - и это причина ошибки, и надо использовать update, не трогая id. Ладно. Но почему в логах PHP ничего? И почему даже try catch finally вокруг execute не помогли и nginx упорно выдаёт 502?
Оказалось всё сложнее. Во-первых, эта ошибка проявляется только с одной определённой строкой из базы данных (причём она ничем особенным не отличается от других). Во-вторых, в логах самого php-fpm (/var/log/php7.0-fpm.log) нашёл ошибки:
WARNING: [pool www] child 29638 exited on signal 11 (SIGSEGV) after 403.656414 seconds from start
Т.е., по русски говоря, php-процесс убивается, "при попытке обращения к несуществующей памяти или обращения с нарушением прав доступа".
Хз... может баг какой-то, php7 ещё сыроват, ИМХО.
Сергей Пуговкин: Попробуйте отключить xdebug/xcache/opcache и вообще всё, что можно отключить в PHP - иногда провоцирует проблемы. Попробуйте добавить допустимой памяти в php.ini. Попробуйте изменять эту самую проблемную строку - уменьшать размер строк, изменять символы - опытным путём можно определить, что именно в ней не так. Если интересно, конечно.
А так же проверь что в конфигах есть пути до файла логов
sudo vi /etc/php-fpm.conf
error_log = /var/log/php-fpm/error.log
и
sudo vi /etc/php-fpm.d/www.conf
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
Если проблема с правами то в /etc/php-fpm.d/www.conf проверь
user =
group =