Bazel 시스템은 수명이 긴 서버 프로세스로 구현됩니다. 이렇게 하면 BUILD 파일, 종속 항목 그래프, 기타 메타데이터 간의 빌드와 같은 BUILD 파일 캐싱과 같은 일괄 지향 구현으로는 불가능한 많은 최적화를 실행할 수 있습니다. 이렇게 하면 증분 빌드 속도가 향상되고 build
및 query
와 같은 다양한 명령어가 로드된 패키지의 동일한 캐시를 공유하므로 쿼리가 매우 빨라집니다.
bazel
를 실행하면 클라이언트가 실행됩니다. 클라이언트는 출력 기반에 따라 서버를 찾습니다. 출력 기반은 기본적으로 기본 작업공간 디렉터리 및 사용자 ID의 경로에 따라 결정되므로 여러 작업공간에서 빌드하는 경우 여러 출력 기반이 있으므로 여러 Bazel 서버 프로세스가 생성됩니다.
사용자마다 출력 기반이 다르기 때문에 동일한 워크스테이션의 여러 사용자가 동시에 빌드할 수 있습니다. 클라이언트가 실행 중인 서버 인스턴스를 찾을 수 없으면 새 인스턴스를 시작합니다. 일정 기간 동안 사용하지 않으면 서버 프로세스가 중지됩니다 (기본적으로 3시간. 시작 옵션 --max_idle_secs
을 사용하여 수정 가능).
대부분의 경우 실행 중인 서버가 있다는 사실은 사용자에게 보이지 않지만 이를 염두에 두는 것이 도움이 되는 경우도 있습니다. 예를 들어 서로 다른 디렉터리에서 많은 자동 빌드를 수행하는 스크립트를 실행하는 경우 유휴 서버가 많이 누적되지 않도록 하는 것이 중요합니다. 작업을 마치면 이를 종료하거나 짧은 제한 시간을 지정하여 이를 수행할 수 있습니다.
Bazel 서버 프로세스의 이름은 ps x
또는 ps -e f
의 출력에 bazel(dirname)
로 표시됩니다. 여기서 dirname은 작업공간 디렉터리의 루트를 포함하는 디렉터리의 기본 이름입니다. 예를 들면 다음과 같습니다.
ps -e f
16143 ? Sl 3:00 bazel(src-johndoe2) -server -Djava.library.path=...
이렇게 하면 지정된 작업공간에 속한 서버 프로세스를 쉽게 찾을 수 있습니다. ps
의 다른 특정 옵션의 경우 Bazel 서버 프로세스의 이름이 java
일 수 있다는 점에 유의하세요. Bazel 서버는 shutdown 명령어를 사용하여 중지할 수 있습니다.
bazel
를 실행할 때 클라이언트는 먼저 서버가 적절한 버전인지 확인합니다. 그렇지 않으면 서버가 중지되고 새 서버가 시작됩니다. 이렇게 하면 장기 실행 서버 프로세스를 사용해도 적절한 버전 관리를 방해하지 않습니다.