Баг в конфиге может положить целую Windows. Инженер Microsoft разобрал реальный случай — Tproger

0
18

Такие баги коварны: они не приводят к ошибке сразу. Но если приложение активно, баг способен положить всю систему

Инженер Microsoft Мэтт Хэмрик опубликовал разбор ошибки, которая может вызвать утечку памяти, замедление системы и даже крах всей Windows — и все это из-за одной строчки в конфигурационном файле .NET-приложения.

Речь идет о параметре reloadOnChange, который отвечает за автообновление настроек из файла конфигурации.

Проблема возникает, если установить reloadOnChange: true в неподходящем месте — например, в контроллере или middleware-компоненте. В этом случае каждый вызов создает нового «наблюдателя» за файлом, и память начинает стремительно заполняться.

Что делает reloadOnChange

Этот параметр нужен для динамической подгрузки настроек без перезапуска приложения. Но его стоит использовать только при старте и только для нестандартных файлов, которые .NET не мониторит по умолчанию.

Microsoft: 30% кода внутри компании уже написано ИИ. К 2030 это будет 95%tproger.ru

Если включить его не там и не вовремя — приложение начнет плодить объекты, следящие за одним и тем же файлом, и сборщик мусора просто не справится.

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

Как Microsoft нашла баг

Хэмрик обнаружил проблему, анализируя дампы памяти .NET, снятые через WinDbg и другие инструменты. Он увидел, как объект конфигурации разрастается в памяти — и каждый экземпляр привязан к новой копии FileSystemWatcher, который отслеживает изменения одного и того же файла.

Читать также:
В iOS 18.4 нашли ошибку, из-за которой приложения вылетают при обычных действиях — Tproger

И хотя пример относится к .NET 7, ошибка не зависит от версии: аналогичная утечка может случиться и в более новых релизах .NET, если допустить такую же архитектурную оплошность.

Почему это важно

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

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

Разработчики против пользователей

Этот кейс — пример того, как даже маленькая ошибка в коде может превратиться в системную проблему. И это особенно актуально на фоне разговоров о производительности Windows, медленной работе старых устройств и резком росте требований к «железу».

Windows и Linux сравнили в играх. С видеокартами AMD они сопоставимыtproger.ru

Как отмечает сам Хэмрик, часто дело не в слабом компьютере, а в неоптимизированном коде. И если раньше таким ошибкам просто не придавали значения, то сейчас они напрямую сказываются на стабильности всей системы.