diff options
Diffstat (limited to 'container-core')
-rw-r--r-- | container-core/CMakeLists.txt | 1 | ||||
-rwxr-xr-x | container-core/src/main/sh/find-pid | 100 | ||||
-rwxr-xr-x | container-core/src/main/sh/vespa-jvm-dumper | 20 |
3 files changed, 103 insertions, 18 deletions
diff --git a/container-core/CMakeLists.txt b/container-core/CMakeLists.txt index 75ec63674c4..6d67d13bd94 100644 --- a/container-core/CMakeLists.txt +++ b/container-core/CMakeLists.txt @@ -2,5 +2,6 @@ install_config_definitions() install_java_artifact_dependencies(container-core) +vespa_install_script(src/main/sh/find-pid libexec/vespa) vespa_install_script(src/main/sh/vespa-load-balancer-status libexec/vespa) vespa_install_script(src/main/sh/vespa-jvm-dumper bin) diff --git a/container-core/src/main/sh/find-pid b/container-core/src/main/sh/find-pid new file mode 100755 index 00000000000..88c4c7df2aa --- /dev/null +++ b/container-core/src/main/sh/find-pid @@ -0,0 +1,100 @@ +#!/usr/bin/env bash +# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +# BEGIN environment bootstrap section +# Do not edit between here and END as this section should stay identical in all scripts + +findpath () { + myname=${0} + mypath=${myname%/*} + myname=${myname##*/} + empty_if_start_slash=${mypath%%/*} + if [ "${empty_if_start_slash}" ]; then + mypath=$(pwd)/${mypath} + fi + if [ "$mypath" ] && [ -d "$mypath" ]; then + return + fi + mypath=$(pwd) + if [ -f "${mypath}/${myname}" ]; then + return + fi + echo "FATAL: Could not figure out the path where $myname lives from $0" + exit 1 +} + +COMMON_ENV=libexec/vespa/common-env.sh + +source_common_env () { + if [ "$VESPA_HOME" ] && [ -d "$VESPA_HOME" ]; then + export VESPA_HOME + common_env=$VESPA_HOME/$COMMON_ENV + if [ -f "$common_env" ]; then + . $common_env + return + fi + fi + return 1 +} + +findroot () { + source_common_env && return + if [ "$VESPA_HOME" ]; then + echo "FATAL: bad VESPA_HOME value '$VESPA_HOME'" + exit 1 + fi + if [ "$ROOT" ] && [ -d "$ROOT" ]; then + VESPA_HOME="$ROOT" + source_common_env && return + fi + findpath + while [ "$mypath" ]; do + VESPA_HOME=${mypath} + source_common_env && return + mypath=${mypath%/*} + done + echo "FATAL: missing VESPA_HOME environment variable" + echo "Could not locate $COMMON_ENV anywhere" + exit 1 +} + +findhost () { + if [ "${VESPA_HOSTNAME}" = "" ]; then + VESPA_HOSTNAME=$(vespa-detect-hostname || hostname -f || hostname || echo "localhost") || exit 1 + fi + validate="${VESPA_HOME}/bin/vespa-validate-hostname" + if [ -f "$validate" ]; then + "$validate" "${VESPA_HOSTNAME}" || exit 1 + fi + export VESPA_HOSTNAME +} + +findroot +findhost + +# END environment bootstrap section + +set -euo pipefail + +if (( $# != 1 )); then + echo "Usage: $0 <service-config-id>" >&2 + exit 1 +fi + +readonly config_id=$1 +readonly status=$(vespa-sentinel-cmd list 2>/dev/null | grep "id=\"${config_id}\"") +if [ -z "${status}" ]; then + echo "No service named '${config_id}'" >&2 + exit 1 +fi +readonly pid=$(echo ${status} | cut -d " " -f 4 | cut -d "=" -f 2) +if ! [[ "${pid}" =~ ^[0-9]+$ ]]; then + echo "Could not find valid pid for '${config_id}' (pid='${pid}')" >&2 + exit 1 +fi +if [ -z "$(ps -p ${pid} -o pid=)" ]; then + echo "Could not find process for '${pid}'" >&2 + exit 1 +fi +echo $pid +exit 0 diff --git a/container-core/src/main/sh/vespa-jvm-dumper b/container-core/src/main/sh/vespa-jvm-dumper index 50f4a1b2d63..a3c41391260 100755 --- a/container-core/src/main/sh/vespa-jvm-dumper +++ b/container-core/src/main/sh/vespa-jvm-dumper @@ -89,24 +89,8 @@ if ! [ -d "${output_directory}" -a -w "${output_directory}" ]; then echo "Directory '${output_directory}' is not writable" exit 1 fi -readonly status=$(vespa-sentinel-cmd list | grep "id=\"${service}\"") -if [ -z "${status}" ]; then - echo "No service named '${service}'" - exit 1 -else - echo "Found service: ${status}" -fi -readonly jvm_pid=$(echo ${status} | cut -d " " -f 4 | cut -d "=" -f 2) -if ! [[ "${jvm_pid}" =~ ^[0-9]+$ ]]; then - echo "Could not find valid pid for '${service}' (pid='${jvm_pid}')" - exit 1 -else - echo "Pid for '${service}' is '${jvm_pid}'" -fi -if ! [ -n $(ps -p ${jvm_pid} -o pid=) ]; then - echo "Could not find process for '${jvm_pid}'" - exit 1 -fi +readonly jvm_pid=$($VESPA_HOME/libexec/vespa/find-pid "$service") +echo "Pid for '${service}' is '${jvm_pid}'" echo "Starting Java Flight Recorder recording" jcmd ${jvm_pid} JFR.start name=vespa-jvm-dumper path-to-gc-roots=true settings=profile filename=${output_directory}/jvm-jfr-dump.jfr |