'싱글 프로세서'에 해당되는 글 1건

  1. 2008.12.15 Google Chrome 의 Multi Process & Memory Usage
Google Chrome 의 다중 프로세스와 메모리 사용


사용자 삽입 이미지

최근 Beta Tag를 구글의 크롬 브라우저 다른 브라우저에 비해 장점보다 단점이 더 많겠지만 일단 브라우저가 갖춰야 할 기능에 있어서는 상당히 만족스러운 느낌입니다.

렌더링속도와 브라우징 속도, 어플 수행속도 면에서 매우 안정적으로 변했습니다.
“헉 크롬이 다운되었습니다.” 라는 경고창은 자주 보였던 베타버젼 이후에는 아직까지 본 경우가 없습니다.

베타 첫 출시일에 JavaScript 지원여부와 벤츠마크에 대한 테스트를 해보고 그다지 만족하지 않아 그간 사용하던 FireFox를 사용해 왔었는데 부쩍 느려진 느낌이 들어 웹 서핑때에는 크롬을 사용중인데 그때와 많이 달라져 보이지 않지만 상대성인지 지금은 대단히 만족히 사용하고 있습니다.

크롬의 JavaScript 엔진인 V8 엔진은 이번 릴리즈 노트에서도 평균 1.4배 정도의 향상을 시켰다는 내용이 포함되어 있었고 다양한 부분에 있어서 향상과 안정성을 높인 것 같습니다.

이중 멀티 프로세스 모델과 메모리 사용에 대한 좋은 소개 내용이 있어 간단히 조사해 보았습니다.

크롬은 Firefox와 같은 브라우저에 비해 비교적 많은 메모리를 소모합니다.  바로 멀티 프로세스 아키텍처는  브라우저와 렌더링 엔진을 서로 다른 프로세서에서 동작시키는 원리로 동작하여 더 많은 메모리를 소모하게 됩니다.

크롬의 멀티 프로세스에 대한 설명은 Google Chrome Memory Usage – Good and Bad 이곳을 참고

위의 포스팅에 보면 간단한 메모리 사용에 대한 측정 방법에 대한 방법을 제시하고 있는데 Windows의 Task Manager(작업 관리자)를 통해서 측정한다면 실제 사용하는 메모리에 비해서 30%에서 40%정도 더 많은 사용률을 보일 수 있다고 합니다.  

이것은 멀티 프로세스 아키텍쳐만의 장점으로 크롬이 사용하는 공유 메모리까지 크롬의 메모리 사용률로 측정 될 수 있기 때문입니다.  그렇기 때문에 정확한 사용량을 측정하려면 크롬의 about:memory 를 통해서 확인하시는 것이 가장 정확한 방법입니다.

아래의 모습은 각 브라우저의 초기 페이지를 about:blank로 설정하고 띄운 상태에 메모리 사용률을 체크해 보았습니다. 


사용자 삽입 이미지


크롬이 채택한 이 멀티프로세스 아키텍쳐는 싱글 프로세스 브라우저에 비해 메모리 사용량이 늘어 날 수 밖에 없는 구조입니다.  하지만 반면에 관리에 있어 매우 정확히 동작하기 때문에 더 나은 방법일 수 있다는 생각을 합니다.

만약 메모리 공간을 시스템 프로세스에서 분리하기 위해 보안 취약점이 발생하면 다른 브라우저에까지 영향을 줄 수 있기는 하지만 분리된 렌더링 엔진 프로세스가 종료하면(예를 들자면 같은 도메인에 접속중인 모든 탭을 닫을 경우) 메모리는 운영체제의 수준으로 메모리는 반환되어 메모리 사용량이 증가하기도 쉽지만 사용량을 줄이는 것도 안정적으로 처리 될 수 있게 됩니다.

반면 Single 프로세서의 경우에는 한번 확보한 메모리를 비우거나 사용량을 줄이게 하는 것은 대단한 작업입니다.  FireFox의 경우에는 FreeBSD에서 개발된 jemalloc을 통합하여 사용하며 메모리 조각의 발생을 줄이는 방식으로 활용되고 프로세스 종료 시 메모리를 반환하게 되는 구조입니다.


사용자 삽입 이미지
출처 Stualrt Pavlov씨의 블로그

 구글 크롬의 경우가 메모리 반환의 구조는 더욱 단순해 보입니다.  브라우저는 웹 사이트를 보기 위해서 사용한 만큼 사용자의 메모리 리소스를 사용하고 그 사이트에 대한 정보를 브라우저에서 더 이상 사용하지 않을 때 모든 메모리를 반환한다.  

국내 고급형 PC의 보급률로 볼때면 리소스가 뒷 받침해주니 이런 방식이 더 낫지 않을까?   개인적으로는 단순하면서 더 깔끔하다는 느낌을 받습니다. 

사용자의 브라우징 유형에 따라서 크롬이 더 낫거나 파이어폭스가 더 나을 수도 있다는 느낌도 듭니다.


Chromium Developer DocumentationMulti-process Architecture
신고
Posted by Rhio.kim