Depository of News

Как на ровном месте сэкономить 1000+ ядер, или Куда на самом деле уходили 80% CPU

newsdepo.com · world

<img src="https://habrastorage.org/getpro/habr/upload_files/f92/681/7e0/f926817e01e2a4cc02c6a8a9f8b5ba5e.png" /><p>Всем привет, меня зовут Миша, и я бэкенд‑разработчик в&nbsp;платформе Яндекс Еды. Я уже рассказывал, как&nbsp;мы <a href="https://habr.com/ru/companies/yandex/articles/921122/">анализировали наш PHP‑монолит</a> и <a href="https://habr.com/ru/companies/yandex/articles/972612/">вынесли из&nbsp;него процессинг заказов</a>, и с&nbsp;тех пор роль этого легаси заметно уменьшилась. Заодно туда стали писать гораздо меньше нового кода, релизы стали реже, и он спокойненько себе работал, не&nbsp;привлекая&nbsp;лишнего внимания.&nbsp;</p><p>Так оно&nbsp;бы и продолжалось, но&nbsp;тут случилась повышенная нагрузка и необходимость зарезервировать побольше мощностей для&nbsp;беспроблемной обработки повышенного спроса. Монолит справился на&nbsp;отлично, но&nbsp;самое интересное случилось потом: возвращая выделение ресурсов к&nbsp;прежним значениям, я случайно обратил внимание, что&nbsp;RPS в&nbsp;пиковые вечерние часы как‑то подозрительно совпадает с&nbsp;количеством ядер CPU, выделенных на&nbsp;весь монолит.</p><p>Количество выделенных ядер, конечно, ещё ничего не&nbsp;означает, поэтому я полез смотреть реальное потребление процессорного времени, сложив CPU usage по&nbsp;всем подам. С&nbsp;помощью нехитрой арифметики я обнаружил, что 100% загрузки одного ядра приходятся на 2,5&nbsp;RPS. Какое‑то время я находился в&nbsp;состоянии глубокого изумления, после чего решил, что&nbsp;это никуда не&nbsp;годится, и отправился в&nbsp;увлекательное приключение на 20&nbsp;минут.&nbsp;</p><p>Немного спойлеров: <span class="habrahidden">дело оказалось далеко не&nbsp;только в&nbsp;PHP.&nbsp;</span></p> <a href="https://habr.com/ru/articles/1078050/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=1078050#habracut">Читать далее</a>

Read full article →