суббота, 22 октября 2016 г.

IT детектив. Для себя. Открывать, когда совсем все непонятно и плохо.

Работалось, значит, работалось и ту бах - лютый завис и вылет php-cgi  насмерть...
 Понятное дело, что вся система (точнее главный сервер => фейс) так же насмерть и легла. сразу и брутально. Начали выяснять что и где. Все нормально, все работает, логи молчат, тише любого самого лютого разведчика. Чоу челать, шеф! Все пропало!! Подрабатываю некромантом:  выключаю nginx, поднимаю все снова, благо, 2 клика мышью. Все спокойно, быстро и плавно... о0..

 2 часа времени прошло, бах - опять намертво. Да что за...  Первые мысли: %:?;№%:№;%!!!! №";%;№%№;! php? неужели 7ка не стабильная... да неее... точно руки... что же не предусмотрели...  Оптимизация? да вроде, все нормально...  и это при активных ~ 50 человеках такой залет? ну да,.. у них по 10-20 вкладок запущено.. ну и что?  Излишнего спама нет.. да и сыпятся все запросы вААшпе на другой сервер... Карл, это точно твоих рук дело!!!..

В общем, суета, сервер продолжает неумолимо падать, бага найти не можем. День, два, уже начинает нервировать... Но замечено одно, падает не постоянно и не в 1 и то же время, значит, все-таки, модули. Быстрый просмотр ничего не выявляет. Похищение пользователей с рабочих мест в наши застенки и лютый допрос - ничего не дают.. Параллельно этому уже слышим, как коллеги начинают затачивать вилы, соибрают факелы, того и гляди придут за нами сами... стремно как-то...

Спустя несколько дней, было точно установлено, со стороны php и web в целом все нормально работает. Тогда остается только sql? Беглый просмотр функций/процедур, не дает никаких результатов, но мы все еще не сдаемся... И тут, на самом видном месте, оказался мега фейл... Если вкратце, ребята, пишите код, как будто саппортить его будет лютейший маньяк, который знает где вы живете. Если вы рассчитываете, что вот такого-то варианта точно с вашей процедурой никогда не будет - это обязательно будет опровергнуто, причем тогда, когда совсем не ожидаешь: одна из процедур в мускуле, из-за особенностей архитектуры системы(а чо, вы думали, я скажу, что я - рукожоп?), получала на вход некорректные данные, которые конечно же, никто не проверял и эта зараза просто залипала на... минут 10-20, что вызывало у pdo php страшные конвульсии и лютую смерть всего php-cgi (никогда бы не подумал, что такое возможно)!
Исправили.. уряяя... проходит 2 дня и снова-здорово.. #$^$*&!!!!!!!. В общем, история сильно повторяется, но на этот раз, с другой процедурой, изменения в которую, как раз, были внесены параллельно с поиском первой причины.

После этого, все заработало как надо, но 2 вещи, которые и так известны, пришлось четко усвоить на собственном лбу еще раз:
1. если есть самая мизерная возможность, что пользователь может вызвать краш, хоть и шанс будет равен 0.000000000000000000000000000001% - он это сделает, причем, будет делать часто и не специально и винить в этом можно только себя.
2. пишите свой код, перепроверяйте все! Пусть разработка будет идти медленно, но это спасет вас от использования вазелина и головной боли, а может, у кого-то и бессонных ночей.

Но, зато появились и +: вплотную занялся фронт-эндом, поотключал пользователям возможность тыкать по 100 раз на кнопку, если сервак по какой-то причине ступил и ожидание длится чуть более чем обычно - теперь все цивильно - система ругается страшным матом и шлет пользователей в зал ожидания, до конца выполнения их же запросов. Ничего, пускай будут терпеливее.



Комментариев нет:

Отправить комментарий