LINUX.ORG.RU
ФорумAdmin

nginx+php-fpm - искажает исходный код

 , , ,


0

3

Приветствую,

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

Неожиданной посыпались уведомления о большом количестве ошибок 500 (Internal Server Error) на сервере, при этом ошибка в SQL запросе (опечатка SELECT DISSINCT вместо DISTINCT), четко прописанном в исходном файле и никак не зависящим от пользовательского ввода.

Подумал, что сервер взломали и внесли незаметно изменения в файл, но каково было мое удивление, что файл скрипта, вызывающего ошибку, не тронут и опечатки в нем нет!

Перелазил файл - не помогло, проблему решила только перезагрузка nginx и php-fmp.

Ощущение, что где-то кэшируется исходный код и он оказался битым (?), как такое вообще может быть?

В логах php-fpm есть одна ошибка, возникшая примерно в момент возниковения проблемы: WARNING: [pool www] child 22750 exited on signal 9 (SIGKILL) after 1968.575078 seconds from start

Подскажите, что это было и как это предотвратить в будущем?



Последнее исправление: choko-choko (всего исправлений: 1)

Приветствую

Добрый вечер

DISSINCT вместо DISTINCT Ощущение, что где-то кэшируется исходный код и он оказался битым (?), как такое вообще может быть?

RAM bit flip

Подскажите, что это было и как это предотвратить в будущем?

Если сервер реальный - почистить, memtest etc Если виртуальный - напрячь хостера.

kindof
()

У пхп есть возможность кешировать исходный код (opcache), но она не просто есть, а зависит от настроек. По умолчанию в дистрах, думаю, выключена, но вообще сам проверяй. https://www.php.net/opcache_get_status

Чтобы T превратилось в S надо 3 бита изменить, сомнительно.

SIGKILL

Посмотри системные логи на предмет oom, может это он. Если не он - то что-то постороннее в системе могло быть.

И что за хостинг? Свой сервер, виртуалка или шаред?

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

чтобы T превратилось в S надо 3 бита изменить, сомнительно.

Не похоже на bit flip.

   S         T
01010011 01010100

что не отменяет наличие PoC-ов атак на bit flip. Может, как раз ECC DBE пробивают )

kindof
()
Последнее исправление: kindof (всего исправлений: 1)
Ответ на: комментарий от firkax

Opcache есть и он включен, но он был и до этого с apache+mod_php, а проблема появилась после переезда на nginx+php-fpm.

В системных логах ничего необычного нет в момент и до возникновения проблемы.

Сервер - виртуалка.

choko-choko
() автор топика
Ответ на: комментарий от master_0K

Других случаев не было.

Получается, что в обоих случаях не меньше двух битов - это не исключает bit flip?)

Ладно, попробую в поддержку хостера написать, хотя предполагаю, что они просто предложат виртуалку перенести, а этого не очень хочется.

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

Получается, что в обоих случаях не меньше двух битов - это не исключает bit flip?)

Нет.

А php-fpm, nginx и т.д. давно обновлялись?

Может в логах есть «необычные» запросы перед падением?

kindof
()
Ответ на: комментарий от kindof

php-fpm, nginx поставлены в начале года и проблема возникла пару раз с интервалом где-то месяц.

Да все логи просмотрел, ничего необычного. Единственное - в логах php-fpm за 20 секунд до начала проблемы:

WARNING: [pool www] child 22750 exited on signal 9 (SIGKILL) after 1968.575078 seconds from start

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

виртуалку перенести, а этого не очень хочется.

Чего не хочется? Ты не заметишь ничего скорее всего (если у них всё нормально настроено), тебе будет показываться всё та же виртуалка с тем же диском и тем же айпи-адресом.

Другое дело если ты хочешь сначала поисследовать ситуацию.

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

они просто предложат виртуалку перенести, а этого не очень хочется.

Какие другие идеи «обхода» есть?

Было два разных случая «в кеше»? Что происходило между этими событиями… – раскручивать «это» проще переноса виртуалки?

P.S. Исправил, переработал «иллюстрацию»

          |     T    
0010 0000 | 0101 0100
          |
    &     |     S
0010 0110 | 0101 0011

master_0K
()
Ответ на: комментарий от no-dashi-v2

«Кто угодно» SIGKILL не рассылает. Из автоматических только oom вспоминается, всё остальное вручную кем-то.

А, ну и ещё хостер мог програмный ребут виртуалки запустить, хотя в этом случае демон скорее всего всё-таки по SIGTERM бы завершился штатно.

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

На сервере крутятся скрипты довольно затратные по памяти и времени - может ли быть SIGKILL из-за нехватки памяти, к примеру?

Хостер не мог ничего ребутить без предупреждений/уведомлений.

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

может ли быть SIGKILL из-за нехватки памяти, к примеру?

может. оом=Out Of Memory

но это не объясняет проблему S и &.

На VM RAM может быть куском баллона гипервизора, в т.ч. и физическим диском. Так штаа )

kindof
()
Ответ на: комментарий от kindof

На VM RAM может быть куском баллона гипервизора, в т.ч. и физическим диском. Так штаа )

А ну кстати да, там может быть TLC/QLC SSD и как раз флип на единицу сразу пачки соседних битов. Но по идее у них ECC и они должны такое ловить.

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

Пришел ответ от поддержки, у них два предположения:

  1. One possibility is an IOwait time that causes the OPCache to pass invalid information during load - I do know that some cloud providers do not want OPCache enabled on shared systems because of this.

  2. The next most likely culprit would be file system corruption.

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

choko-choko
() автор топика
4 сентября 2023 г.
Ответ на: комментарий от choko-choko

Спустя несколько месяцев примерная причина найдена, но как ее решить - до сих пор не знаю.

Итак, если какой-то скрипт выполняется на сервере и в этот момент загрузить его новую версию на сервер, то это приводит к искажению исходного кода абсолютно любого другого скрипта на сервере.

Единственное решение сейчас - после загрузки файла на сервер делать рестарт php-fpm и nginx…

choko-choko
() автор топика