DataBase/Redis

Mac M1에서 redis-server 명령어 동작하지 않을 때 해결방법

희랍인 조르바 2021. 6. 20. 13:01

정말 간단하게 정리.

 

6.0.10 버전 이상부터는 해결됐다고 한다. 사정이 없다면 버전업을 추천(2021년 6월 20일 기준 6.2.4버전이 stable) 

 

redis-server 명령어가 동작하지 않아서 사용하고 있는 노트북이 m1 맥북프로랑 관련이 있지 않을까 싶어 검색해보니 맞았다.

 

아래처럼 입력하면 잘 실행되는걸 볼 수 있다.

$ sudo redis-server --daemonize yes

깃헙 이슈를 보면 Developer-Ecosystem-Engineering분이 남겨두신 상세한 설명을 내 나름 해석해보자면,

(어려워서.. 정확한 이유를 알고싶으시면 원문을 보시는 걸 추천)

 

redis-server 커맨드가 수행되면서 초기화 시, 환경변수들을 arguments로 받는다고 한다. 이 argument들을 끝까지 읽어나가면서 담아둔다.

 

문제가 생기는 순간은 환경변수들(배열)이 초기화를 시작하고 끝나기 전에 환경변수가 추가될때 상황이라 한다.

 

새로 추가된 환경변수가 낮은 메모리 주소에 할당되면 무시하게 되어 괜찮지만, 기존 메모리 주소보다 더 큰 메모리 주소에 할당되면 버퍼 끝에 변수가 추가 된다.

 

redis가 C++ 함수인 memset이나 bzero를 통해 버퍼를 초기화할 시, 버퍼 끝에 추가된 변수로 인해 계산된 길이보다 더 길어서 에러가 나는 것

 

그러면 왜 이런 상황이 m1에서 자주 발생하는 것인가?

 

m1에서는 한 스택에 열려있는 메모리 주소공간이 아주 크기 때문에 높은 메모리 주소에 할당되는 경우가 많다는 것이다.

 

sudo로 실행하면 그 환경변수들을 바꿔주어서 이슈가 발생하지 않는단다.

 

(OS에 deep한 부분까지는 잘 모르기도 해서 더 정확하게 알고싶다면 원문을 보셨으면 한다)

 

 

 

 

출처: https://github.com/redis/redis/issues/8062