From f8a20f15296d04881e44a145ff37bde6c27695db Mon Sep 17 00:00:00 2001 From: FreeOnePlus <54164178+FreeOnePlus@users.noreply.github.com> Date: Fri, 13 Dec 2024 15:49:53 +0800 Subject: [PATCH] [feat](docker)Modify the init_be and start_be scripts to meet the requirements for rapid Docker startup. (#45269) Related PR: #45267 Problem Summary: To meet the needs of rapid Docker startup, I have made adjustments to two related scripts in the Docker startup process. First, I added a env `SKIP_CHECK_ULIMIT` to the `start_be.sh` script, which will skip the size checks for `swap`, `ulimit`, and `max_map_count`. At the same time, I used `--console` to start the process and print logs. The reason why I did not use the `--daemon` daemon command to execute is that starting with a foreground log printing method in a Docker container is the correct and reliable approach. At the same time, I added a check logic for a `be.conf` configuration item in the `init_be.sh` script: if it is the first time starting, append the export `SKIP_CHECK_ULIMIT=true` to skip the `ulimit` value check in the BE process. In summary, these adjustments can meet the basic requirements for rapid Docker startup usage. --- bin/start_be.sh | 36 ++++++++++++++------------- docker/runtime/be/resource/init_be.sh | 1 + 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/bin/start_be.sh b/bin/start_be.sh index cda69ba29188de..3a48139fd60ded 100755 --- a/bin/start_be.sh +++ b/bin/start_be.sh @@ -175,29 +175,31 @@ if [[ "${RUN_VERSION}" -eq 1 ]]; then exit 0 fi -if [[ "$(uname -s)" != 'Darwin' ]]; then - MAX_MAP_COUNT="$(cat /proc/sys/vm/max_map_count)" - if [[ "${MAX_MAP_COUNT}" -lt 2000000 ]]; then - echo "Set kernel parameter 'vm.max_map_count' to a value greater than 2000000, example: 'sysctl -w vm.max_map_count=2000000'" - exit 1 +if [[ "${SKIP_CHECK_ULIMIT:- "false"}" != "true" ]]; then + if [[ "$(uname -s)" != 'Darwin' ]]; then + MAX_MAP_COUNT="$(cat /proc/sys/vm/max_map_count)" + if [[ "${MAX_MAP_COUNT}" -lt 2000000 ]]; then + echo "Set kernel parameter 'vm.max_map_count' to a value greater than 2000000, example: 'sysctl -w vm.max_map_count=2000000'" + exit 1 + fi + + if [[ "$(swapon -s | wc -l)" -gt 1 ]]; then + echo "Disable swap memory before starting be" + exit 1 + fi fi - if [[ "$(swapon -s | wc -l)" -gt 1 ]]; then - echo "Disable swap memory before starting be" + MAX_FILE_COUNT="$(ulimit -n)" + if [[ "${MAX_FILE_COUNT}" -lt 60000 ]]; then + echo "Set max number of open file descriptors to a value greater than 60000." + echo "Ask your system manager to modify /etc/security/limits.conf and append content like" + echo " * soft nofile 655350" + echo " * hard nofile 655350" + echo "and then run 'ulimit -n 655350' to take effect on current session." exit 1 fi fi -MAX_FILE_COUNT="$(ulimit -n)" -if [[ "${MAX_FILE_COUNT}" -lt 60000 ]]; then - echo "Set max number of open file descriptors to a value greater than 60000." - echo "Ask your system manager to modify /etc/security/limits.conf and append content like" - echo " * soft nofile 655350" - echo " * hard nofile 655350" - echo "and then run 'ulimit -n 655350' to take effect on current session." - exit 1 -fi - # add java libs # Must add hadoop libs, because we should load specified jars # instead of jars in hadoop libs, such as avro diff --git a/docker/runtime/be/resource/init_be.sh b/docker/runtime/be/resource/init_be.sh index f9269f3ee7e7b8..4b77eb3fc0df08 100644 --- a/docker/runtime/be/resource/init_be.sh +++ b/docker/runtime/be/resource/init_be.sh @@ -197,6 +197,7 @@ _main() { fi check_be_status doris_note "Ready to start BE!" + export SKIP_CHECK_ULIMIT=true ${DORIS_HOME}/be/bin/start_be.sh --console & child_pid=$! wait $child_pid