chromedriver dev-shm 관련 이슈

zzarbttoo·2024년 8월 25일

트러블슈팅

목록 보기
2/5

사건의 발단

화면 캡처를 하는 크롤링 프로그램을 개발하는데
로컬 환경에서 fast api에서 chromeDriver을 사용하는 것은 문제가 없었는데
도커 환경에 띄워서 크롤링을 진행하니 invalid session id라는 에러가 나는 것을 확인할 수 있었다

해당 이슈

chrome 창이 많이 띄워져서 메모리가 부족해서 나는 이슈인가 했지만
그것은 아니었고 도커환경에서만 안되는 것을 확인하여 도커 관련 이슈인가 했지만

결론적으로는
disable-dev-shm-usage 옵션을 chrome option에 추가해주지 않은 것이 원인이었다

그렇다면 해당 옵션은 무엇이며
왜 도커 환경에서는 위 옵션을 켜야만 에러가 안났던 것일까...?

chrome driver 의 dev-shm 이용

chromedriver 혹은 chromium과 같은 renderer process는 성능을 높이기 위해
공유 메모리를 사용하게 됨

/dev/shm은 공유메모리로 리눅스 콘솔을 확인해보면 아래와 같이 tmpfs(임시 파일 스토리지) 로 돼있는 것을 확인할 수 있음

/dev/shm에 저장된 파일은 ram에 저장되기 때문에 실제로 매우 빠르며 휘발성임


문제의 원인은?

docker 내부에서 df -h를 입력해보면 /dev/shm에 64M로 적게 할당돼있는 것을 확인할 수 있다
기본적으로 컨테이너에서는 경량화를 목적으로 하기 때문에 공유 메모리 등을 매우 적게 잡은 것이라 할 수 있다

위 문제를 해결하기 위해서는 아래와 같이 해당 기능을 끄거나

options.add_argument("--disable-dev-shm-usage")

아니면 도커 실행 시에 --shm-size 로 사이즈를 조절해주면 된다

--disable-dev-shm-usage를 사용할 경우에는
해당 공유 메모리 대신 /tmp 디렉토리를 사용하게 되는데
이는 디스크 기반이기 때문에 io작업이 일어나 성능 저하를 일으킬 수 있다고 한다

애초에 로컬에서 위 에러가 나지 않았던 이유는 맥은
/dev/shm가 없기 때문에 어차피 tmp 디렉토리를 사용해서...

profile
나는야 누워있는 개발머신

0개의 댓글