[ https://issues.apache.org/jira/browse/SOLR-9168?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16291765#comment-16291765 ]
Shawn Heisey commented on SOLR-9168: ------------------------------------ I think it can just be done as an environment variable, optionally set in the include script (normally solr.in.sh). SOLR_USER_OOM_EXE would be one idea for the variable name. Feel free to bikeshed. ;) Here's a patch against master with one idea. I have not tested this. The bin/solr script might need to explicitly export the environment variable. If this code works, it will propagate the arguments supplied to oom_solr to the user-defined program. There are a few other little tweaks in this patch. {noformat} diff --git a/solr/bin/oom_solr.sh b/solr/bin/oom_solr.sh index 5ecba6b..c50b643 100755 --- a/solr/bin/oom_solr.sh +++ b/solr/bin/oom_solr.sh @@ -17,14 +17,32 @@ SOLR_PORT=$1 SOLR_LOGS_DIR=$2 -SOLR_PID=`ps auxww | grep start.jar | grep $SOLR_PORT | grep -v grep | awk '{print $2}' | sort -r` +SOLR_PID=`ps auxww | grep start\.jar | grep -w $SOLR_PORT | grep -v grep | awk '{print $2}' | sort -r` if [ -z "$SOLR_PID" ]; then echo "Couldn't find Solr process running on port $SOLR_PORT!" - exit + exit 1 fi NOW=$(date +"%F_%H_%M_%S") +OOM_LOG_FILE="$SOLR_LOGS_DIR/solr_oom_killer-$SOLR_PORT-$NOW.log" ( echo "Running OOM killer script for process $SOLR_PID for Solr on port $SOLR_PORT" kill -9 $SOLR_PID -echo "Killed process $SOLR_PID" -) | tee $SOLR_LOGS_DIR/solr_oom_killer-$SOLR_PORT-$NOW.log +echo "Killed process $SOLR_PID at $NOW" +) | tee $OOM_LOG_FILE + +if [ -n "$SOLR_USER_OOM_EXE" ]; then + if [ -f "$SOLR_USER_OOM_EXE" ]; then + if [ -x "$SOLR_USER_OOM_EXE" ]; then + "$SOLR_USER_OOM_EXE" "$@" | tee -a $OOM_LOG_FILE + exit $? + else + echo User-defined OOM program $SOLR_USER_OOM_EXE found but not executable! \ + | tee -a $OOM_LOG_FILE + exit 1 + fi + else + echo User-defined OOM program $SOLR_USER_OOM_EXE not found! \ + | tee -a $OOM_LOG_FILE + exit 1 + fi +fi {noformat} > Add availability to specify own oom handing script > -------------------------------------------------- > > Key: SOLR-9168 > URL: https://issues.apache.org/jira/browse/SOLR-9168 > Project: Solr > Issue Type: Improvement > Components: scripts and tools > Affects Versions: 5.5.1 > Reporter: AngryDeveloper > Labels: oom > Fix For: 5.5.1 > > Attachments: > 0001-SOLR-9168-Allow-users-to-specify-their-own-OnOutOfMe.patch, > SOLR-9168.patch > > > Right now the start script always uses $SOLR_TIP/bin/oom_solr.sh to handle > OutOfMemoryException. This script only kills instance of solr. > We need to do some additional things (e.g sent mail about this exception) > What do you think about adding possibility to set up own script? > Proposition: > {code} > if [ -z "$SOLR_OOM_SCRIPT" ]; then > SOLR_OOM_SCRIPT=$SOLR_TIP/bin/oom_solr.sh > fi > [...] > nohup "$JAVA" "${SOLR_START_OPTS[@]}" $SOLR_ADDL_ARGS \ > "-XX:OnOutOfMemoryError=$SOLR_OOM_SCRIPT $SOLR_PORT $SOLR_LOGS_DIR" \ > -jar start.jar "${SOLR_JETTY_CONFIG[@]}" \ > 1>"$SOLR_LOGS_DIR/solr-$SOLR_PORT-console.log" 2>&1 & echo $! > > "$SOLR_PID_DIR/solr-$SOLR_PORT.pid" > {code} -- This message was sent by Atlassian JIRA (v6.4.14#64029) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org For additional commands, e-mail: dev-h...@lucene.apache.org