Операционная система macOS столкнулась с серьезным багом, который не позволяет ей работать более 49 дней, 17 часов и 2 минуты без перезагрузок. Этот вопрос был выявлен специалистами компании Photon в ходе расследования проблем с компьютерами Mac, использующимися для мониторинга сервисов iMessage.
Проблема была замечена, когда некоторые устройства перестали отвечать на сетевые подключения, несмотря на то, что на запросы ping они реагировали нормально. Устройства сохраняли свои сетевые соединения, что усложняло диагностику сбоя. Перезагрузка систем оказывалась единственным выходом, чтобы восстановить работоспособность.
После детального изучения, команда Photon выяснила, что виной все проблемы стал внутренний счетчик tcp_now, который отслеживает текущее время с момента загрузки для стека TCP. Этот счетчик, представленный в виде 32-битного беззнакового целого числа, способен отслеживать миллисекунды, и его максимальное значение равняется 4 294 967 секунд, или те самые 49 дней, 17 часов, 2 минуты и 47 секунд.
Важно отметить, что когда значение счетчика tcp_now достигает предела, оно обнуляется. При этом в системе происходит сбой, так как таймер, использующийся для оценки истечения срока действия соединений, начинает рассчитываться относительно этого замороженного значения.
Согласно выводам Photon, проблемы с tcp_now значительно ухудшают производительность сетевых соединений. Когда система начинает очищать неактивные соединения, завершение процесса может зависеть от некорректного расчета, что приводит к переполнению и невозможности установления новых соединений. Это может произойти достаточно быстро в условиях высокой сетевой активности, что критично для серверной деятельности.
Текущим и единственным решением на данный момент является перезагрузка системы, однако специалисты Photon заявляют, что работают над более эффективным решением проблемы. Также они подчеркивают, что подобные сбои обсуждаются на форумах сообщества Apple, и, вероятно, эта ошибка является давним вопросом.
Данный случай поднимает вопросы о надежности систем, использующих 32-битные значения времени, что напоминает о знаменитом сбое Windows 98, произошедшем 49,7 дней после включения системы, и предстоящей проблеме с 2038 годом, касающейся 32-битного времени в UNIX-системах. В отличие от macOS, система Linux уже в 2020 году исправила аналогичные проблемы, продлив тем самым срок работы до 2486 года.
