Странен бъг: macOS „увисва“ след 49 дни непрекъсната работа

Най-четени

Емил Василев
Емил Василев
Емил Василев редовно превежда сложни научни теми на достъпен език — от въпроси като „Какво е имало преди Големия взрив?" до практическото приложение на биотехнологиите в лечението на болести. Тази комбинация от технологична и научна журналистика го прави един от най-разностранните автори в екипа на Kaldata.

Използването на компютри от серията Apple Mac като сървъри е непопулярна идея, тъй като въпреки корените си в Unix, операционната система macOS не е предназначена за коректна работа без надзор, а настройването и използването ѝ в този режим няма да е лесно.

Нещо повече, тя се оказва неспособна да обработва мрежовата активност за период, по-дълъг от 49 дни, 17 часа, 2 минути и 47 секунди.

Грешката в работата на macOS беше открита от инженерите на компанията Photon, които разполагат с парк от Mac компютри, използвани за мониторинг на услугите iMessage. В определен момент тези компютри спират да отговарят на мрежови връзки, въпреки че обработват пинга коректно. Любопитно е, че въпреки това, те продължават да поддържат съществуващите мрежови връзки, а това затруднява диагностиката още повече. По традиция проблемът се решава с рестартиране, но това не помага да се установи причината му.

Специалистите от Photon забелязаха, че проблемът се проявява при 49,7 дни непрекъсната работа на компютрите на Apple в мрежата и създадоха няколко скрипта, за да проверят теорията си. Както се оказа, виновникът за срива е системният брояч „tcp_now“, чиято задача е да следи текущото време в милисекунди от момента на зареждане за TCP стека. Стойностите на „tcp_now“ се представят във формат на 32-битово естествено число, чиято максимална стойност е 4 294 967 295 (2³² – 1), след което се нулира. В милисекунди това е точно 49,7 дни.

Съгласно стандартите операционните системи бързо премахват отворените TCP връзки – за macOS този период е 30 секунди. Когато стойността на „tcp_now“ се доближи до границата или я достигне, статусът на изтичане на срока на връзката се изчислява спрямо този показател, в резултат на което се получава стойност, която надвишава 32-битово естествено число. Когато се извършва периодична проверка, за да се определи дали трябва да се премахне затворена връзка, системата поради математическа грешка дава отрицателен отговор. TCP стекът се препълва погрешно, задържан от временни портове и спира да работи, когато вече няма налични портове. Бързината на този процес зависи от обема на мрежовата активност, но във всяка сървърна или професионална среда това става бързо.

Ето защо рестартирането решава проблема. Този проблем е източник на няколко известни грешки, от които се оплаква общността на собствениците на компютри Apple. Възможно е скоро да се появят по-цивилизовани начини за неговото решаване.

АбонаментВсичко важно от света на технологиите, директно в пощата ти.

С абонирането приемате нашите Условия и Политика за поверителност. Може да се отпишете с един клик по всяко време.


Коментирайте статията в нашите Форуми. За да научите първи най-важното, харесайте страницата ни във Facebook, и ни последвайте в Google Новини, TikTok, Telegram и Viber или изтеглете приложението на Kaldata.com за Android, iPhone, Huawei, Google Chrome, Microsoft Edge и Opera!

Абонирай се
Извести ме за
guest

0 Коментара
стари
нови оценка

Нови ревюта

Подобни новини