[[분류:UNIX]][[분류:시간 전산화 문제]] [목차] == 개요 == 일부 구형 32비트 [[Linux]] 시스템에서 발생하는 컴퓨터 버그 중 하나. 리눅스 컴퓨터를 497일 동안 켜 놓으면, 컴퓨터가 이상 상태에 빠지거나 오류를 감지한 운영체제가 오류를 수정하기 위해 자동으로 리부팅이 되어 버리는 현상이다. 리눅스 커널에는 내부 타이머로 jiffies 라는 32비트 변수를 사용하는데, 이 변수는 1/100 초, 즉 10 [[밀리초]]당 1씩 증가하도록 되어 있다.[* CONFIG_HZ 라는 상수를 수정하여 변경 가능한데, 더 큰 값으로 변경하여 쓰기도 한다. 예를 들어 1000 으로 하면, 타이머가 1/1000초 단위로 동작하기에, 좀더 세밀한 타이머 조정이 가능하다. 하지만 이 경우에는 약 49일 17시간만에 문제가 생긴다.--이런 장난도 가능한데, 가급적 하지 말자. 바로, 숫자를 10000 이상의 자연수로 바꾸면 5일 안에 이 버그를 경험할 수 있다.--] 이 변수는 32비트로 되어 있어서 2^^32^^-1 = 약 42.949억(4,294,967,295)이 최댓값이다. 그런데, 100*60*60*24*'''497 = 약 42.940억'''(4,294,080,000)으로, 497일이 경과하면 거의 최댓값에 도달하게 된다. 컴퓨터 부팅후 정확히 497일 2시간 27분 52.96초에는 이 jiffies 값이 32비트 한계를 초과하여(4,294,967,296) 오버플로가 발생하고 0으로 리셋된다. 이로 인해서 시스템이 오동작을 일으킨다. Unsigned 가 아닌 signed 변수를 사용하는 경우에는 2^^31^^ =2147483648(21.47억)이기 때문에 497일의 절반인 248.5일만에 문제가 생긴다. 최신기종인 [[보잉 787]] 소프트웨어에서 발생한 문제이다.[[http://techholic.co.kr/archives/32911|비행기를 248일마다 재부팅해라]]란 기사도 있는데, 정확한 내용은 알 수 없지만 497일 문제와 관련이 있는 것으로 보인다. [[개인용 컴퓨터]] 사용자가 컴퓨터를 1년이 넘게 끄지 않는 일은 거의 없으므로 일반 사용자의 경우는 문제가 발생할 일이 거의 없다.[* [[암호화폐]]를 채굴한답시고 서버인 양 1년 내내 켜둔다면 문제가 생길 수 있다.] 하지만 '''[[서버]]'''나 [[임베디드 시스템|임베디드 OS가 깔린 컴퓨터]]의 경우는 1년 내내, 혹은 그 이상의 기간 동안 끄지 않고 유지하는 경우도 상당히 많기 때문에 심각한 문제가 발생할 수 있다. 당장에 금융기관의 서버가 오버플로되어 오류가 발생하면 당신의 [[있었는데요 없었습니다|계좌잔고가 '''0원'''이 되어버린다고]] 생각해보자. 다행히도 이런 서버들은 정기 백업과 정기적인 유지보수로 '''1년에도 몇번씩''' 재부팅을 하니 걱정할 필요가 없다.[* 임베디드 컴퓨터들은 사용 중인 내내 별다른 문제가 발생하지 않는다면 1년이 아니라 아예 수명이 다할 때 까지 디바이스 드라이버 업데이트나 운영체제 업데이트는 고사하고, 단순히 전원을 껐다가 다시 켜는일이 거의 없다. 업데이트 같은 걸 하는 게 오히려 문제를 일으키기가 쉽다고 한다.] 변수의 [[오버플로]]로 인하여 발생한다는 점에서 [[2038년 문제]]와 상당히 유사점이 많다. 일부 구형 [[Microsoft Windows|윈도우]] 시스템에도 비슷한 버그가 있었다. 단 이쪽은 1/1000초에 1씩 증가하도록 되어 있어 약 49일만에 문제가 발생한다. [[TCP/IP]] 프로토콜 내에서도 유사한 문제가 존재하며, 이는 윈도우 시스템에도 유사한 영향을 준다. [[https://support.microsoft.com/ko-kr/topic/%EB%AA%A8%EB%93%A0-tcp-ip-%ED%8F%AC%ED%8A%B8-time-wait-%EC%83%81%ED%83%9C%EC%97%90-%EC%9E%88%EB%8A%94-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%8B%9C%EC%9E%91-windows-vista-windows-7-windows-server-2008-%EB%B0%8F-windows-server-2008-r-2%EC%97%90%EC%84%9C%EC%97%90%EC%84%9C-497-%EC%9D%BC-%ED%9B%84-%EB%8B%AB%ED%98%80-%EC%9E%88%EC%A7%80-%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4-38c81adc-d990-c6f7-3689-91cca5d19a20|관련 내용]] == 해결책 == * 주기적으로 컴퓨터를 재시작한다. 어느 전자기기든 뭔가 상태가 이상하다 싶으면 전원을 끄고 재가동해 보는 것이 수리의 시작이기도 하다. 실제로 이 이유뿐만 아니라 여러 이유로 최소 1년에 한 번씩 서버 전원을 껐다가 켠다. 보통 한두달에 한번 정도 점검 및 리부팅을 하는 것이 보통이다. 그러니까 게임 레벨 초기화되고 싶지 않으면 서버 점검한다고 불평하지 말자.[* 사실 게임 서버는 연산량도 무지막지하고 쌓이는 데이터도 많은데다 돌아가는 서버 운영체제와 프로그램도 대단히 복잡하기 때문에 주기적으로 관리를 해야 된다. 서버를 가동하기 위한 운영체제가 64비트 시스템이라도 497일이 넘는 동안 리부팅없이 켜 둘 가능성이 거의 없는 편이다.] [* 그러니까 497일 동안 서버가 켜져 있으면 [[태초마을|모든 게 다 초기화가 될 수도 있다는 거다.]]--그러니까 어느날 게임을 켰는데 다이아랭크였는데 [[태초마을]]에서 태어났어요-- --다들 태초마을이라 게임 재출시와 비슷해진다--] * 최신 커널로 업데이트한다. 컴퓨터 CPU, 리눅스, 윈도우 등은 이미 오래전에 64비트 체계로 넘어 갔고, 리눅스 커널에서도 64비트 변수인 jiffies64를 쓰도록 수정되었다. 64비트 시스템에서 이 에러가 발생하려면 약 58억 4942만년[* 변수가 1/100초 마다 1씩 증가해서 2^^64^^번 증가하는데 걸리는 시간. 앞으로 이 정도의 시간이 경과하면 태양은 수명이 거의 다해 적색 거성으로 부풀어오르는 단계에 있게 된다.]동안 리부팅없이 컴퓨터를 돌려야 한다. == 관련 문제 == * [[2000년 문제]] * [[2010년 문제]] * [[2038년 문제]]